| Description |
|---|
| Crée une polyligne avec les coordonnées x y z séparées par un espace. Les données sont extraites d'un fichier. (Ligne de commande, collez cette macro complète dans la console Python). |
| Auteur |
| Mario52 |
| Téléchargement |
| Icône de la barre d'outils |
| Liens |
| Page des macros Comment installer une macro Comment créer une barre d'outils |
| Version Macro |
| 0.3 |
| Dernière modification |
| 2020-10-16 |
| Version(s) FreeCAD |
| Toutes |
| Raccourci clavier |
| None |
| Voir aussi |
| Macro_Dxf_To_Shape |
Cette macro crée une polyligne (ou des points) avec les coordonnées extraites d'un fichier. Les coordonnées X Y Z sont séparées par un espace.
Le fichier doit avoir les coordonnées X Y Z au ASCII sans entête.
Macro_WireXYZ.FCMacro
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# created a wire with coordinate x y z separated (in the file without coma)
__title__= "Macro_WireXYZ"
__author__= "Mario52"
__date__= "2020/10/16"
__version__= "00.03"
##
#EX:
#0 0 0
#10 10 10
#15 20 25
#. . . .
from FreeCAD import Base
import Draft, Part
## path for Windows : C:\yourPath\cloud.asc (create one error in Python (cause, the "\" is a command syntax in Python)
## replace "\" by "/" result : C:/yourPath/cloud.asc
## or replace the "\" by "\\" result : C:\\yourPath\\cloud.asc
fichier = "C:\\yourPath\\cloud.asc" # path and name of file.txt
file = open(fichier, "r") # open the file read
wire = []
X=Y=Z = 0.0
for ligne in file:
coordinates = ligne.split()
try: # for format PCD ignore the header
X,Y,Z = coordinates # separate the coordinates
# Draft.makePoint(float(X),float(Y),float(Z)) # create points (uncomment for use)
print(X," ",Y," ",Z)
wire.append(FreeCAD.Vector(float(X),float(Y),float(Z))) # append the coordinates
except Exception:
None
file.close()
Draft.makeWire(wire,closed=False,face=False,support=None) # create the wire open
#Draft.makeWire(wire,closed=True,face=False,support=None) # create the wire closed (uncomment for use)
#Draft.makeBSpline(wire,closed=False,face=False,support=None)# create the BSpline open (uncomment for use)
#Draft.makeBSpline(wire,closed=True,face=False,support=None)# create the BSpline open (uncomment for use)
App.ActiveDocument.recompute()
0 240.42686 0
20 243.83054 0
40 247.33677 0
60 250.94702 0
80 254.66283 0
100 258.48575 0
...
Modifiez le chemin et nom du fichier, sauvez la macro, rechargez la macro et lancez la.
fichier = "C:\yourPath\cloud.asc" # path and name of file.txt
## path for Windows : C:\yourPath\cloud.asc (create one error in Python (cause, the "\" is a command syntax in Python)
## replace "\" by "/" result : C:/yourPath/cloud.asc
## or replace the "\" by "\\" result : C:\\yourPath\\cloud.asc
Si vous voulez une polyligne fermée, modifiez le code (closed=False) :
Draft.makeWire(wire,closed=False,face=False,support=None) # create the wire open
et remplacez le par (closed=True) :
Draft.makeWire(wire,closed=True,face=False,support=None) # create the wire closed
même procédure pour la face, False ou True (face=True).
La discussion sur le forum How do I transform a point cloud to a line?
00.03 16/10/2020 : conversion pour Python 3, ajout d'info pour le chemin du fichier dans "Windows" remplacer le slatch "\" par "\\" ou "/" voir How do I transform a point cloud to a line?
00.02 02/07/2019 :
00.01 21/02/2015