WorkFeature/WorkFeature/Utils/WF_line.py
Rentlau 414bd24e9c Release of 2016-09-10 :
Bug Fix:
Correction of home directory path by default
(for txt file selection widget) on "Save" and "Load Points" functions
 not handled previpusly for Window version.

Modification:
For "Point tab" changes for allowing more complex multi objects
selections, same improvements ongoing for other tabs for next release.

Addition:

into "Circle" TAB :
	Arc=(3 Points):
	Create one Arc depending on 3 points.
		- First select 3 Points
		- Then Click on the button

into "Wire 1/3" TAB :
	Bezier Cubic=(4 Points):
	Create a Wire (Bezier Cubic) from 4 selected points.
		- First 4 Points
		- Then push this button

into "Image" TAB (new tab):
	Copy and Scale Image(s) :
	Scale an image along desired direction(s) (make a copy first of
	 the original Image).
        - First define the direction(s) on the right combo
        (default is XY):
        if X is selected then only X direction will be scaled
        if XY is selected then the scale will be squared in X and
        Y directions together
        - Select one or several Images (in combo view)
        - Select one Line (or 2 Points) (close to the Image) you want to
         define new dimension.
        (better to select a Line strictly in X direction if you want to
         enlarge/squize the Image in X direction)
         - Then give the target dimension of the Line (on the last right
          LineEdit).
2016-09-10 21:17:56 +02:00

142 lines
9.6 KiB
Python

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 21 21:21:12 2016
@author: laurent
"""
import Draft, Part
__title__ = "FCConvertLines"
__author__ = "Mario52"
__url__ = "http://www.freecadweb.org/index-fr.html"
__version__ = "00.01"
__date__ = "19/01/2016"
def dashLine(dash01 = 2.0, space01 = 1.0, dash02 = 1.0, space02 = 1.0, compLine = 0, red = 0, green = 0, blue = 0, typeLine = 1):
# typeLine = 1 "_ _ _ _ _ _ _ _ _ " dash (dash01, space01)
# typeLine = 2 "___ _ ___ _ ___ _ " dash dot (dash01, space01, dash02)
# typeLine = 3 "___ _ _ ___ _ _ ___" dash dot dot (dash01, space01, dash02, space02)
def createLines(numberOfPoints, points):
space = 0
for lin in range(numberOfPoints-1):
if space == 0:
creaLine = [FreeCAD.Vector(points[lin]),FreeCAD.Vector(points[lin+1])]
wire = Draft.makeWire(creaLine,closed=False,face=False,support=None)
space = 1
ligne.append(wire.Shape) # for compount
nom.append(wire.Name) # for compount
else:
space = 0
# si pas possible affiche cette ligne # Cannot compute Inventor representation for the shape of Shape.
def colorize():
FreeCADGui.activeDocument().activeObject().LineColor = (float(red)/255,float(green)/255,float(blue)/255)
FreeCADGui.activeDocument().activeObject().PointColor = (float(red)/255,float(green)/255,float(blue)/255)
FreeCADGui.activeDocument().activeObject().ShapeColor = (float(red)/255,float(green)/255,float(blue)/255)
if dash01 and space01 and dash02 and space02 != 0:
nom = []; nom[:] = []
ligne = []; ligne[:] = []
comp2 = []; comp2[:] = []
points = []; points[:] = []
points2 = []; points2[:] = []
precision = 1000 # permet 3 decimales = 0.001
dash01 = dash01 * precision
space01 = space01 * precision
dash02 = dash02 * precision
space02 = space02 * precision
try:
#######Selectionne un ou des objets vue 3D ou vue combinnee (subObjects complete) getSelection()############################
# compt_Oject = -1 #
# selectionObjects = FreeCADGui.Selection.getSelection() # Select an object or primitive getSelection()
# for selection in enumerate(selectionObjects): #
# compt_Oject += 1 #
# compt_Edges = -1 #
# for selectedEdge in enumerate(selectionObjects[compt_Oject].Shape.Edges): # Search the "Edges" and their lengths
# compt_Edges += 1 #
# longueur = (selectionObjects[compt_Oject].Shape.Edges[compt_Edges].Length) * precision #
# if (dash01 + space01 + dash02 + space02) >= longueur: #
# dash01 = int(longueur / 6) # altenate solution
# space01 = int(longueur / 6) # altenate solution
# dash02 = int(longueur / 6) # altenate solution
# space02 = int(longueur / 6) # altenate solution
# FreeCAD.Console.PrintError("Alernate Dash"+"\n") # altenate solution
# numberOfPoints = longueur #
# points = selectionObjects[compt_Oject].Shape.Edges[compt_Edges].discretize(int(numberOfPoints)) # Dicretize
############################################################################################################################
#####selection 1 objet ou sous objet a la fois dans la vue 3D getSelectionEx()#############################################
selectionObjects = FreeCADGui.Selection.getSelectionEx() # Select an object or sub object getSelectionEx
for selection in selectionObjects: #
for selectedEdge in selection.SubObjects: #
longueur = (selectedEdge.Length) * precision #
if (dash01 + space01 + dash02 + space02) >= longueur: # altenate solution
dash01 = int(longueur / 6) # altenate solution
space01 = int(longueur / 6) # altenate solution
dash02 = int(longueur / 6) # altenate solution
space02 = int(longueur / 6) # altenate solution
FreeCAD.Console.PrintError("Alernate Dash"+"\n") # altenate solution
numberOfPoints = longueur #
points = selectedEdge.Edges[0].discretize(int(numberOfPoints)) # Dicretize
###########################################################################################################################
#######cut line in dashDot coordinates#########################################################################
compt = 0
points2 += [points[0]]
for ii2 in range(len(points)):
try:
compt += int(dash01)
points2 += [points[compt]]
compt += int(space01)
points2 += [points[compt]]
if typeLine > 1: # typeLine = 2 "___ _ ___ _ ___ _ " dash dot
compt += int(dash02)
points2 += [points[compt]]
compt += int(space01)
points2 += [points[compt]]
if typeLine > 2: # typeLine = 3 "___ _ _ ___ _ _ ___" dash dot dot
compt += int(dash02)
points2 += [points[compt]]
compt += int(space01)
points2 += [points[compt]]
except Exception:
points2 += [points[-1]]
points2[-1] = points[-1]
break
createLines(len(points2), points2)
#######cut line in dash coordinates##############################################################################
if compLine == 0:
comp = Part.makeCompound(ligne) # si compount ligne separee
Part.show(comp) # si compount ligne separee
else:
comp2 += ligne
colorize()
ligne[:] = [] # si compount ligne separee
points[:] = []
points2[:] = []
for i in nom:
FreeCAD.ActiveDocument.removeObject(i)
if compLine != 0: # 1 = toutes les selections en un compount
comp = Part.makeCompound(comp2) # si compount ensemble complet
Part.show(comp) # si compount ensemble complet
colorize()
nom[:] = []
ligne[:] = []
comp2[:] = []
points[:] = []
points2[:] = []
except Exception:
FreeCAD.Console.PrintError("can not create"+"\n")
else:
FreeCAD.Console.PrintError("Zero not permitted"+"\n")
#dashLine(dash01 = 1.0, space01 = 0.2, dash02 = 0.2, space02 = 0.2, compLine = 0, red = 0, green = 0, blue = 255, typeLine = 2)