Drawing Module/fr

= Atelier Mise en plan =

L'atelier de mise en plan 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.

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 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
 * 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

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'

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 mettre à 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 :



Gabarits
FreeCAD est livré avec un jeu de gabarits par défaut, vous pouvez en trouver d'autres sur la page des Gabarits de mise en plan.