Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #export curve elements to heekscnc
- import math
- from draftlibs import fcvec,fcgeo
- from FreeCAD import Vector,Base
- import FreeCADGui
- from pivy.coin import *
- olEdges = []
- shape1 = Part.Shape
- for s in Gui.Selection.getSelectionEx():
- i = 0; j = 0
- if s.Object.Type == 'Sketcher::SketchObject':
- for e in s.Object.Geometry:
- while i < len(s.Object.Geometry):
- if not s.Object.Geometry[i].Construction:
- olEdges.append(s.Object.Shape.Edges[j])
- j = j+1
- i = i+1
- else:
- for e in s.Object.Shape.Edges:
- olEdges.append(s.Object.Shape.Edges[i])
- i = i+1
- print "comment('Sketch from FreeCAD')"
- print "curve = area.Curve()"
- sorted_edges = []
- sorted_edges = fcgeo.sortEdges(olEdges,olEdges[0].Vertexes[0])
- #print "curve.append(area.Point(" , olEdges[0].Vertexes[-1].X , "," , olEdges[0].Vertexes[-1].Y, "))"
- print "curve.append(area.Point(" , olEdges[0].Vertexes[0].X , "," , olEdges[0].Vertexes[0].Y, "))"
- for s in sorted_edges:
- olEdges.append(s)
- if (isinstance(s.Curve,Part.Circle)):
- mp = fcgeo.findMidpoint(s)
- ce = s.Curve.Center
- tang1 = s.Curve.tangent(s.ParameterRange[0]) ; tang2 = s.Curve.tangent(s.ParameterRange[1])
- cross1 = Vector.cross(Base.Vector(tang1[0][0],tang1[0][1],tang1[0][2]),Base.Vector(tang2[0][0],tang2[0][1],tang2[0][2]))
- if cross1[2] > 0:
- direct = '1 ' #we seem to be working in a rh system in FreeCAD
- else:
- direct = '-1 '
- print "curve.append(area.Vertex(",direct, ", area.Point( ", s.Vertexes[-1].Point[0],", ",s.Vertexes[-1].Point[1], "), area.Point(", s.Curve.Center [0], ", " , s.Curve.Center[1], ")))"
- elif (isinstance(s.Curve,Part.Line)):
- print "curve.append(area.Point( ",s.Vertexes[-1].Point[0],", " ,s.Vertexes[-1].Point[1], "))"
- else:
- pass
- #export curve elements to heekscnc
- #to reverse the curve:
- print "curve.Reverse()"
- class point:
- "this class will print out the coords of a point after the user clicked a point on the screen"
- def __init__(self):
- self.view = FreeCADGui.ActiveDocument.ActiveView
- self.stack = []
- self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.getpoint)
- def getpoint(self,event_cb):
- event = event_cb.getEvent()
- if event.getState() == SoMouseButtonEvent.DOWN:
- pos = event.getPosition()
- point = self.view.getPoint(pos[0],pos[1])
- self.stack.append(point)
- if len(self.stack) == 1:
- #FreeCAD.Console.PrintMessage("a point at" +str(self.stack[0])+"\n")
- FreeCAD.Console.PrintMessage( "kurve_funcs.make_smaller( curve, start = area.Point("+ str(self.stack[0][0])+","+ str(self.stack[0][1]) + "))\n")
- #l = Part.Line(self.stack[0],self.stack[1])
- #shape = l.toShape()
- #Part.show(shape)
- self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.callback)
- point()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement