| Description |
|---|
| Cut a line giving as an argument number cut, create line, bicolor, create point. The new line is created in the real coordinate of object, not in the coordinate of the Body. (Command line, paste this complete macro in the Python console). Macro version: 2.0 Last modified: 2019/06/17 FreeCAD version: All Download: ToolBar Icon Author: mario52 |
| Author |
| mario52 |
| Download |
| ToolBar Icon |
| Links |
| Macros recipes How to install macros How to customize toolbars |
| Macro Version |
| 2.0 |
| Date last modified |
| 2019/06/17 |
| FreeCAD Version(s) |
| All |
| Default shortcut |
| None |
| See also |
| None |
This small macro cut a line and create a points , lines , two colours of line.
cutLine
Can be used from the Freecad macro editor.
you can change the default values in the macro.
With bisColor the lines on the original line is created by a white line red line white line .... the colors are modifiable in the code, line 20 and 23.
Macro_cutLine.FCMacro
#################################################################
# https://forum.freecad.org/viewtopic.php?f=3&t=4217&hilit=discretize
# 08/03/2015 2019/06/17
__title__ = "cutLine"
__author__ = "Mario52"
__version__ = "00.02"
__date__ = "2019/06/17"
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")
FreeCAD.Console.PrintError("Select the complete shape or separate wire(s) line, circle ..."+"\n")
# print( "Error : Give cutLine(numberOfPoints = 2, createPoint = 1, createLine = 0, biColor = 0)")
# Example in command line (paste the macro in FC Python console) and write:
#cutLine(2, createLine = 1, biColor = 1, createPoint = 0)
Can be used from the Freecad macro editor.
If the macro is copied in the Python console, you can you can use it by:
cutLine(4, createLine = 1, biColor = 1, createPoint = 0)
this function use the function discretize the original code