Drawing API example/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "== Exemple simple ==")
No edit summary
 
(34 intermediate revisions by 2 users not shown)
Line 7: Line 7:
== Exemple simple ==
== Exemple simple ==


Vous devez en premier lieu charger les modules Pièce (Part) et Mise en plan (Drawing):
First of all you need the Part and the Drawing module:
{{Code|code=
{{Code|code=
import FreeCAD, Part, Drawing
import FreeCAD, Part, Drawing
}}
}}


Créez une petite pièce.
Create a small sample part
{{Code|code=
{{Code|code=
Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100)))
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.
Direct projection. The G0 means hard edge, the G1 is tangent continuous.
{{Code|code=
{{Code|code=
Shape = App.ActiveDocument.Shape.Shape
Shape = App.ActiveDocument.Shape.Shape
Line 25: Line 25:
}}
}}


Tout est projeté sur le plan Z:
Everything was projected on the Z-plane:
{{Code|code=
{{Code|code=
print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength
print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength
Line 31: Line 31:
}}
}}


Un autre vecteur de projection
Different projection vector
{{Code|code=
{{Code|code=
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1))
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1))
}}
}}


Project to SVG
Projeter en format SVG
{{Code|code=
{{Code|code=
resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
Line 42: Line 42:
}}
}}


== Parametric example ==
== Exemple paramétrique ==


Créer le corps
Create the body
{{Code|code=
{{Code|code=
import FreeCAD
import FreeCAD
Line 91: Line 91:
}}
}}


Insérer un objet Page et assigner un modèle.
Insert a Page object and assign a template
{{Code|code=
{{Code|code=
App.ActiveDocument.addObject('Drawing::FeaturePage','Page')
App.ActiveDocument.addObject('Drawing::FeaturePage','Page')
Line 97: Line 97:
}}
}}


Create a view on the "Shape" object, define the position and scale and assign it to a Page
Créer une vue de votre objet "Shape", définir la position et l'assigner à une page.
{{Code|code=
{{Code|code=
App.ActiveDocument.addObject('Drawing::FeatureViewPart','View')
App.ActiveDocument.addObject('Drawing::FeatureViewPart','View')
Line 107: Line 107:
}}
}}


Create a second view on the same object but this time the view will be rotated by 90 degrees.
Créer une seconde vue de l'objet, le but ici est de faire une rotation de 90 degrés.
{{Code|code=
{{Code|code=
App.ActiveDocument.addObject('Drawing::FeatureViewPart','ViewRot')
App.ActiveDocument.addObject('Drawing::FeatureViewPart','ViewRot')
Line 119: Line 119:
}}
}}


Créer une troisième vue de votre objet ici une vue isométrique. Nous activons les lignes cachées.
Create a third view on the same object but with an isometric view direction. The hidden lines are activated too.
{{Code|code=
{{Code|code=
App.ActiveDocument.addObject('Drawing::FeatureViewPart','ViewIso')
App.ActiveDocument.addObject('Drawing::FeatureViewPart','ViewIso')
Line 130: Line 130:
}}
}}


Changer quelque chose et mise à jour. La mise à jour modifie les vues et la page.
Change something and update. The update process changes the view and the page.
{{Code|code=
{{Code|code=
App.ActiveDocument.View.X = 30.0
App.ActiveDocument.View.X = 30.0
Line 138: Line 138:
}}
}}


== Accessing the bits and pieces ==
=== Accéder aux objets et détails ===


Obtenir des fragments SVG d'une vue.
Get the SVG fragment of a single view
{{Code|code=
{{Code|code=
ViewSVG = App.ActiveDocument.View.ViewResult
ViewSVG = App.ActiveDocument.View.ViewResult
Line 146: Line 146:
}}
}}


Obtenir l'ensemble de la page des résultats (c'est un fichier dans le répertoire temporaire avec uniquement le droit en lecture).
Get the whole result page (it's a file in the document's temporary directory, only read permission)
{{Code|code=
{{Code|code=
print "Resulting SVG document: ",App.ActiveDocument.Page.PageResult
print "Resulting SVG document: ",App.ActiveDocument.Page.PageResult
Line 153: Line 153:
}}
}}


Important: free the file!
Important: libérer le fichier!
{{Code|code=
{{Code|code=
del file
del file
Line 159: Line 159:


Insérer une vue avec votre propre contenu:
Insert a view with your own content:
{{Code|code=
{{Code|code=
App.ActiveDocument.addObject('Drawing::FeatureView','ViewSelf')
App.ActiveDocument.addObject('Drawing::FeatureView','ViewSelf')
Line 179: Line 179:
}}
}}


Ce qui donne le résultat suivant:
That leads to the following result:


[[Image:DrawingScriptResult.jpg]]
[[Image:DrawingScriptResult.jpg]]


=== Généralités sur les dimensions et les tolérances ===
== General dimensioning and tolerancing ==


{{Emphasis|See also:}} [[Drawing Dimensioning Addon]]
{{Emphasis|Voir aussi :}} [[Drawing Dimensioning Addon/fr|Extension dimensionnement Drawing]]


Dessiner les dimensions et les tolérances est encore en cours de développement mais vous pouvez accéder à des fonctionnalités de base avec un peu de travail.
Drawing dimensions an tolerances are still under development but you can get some basic functionality with a bit of work.


First you need to get the gdtsvg python module from here (WARNING: This could be broken at any time!):
Tout d'abord vous avez besoin d'obtenir le module Python gdtsvg (attention: le lien peut être rompu):


https://github.com/jcc242/FreeCAD
https://github.com/jcc242/FreeCAD


Pour obtenir un cadre de contrôle de cette fonctionnalité, essayez ce qui suit:
To get a feature control frame, try out the following:
{{Code|code=
{{Code|code=
import gdtsvg as g # Import the module, I like to give it an easy handle
import gdtsvg as g # Import the module, I like to give it an easy handle
Line 200: Line 200:
}}
}}


Here is a good breakdown of the contents of a feature control frame: http://www.cadblog.net/adding-geometric-tolerances.htm
Voici une bonne répartition du contenu d'un cadre de contrôle : http://www.cadblog.net/adding-geometric-tolerances.htm


Les paramètres à transmettre pour contrôler la trame sont les suivants:
The parameters to pass to control frame are:
#Coordonnée X dans le système de coordonnées SVG (type chaîne de caractères)
#X-coordinate in SVG-coordinate system (type string)
#Coordonnée Y dans le système de coordonnées SVG (type chaîne de caractères)
#Y-coordinate in SVG-coordinate system (type string)
#The desired geometric characteristic symbol (tuple, svg string as first, width of symbol as second, height of symbol as third)
#Le symbole caractéristique géométrique souhaité (tuple, chaîne svg en premier, largeur du symbole en second, hauteur du symbole en troisième)
#The tolerance (type string)
#La tolérance (type chaîne de caractères)
#(facultatif) Le symbole de diamètre (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
#(optional) The diameter symbol (tuple, svg string as first, width of symbol as second, height of symbol as third)
#(facultatif) Matériau modifiant la condition (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
#(optional) The condition modifying material (tuple, svg string as first, width of symbol as second, height of symbol as third)
#(facultatif) Première donnée (type chaîne de caractères)
#(optional) The first datum (type string)
#(facultatif) Condition de modification de la première donnée (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
#(optional) The first datum's modifying condition (tuple, svg string as first, width of symbol as second, height of symbol as third)
#(facultatif) Deuxième donnée (type chaîne de caractères)
#(optional) The second datum (type string)
#(facultatif) Condition de modification de la deuxième donnée (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
#(optional) The second datum's modifying condition (tuple, svg string as first, width of symbol as second, height of symbol as third)
#(facultatif) Troisième donnée (type chaîne de caractères)
#(optional) The third datum (type string)
#(facultatif) Condition matérielle du troisième point de référence (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
#(optional) The third datum's material condition (tuple, svg string as first, width of symbol as second, height of symbol as third)


La fonction ControlFrame retourne un type contenant (type chaîne de caractères Svg, largeur hors tout de la fenêtre de contrôle, hauteur hors tout du cadre de la fenêtre de contrôle).
The ControlFrame function returns a type containing (svg string, overall width of control frame, overall height of control frame)'''


To get a dimension, try out the following:
Pour obtenir une dimension, essayez ce qui suit:
{{Code|code=
{{Code|code=
import gdtsvg
import gdtsvg
Line 225: Line 225:
}}
}}


Inputs for linear dimension are:
Les entrées pour la dimension linéaire sont:
#point1, an (x,y) tuple with svg-coordinates, this is one of the points you would like to dimension between
#point1, un tuple (x,y) avec des coordonnées svg, c’est l’un des points que vous souhaitez coter entre
#point2, an (x,y) tuple with svg-coordinates, this is the second point you would like to dimension between
#point2, un tuple (x,y) avec des coordonnées svg, c’est le deuxième point que vous souhaitez coter entre
#textpoint, an (x,y) tuple of svg-coordinates, this is where the text of your dimension will be
#textpoint, un tuple (x,y) de coordonnées svg, c'est ici que se trouvera le texte de votre dimension
#dimensiontext, a string containing the text you want the dimension to say
#dimensiontext, une chaîne contenant le texte que la dimension doit indiquer
#linestyle, a string containing svg (i.e. css) styles, using the getStyle function to retrieve a preset string, for styling the how the lines look
#linestyle, une chaîne contenant des styles svg (css), qui utilise la fonction getStyle pour récupérer une chaîne prédéfinie, pour styliser l'apparence des lignes.
#arrowstyle, une chaîne contenant des styles svg (css), à l'aide de la fonction getStyle pour récupérer une chaîne prédéfinie, afin de donner un style à l'apparence des flèches
#arrowstyle, a string containing svg (i.e. css) styles, using the getStyle function to retrieve a preset string, for styling how the arrows look
#textstyle, a string containing svg (i.e. css) styles, using the getStyle function to retrieve a preset string, for styling how the text looks
#textstyle, une chaîne contenant des styles svg (css), à l'aide de la fonction getStyle pour récupérer une chaîne prédéfinie, pour définir l'apparence du texte


With those two, you can proceed as above for displaying them on the drawing page. This module is very buggy and can be broken at any given moment, bug reports are welcome on the github page for now, or contact jcc242 on the forums if you post a bug somewhere else.
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.


{{Powerdocnavi{{#translation:}}}}
{{Drawing Tools navi}}
[[Category:Developer Documentation{{#translation:}}]]
{{Userdocnavi}}
[[Category:API]]
[[Category:Python Code{{#translation:}}]]
{{Drawing Tools navi{{#translation:}}}}
{{clear}}

Latest revision as of 14:41, 27 November 2022

Other languages:

Introduction

Le flux de travail de l'interface utilisateur graphique pour l' atelier Drawing est limité. Utiliser un script pour l'interface est plus intéressante.

Exemple simple

Vous devez en premier lieu charger les modules Pièce (Part) 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 format SVG

resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
print resultSVG

Exemple paramétrique

Créer le corps

import FreeCAD
import Part
import Drawing

# Create three boxes and a cylinder
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
# Fuse two boxes and the cylinder
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
# Cut the fused shapes from the first box
App.ActiveDocument.addObject("Part::Cut","Shape")
App.ActiveDocument.Shape.Base = App.ActiveDocument.Box 
App.ActiveDocument.Shape.Tool = App.ActiveDocument.Fusion1
# Hide all the intermediate shapes 
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 assigner un modèle.

App.ActiveDocument.addObject('Drawing::FeaturePage','Page')
App.ActiveDocument.Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'

Créer une vue de votre objet "Shape", définir la position et l'assigner à 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 de l'objet, le but ici est de faire une rotation 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 de votre objet ici une vue isométrique. Nous activons les lignes caché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 quelque chose et mise à jour. La mise à jour modifie les vues et la page.

App.ActiveDocument.View.X = 30.0
App.ActiveDocument.View.Y = 30.0
App.ActiveDocument.View.Scale = 1.5
App.ActiveDocument.recompute()

Accéder aux objets et détails

Obtenir des fragments SVG d'une vue.

ViewSVG = App.ActiveDocument.View.ViewResult
print ViewSVG

Obtenir l'ensemble de la page des résultats (c'est un fichier dans le répertoire temporaire avec uniquement le droit en lecture).

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 = """<g id="ViewSelf"
  stroke="rgb(0, 0, 0)"
  stroke-width="0.35"
  stroke-linecap="butt"
  stroke-linejoin="miter"
  transform="translate(30,30)"
  fill="#00cc00"
  >

  <ellipse cx="40" cy="40" rx="30" ry="15"/>
  </g>"""
App.ActiveDocument.Page.addObject(App.ActiveDocument.ViewSelf)
App.ActiveDocument.recompute()

del ViewSVG

Ce qui donne le résultat suivant:

Généralités sur les dimensions et les tolérances

Voir aussi : Extension dimensionnement Drawing

Dessiner les dimensions et les tolérances est encore en cours de développement mais vous pouvez accéder à des fonctionnalités de base avec un peu de travail.

Tout d'abord vous avez besoin d'obtenir le module Python gdtsvg (attention: le lien peut être rompu):

https://github.com/jcc242/FreeCAD

Pour obtenir un cadre de contrôle de cette fonctionnalité, essayez ce qui suit:

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"))

Voici une bonne répartition du contenu d'un cadre de contrôle : http://www.cadblog.net/adding-geometric-tolerances.htm

Les paramètres à transmettre pour contrôler la trame sont les suivants:

  1. Coordonnée X dans le système de coordonnées SVG (type chaîne de caractères)
  2. Coordonnée Y dans le système de coordonnées SVG (type chaîne de caractères)
  3. Le symbole caractéristique géométrique souhaité (tuple, chaîne svg en premier, largeur du symbole en second, hauteur du symbole en troisième)
  4. La tolérance (type chaîne de caractères)
  5. (facultatif) Le symbole de diamètre (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
  6. (facultatif) Matériau modifiant la condition (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
  7. (facultatif) Première donnée (type chaîne de caractères)
  8. (facultatif) Condition de modification de la première donnée (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
  9. (facultatif) Deuxième donnée (type chaîne de caractères)
  10. (facultatif) Condition de modification de la deuxième donnée (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)
  11. (facultatif) Troisième donnée (type chaîne de caractères)
  12. (facultatif) Condition matérielle du troisième point de référence (tuple, type chaîne de caractères svg en premier, largeur du symbole en deuxième, hauteur du symbole en troisième)

La fonction ControlFrame retourne un type contenant (type chaîne de caractères 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")

Les entrées pour la dimension linéaire sont:

  1. point1, un tuple (x,y) avec des coordonnées svg, c’est l’un des points que vous souhaitez coter entre
  2. point2, un tuple (x,y) avec des coordonnées svg, c’est le deuxième point que vous souhaitez coter entre
  3. textpoint, un tuple (x,y) de coordonnées svg, c'est ici que se trouvera le texte de votre dimension
  4. dimensiontext, une chaîne contenant le texte que la dimension doit indiquer
  5. linestyle, une chaîne contenant des styles svg (css), qui utilise la fonction getStyle pour récupérer une chaîne prédéfinie, pour styliser l'apparence des lignes.
  6. arrowstyle, une chaîne contenant des styles svg (css), à l'aide de la fonction getStyle pour récupérer une chaîne prédéfinie, afin de donner un style à l'apparence des flèches
  7. textstyle, une chaîne contenant des styles svg (css), à l'aide de la fonction getStyle pour récupérer une chaîne prédéfinie, pour définir l'apparence 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.