|
Description |
---|
Coupe une ligne en donnant comme argument le nombre de coupures, création de lignes ou non, biscolor, points. |
Auteur |
mario52 |
Liens |
Recettes macros Comment installer une macro Comment ajouter une barre d'outils |
Version |
0.1 |
Date dernière modification |
2015-03-08 |
Cette petite macro coupe une ligne en plusieurs lignes en donnant comme arguments le nombre de coupures, avec création de lignes ou non, colorer les lignes coupées par alternativement rouge puis blanche, création de points à l'endroit de la coupure ou non.
Vous pouvez l'utiliser dans une macro.
Si la macro complète est collée dans l'éditeur Python de FreeCAD utilisez la commande suivante :
cutLine(4, createLine = 1, biColor = 1, createPoint = 0)
Vous pouvez changer la valeur de la couleur des lignes par défaut dans la macro.
Avec l'option bisColor les lignes sont créées de couleurs rouge et blanche, la couleur par défaut est modifiable dans le code aux lignes 19 et 22.
Macro_cutLine.FCMacro
################################################################# # http://forum.freecadweb.org/viewtopic.php?f=3&t=4217&hilit=discretize __title__ = "cutLine" __author__ = "Mario52" __version__ = "00.01" __date__ = "08/03/2015" import Draft, Part def cutLine(numberOfPoints = 2, createPoint = 1, createLine = 0, biColor = 0): # create a points of forme def createLines(numberOfPoints, points, biColor): # create line biscolor = 0 for lin in range(numberOfPoints-1): creaLine = [FreeCAD.Vector(points[lin]),FreeCAD.Vector(points[lin+1])] wire = Draft.makeWire(creaLine,closed=False,face=False,support=None) if biColor != 0: # biColor if biscolor == 0: FreeCADGui.ActiveDocument.getObject(wire.Name).LineColor = (1.0,0.0,0.0) # 255 = 1 (10 = (1/255 * 10 )) biscolor = 1 else: FreeCADGui.ActiveDocument.getObject(wire.Name).LineColor = (1.0,1.0,1.0) # 255 = 1 (10 = (1/255 * 10 )) biscolor = 0 try: points = [] points[:] = [] selectionObjects = FreeCADGui.Selection.getSelectionEx() # getSelectionEx numberOfPoints += 1 for selection in selectionObjects: compteur = pas = 0 for selectedEdge in selection.SubObjects: # FreeCAD.Console.PrintMessage(selectionObjects[0].SubElementNames[compteur] + "\n") print selectionObjects[0].SubElementNames[compteur] # getSelectionEx compteur += 1 points = selectedEdge.discretize(numberOfPoints) if createLine != 0: createLines(numberOfPoints, points, biColor) for p in points: if createPoint != 0: Draft.makePoint( p.x, p.y, p.z) # FreeCAD.Console.PrintMessage(str(compteur)+" X"+ str(p.x)+" Y"+ str(p.y)+ " Z"+ str(p.z) + "\n") print compteur," X", p.x, " Y", p.y, " Z", p.z pas = 1 # if pas == 0: # the not SubObjects selectionObjects = FreeCADGui.Selection.getSelection() # select all elements # FreeCAD.Console.PrintMessage(selectionObjects[0].Name + "\n") print selectionObjects[0].Name # getSelection() compteur = 0 for ii in enumerate(selectionObjects[0].Shape.Edges): compteur += 1 points = ii[1].discretize(numberOfPoints) # discretize the element for p in points: if createPoint != 0: Draft.makePoint( p.x, p.y, p.z) # create points # FreeCAD.Console.PrintMessage(str(compteur)+" X"+ str(p.x)+" Y"+ str(p.y)+ " Z"+ str(p.z) + "\n") print compteur, " X", p.x, " Y", p.y, " Z", p.z # list and display the coordinates if createLine != 0: createLines(numberOfPoints, points, biColor) except: # FreeCAD.Console.PrintError("Error" + "\n" + "Give : cutLine(numberOfPoints = 2, createPoint = 1, createLine = 0, biColor = 0)"+"\n") print "Error : Give cutLine(numberOfPoints = 2, createPoint = 1, createLine = 0, biColor = 0)" #cutLine(2, createLine = 1, biColor = 1, createPoint = 0)
Cette macro utilise la fonction discretize voir le code original