Drawing Module/fr

= Atelier Mise en plan (Drawing) =

L'atelier de mise en plan (Drawing) vous permet de coucher sur papier votre projet 3D, en mettant des vues de votre modèle dans une fenêtre 2D et en insérant cette fenêtre dans une mise en plan (page). Celle-ci pourra avoir une bordure, un titre et un logo, et cette page pourra ensuite être imprimée. L'atelier de mise en plan est en ce moment en construction et consiste plus ou moins en un aperçu technologique !

Outils graphiques


La capture d'écran ci-dessus montre les concepts principaux de l'atelier de Mise en plan. Le document contient un objet (Schenkel) que nous voulons extraire dans une mise en plan. Une « Page » est donc créée. Une page est générée depuis un gabarit, dans ce cas le gabarit « A3_Landscape ». Ce gabarit est un document SVG qui peut contenir un cadre de page, un cartouche avec votre logo se conformant à vos normes.

Dans cette page peuvent être insérées une ou plusieurs vues. Chaque vue a une position sur la page (Propriétés X,Y), une échelle (Propriété d'échelle) et des propriétés additionnelles. Chaque fois que la page, la vue ou l'objet référencé subit une modification, la page est regénérée et l'affichage mis à jour.

Script
Pour l'instant la méthodologie de travail par l'interface graphique est sévèrement limitée, l'API de script est plus intéressante. Voici quelques exemples démontrant l'utilisation de l'API de script dans l'atelier de mise en plan.

Ici un script qui permet de remplir facilement le cartouche de la feuille A3_Landscape de FreeCAD.

Exemple simple
Vous devez en premier lieu charger les modules Pièce et Mise en plan (Drawing) : import FreeCAD, Part, Drawing Créez une petite pièce Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100))) Projection directe. G0 veut dire arête vive, G1 est une tangente continue. Shape = App.ActiveDocument.Shape.Shape [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape) print "visible edges:", len(visibleG0.Edges) print "hidden edges:", len(hiddenG0.Edges) Tout est projeté sur le plan Z : print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength print "Bnd Box project: X=",visibleG0.BoundBox.XLength," Y=",visibleG0.BoundBox.YLength," Z=",visibleG0.BoundBox.ZLength Un autre vecteur de projection [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1)) Projeter en SVG resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1)) print resultSVG

La méthode paramétrique
Créer le corps import FreeCAD import Part import Drawing

App.ActiveDocument.addObject("Part::Box","Box") App.ActiveDocument.Box.Length=100.00 App.ActiveDocument.Box.Width=100.00 App.ActiveDocument.Box.Height=100.00 App.ActiveDocument.addObject("Part::Box","Box1") App.ActiveDocument.Box1.Length=90.00 App.ActiveDocument.Box1.Width=40.00 App.ActiveDocument.Box1.Height=100.00 App.ActiveDocument.addObject("Part::Box","Box2") App.ActiveDocument.Box2.Length=20.00 App.ActiveDocument.Box2.Width=85.00 App.ActiveDocument.Box2.Height=100.00 App.ActiveDocument.addObject("Part::Cylinder","Cylinder") App.ActiveDocument.Cylinder.Radius=80.00 App.ActiveDocument.Cylinder.Height=100.00 App.ActiveDocument.Cylinder.Angle=360.00 App.ActiveDocument.addObject("Part::Fuse","Fusion") App.ActiveDocument.Fusion.Base = App.ActiveDocument.Cylinder App.ActiveDocument.Fusion.Tool = App.ActiveDocument.Box1 App.ActiveDocument.addObject("Part::Fuse","Fusion1") App.ActiveDocument.Fusion1.Base = App.ActiveDocument.Box2 App.ActiveDocument.Fusion1.Tool = App.ActiveDocument.Fusion App.ActiveDocument.addObject("Part::Cut","Shape") App.ActiveDocument.Shape.Base = App.ActiveDocument.Box App.ActiveDocument.Shape.Tool = App.ActiveDocument.Fusion1 Gui.ActiveDocument.Box.Visibility=False Gui.ActiveDocument.Box1.Visibility=False Gui.ActiveDocument.Box2.Visibility=False Gui.ActiveDocument.Cylinder.Visibility=False Gui.ActiveDocument.Fusion.Visibility=False Gui.ActiveDocument.Fusion1.Visibility=False Insérer un objet Page et lui attribuer un gabarit App.ActiveDocument.addObject('Drawing::FeaturePage','Page') App.ActiveDocument.Page.Template = App.getResourceDir+'Mod/Drawing/Templates/A3_Landscape.svg'
 * 1) Créer trois cubes et un cylindre
 * 1) Unir deux cubes et un cylindre
 * 1) Soustraire les formes fusionnées du premier cube
 * 1) Masquer toutes les formes intermédiaires

Créer une vue de l'objet Shape, en définissant la position et l'échelle, puis en l'assignant à une Page App.ActiveDocument.addObject('Drawing::FeatureViewPart','View') App.ActiveDocument.View.Source = App.ActiveDocument.Shape App.ActiveDocument.View.Direction = (0.0,0.0,1.0) App.ActiveDocument.View.X = 10.0 App.ActiveDocument.View.Y = 10.0 App.ActiveDocument.Page.addObject(App.ActiveDocument.View)

Créer une seconde vue du même objet, mais cette fois avec une vue pivotée de 90 degrés. App.ActiveDocument.addObject('Drawing::FeatureViewPart','ViewRot') App.ActiveDocument.ViewRot.Source = App.ActiveDocument.Shape App.ActiveDocument.ViewRot.Direction = (0.0,0.0,1.0) App.ActiveDocument.ViewRot.X = 290.0 App.ActiveDocument.ViewRot.Y = 30.0 App.ActiveDocument.ViewRot.Scale = 1.0 App.ActiveDocument.ViewRot.Rotation = 90.0 App.ActiveDocument.Page.addObject(App.ActiveDocument.ViewRot)

Créer une troisième vue du même objet, mais avec une projection isométrique. Les lignes cachées sont activées. App.ActiveDocument.addObject('Drawing::FeatureViewPart','ViewIso') App.ActiveDocument.ViewIso.Source = App.ActiveDocument.Shape App.ActiveDocument.ViewIso.Direction = (1.0,1.0,1.0) App.ActiveDocument.ViewIso.X = 335.0 App.ActiveDocument.ViewIso.Y = 140.0 App.ActiveDocument.ViewIso.ShowHiddenLines = True App.ActiveDocument.Page.addObject(App.ActiveDocument.ViewIso)

Changer des paramètres et mise à jour. La mise à jour modifie la vue et la page. App.ActiveDocument.View.X = 30.0 App.ActiveDocument.View.Y = 30.0 App.ActiveDocument.View.Scale = 1.5 App.ActiveDocument.recompute

Fonctions diverses
Obtenir le fragment SVG d'une vue simple ViewSVG = App.activeDocument.View.ViewResult print ViewSVG Obtenir toute la page (par un fichier dans le répertoire temporaire avec droits en lecture seulement) print "Resulting SVG document: ",App.activeDocument.Page.PageResult file = open(App.activeDocument.Page.PageResult,"r") print "Result page is ",len(file.readlines)," lines long"

Important : libérer le fichier ! del file Insérer une vue avec votre propre contenu : App.activeDocument.addObject('Drawing::FeatureView','ViewSelf') App.activeDocument.ViewSelf.ViewResult = """       """ App.activeDocument.Page.addObject(App.activeDocument.ViewSelf) App.activeDocument.recompute del Shape,ViewSVG, resultSVG Ce qui donne le résultat suivant :



Généralité sur les Dimensions et les Tolérances
Dessiner les dimensions avec tolérances, est encore en développement, mais vous pouvez obtenir certaines fonctionnalités de base avec un peu de travail.

Tout d'abord vous avez besoin d'obtenir le module Python gdtsvg (attention : le lien pourrait être rompu à tout moment!) : ici

Essayez ce qui suit, Pour obtenir une fenêtre de contrôle de fonction, :

import gdtsvg as g # Import the module, I like to give it an easy handle ourFrame = g.ControlFrame("0","0", g.Perpendicularity, ".5", g.Diameter, g.ModifyingSymbols("M"), "A", g.ModifyingSymbols("F"), "B", g.ModifyingSymbols("L"), "C", g.ModifyingSymbols("I"))  Here is a good breakdown of the contents of a feature control frame: 

Les paramètres à passer dans la fenêtre :
 * 1) X-coordonnée, coordonnées dans le system-SVG (type string)
 * 2) Y-coordinate, coordonnées dans le system-SVG (type string)
 * 3) Le symbole des caractéristiques géométriques souhaitée (un tuple, (en premier la chaîne, en deuxième, la largeur du symbole, en troisième, la hauteur du symbole)
 * 4) La tolerance (type string)
 * 5) (optionel) Le diametre du symbole (tuple, en premier la chaîne Svg, en deuxième, la largeur du symbole, en troisième, la hauteur du symbole)
 * 6) (optionel) Les conditions de modifications matérielles (tuple, en premier, la chaîne Svg, en deuxième, la largeur du symbole, en troisième, la hauteur du symbole)
 * 7) (optionel) La première, la donnée (type string)
 * 8) (optionel) La première, modification de la donnée (tuple, en premier, la chaîne Svg, en deuxième, la largeur du symbole, en troisième, la hauteur du symbole)
 * 9) (optionel) La seconde donnée (type string)
 * 10) (optionel) Conditions de modification de la seconde donnée (tuple, en premier, la chaîne Svg, en deuxième, la largeur du symbole, en troisième, la hauteur du symbole)
 * 11) (optionel) la troisième donnée (type string)
 * 12) (optionel) Conditions de modification de la troisième donnée (tuple, en premier, la chaîne Svg, en deuxième, la largeur du symbole, en troisième, la hauteur du symbole)

La fonction ControlFrame retourne un type contenant (la chaîne Svg, largeur hors tout de la fenêtre de contrôle, hauteur hors tout du cadre de la fenêtre de contrôle)

Pour obtenir une dimension, essayez ce qui suit :

import gdtsvg ourDimension = linearDimension(point1, point2, textpoint, dimensiontext, linestyle=getStyle("visible"), arrowstyle=getStyle("filled"), textstyle=getStyle("text")

Entrée des dimensions linéaires:
 * 1) point1, le tuple (x,y) avec les coordonnées svg, ceci est le premier point de la dimension
 * 2) point2, le tuple (x,y) avec les coordonnées svg, ceci est le deuxième point de la dimension
 * 3) textpoint, le tuple (x,y) des coordonnées svg, ceci est la position du texte de la dimension
 * 4) dimensiontext, la chaîne contenant le texte de la dimension
 * 5) linestyle, la chaîne svg contenant (i.e. css) contenant le styles, utilisez la fonction getStyle pour récupérer un paramètre défini pour la chaîne, pour donner un style à la chaîne
 * 6) arrowstyle, la chaîne svg contenant contenant le style (i.e. css), utilisez la fonction getStyle pour récupérer une chaîne prédéfinie, pour donner le style de flèche
 * 7) textstyle, la chaîne svg contenant contenant le style (i.e. css), utilisez la fonction getStyle pour récupérer une chaîne prédéfinie, pour donner le style du texte

Vous pouvez procéder comme ci-dessus pour afficher les dimensions sur la page de dessin. Ce module est très bogué, et, peut être rompu à tout moment, des rapports de bugs, sont les bienvenus sur la page github pour l'instant, ou contactez jcc242, sur les forums, si vous validez un bug, ou quelque chose d'autre.

Modèles
FreeCAD est livré avec un jeu de modèles par défaut, vous pouvez en trouver d'autres sur la page des Modèles de feuille.