Advertisement
danfalck

curve_out.py

Nov 13th, 2011
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.11 KB | None | 0 0
  1. #export curve elements to heekscnc
  2. import math
  3. from draftlibs import fcvec,fcgeo
  4. from FreeCAD import Vector,Base
  5. import FreeCADGui
  6. from pivy.coin import *
  7.  
  8. olEdges = []
  9.  
  10. shape1 = Part.Shape
  11. for s in Gui.Selection.getSelectionEx():
  12.     i = 0; j = 0
  13.     if s.Object.Type == 'Sketcher::SketchObject':
  14.         for e in s.Object.Geometry:
  15.             while i < len(s.Object.Geometry):
  16.                 if not s.Object.Geometry[i].Construction:
  17.                     olEdges.append(s.Object.Shape.Edges[j])
  18.                     j = j+1          
  19.                 i = i+1
  20.     else:
  21.         for e in s.Object.Shape.Edges:
  22.                 olEdges.append(s.Object.Shape.Edges[i])
  23.                 i = i+1
  24.  
  25. print "comment('Sketch from FreeCAD')"
  26. print "curve = area.Curve()"
  27.  
  28. sorted_edges = []
  29.  
  30. sorted_edges = fcgeo.sortEdges(olEdges,olEdges[0].Vertexes[0])
  31.  
  32. #print "curve.append(area.Point(" , olEdges[0].Vertexes[-1].X , "," , olEdges[0].Vertexes[-1].Y, "))"
  33. print "curve.append(area.Point(" , olEdges[0].Vertexes[0].X , "," , olEdges[0].Vertexes[0].Y, "))"
  34.  
  35. for s in sorted_edges:
  36.     olEdges.append(s)
  37.     if (isinstance(s.Curve,Part.Circle)):
  38.         mp = fcgeo.findMidpoint(s)
  39.         ce = s.Curve.Center
  40.         tang1 = s.Curve.tangent(s.ParameterRange[0]) ; tang2 = s.Curve.tangent(s.ParameterRange[1])
  41.         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]))
  42.         if cross1[2] > 0:
  43.             direct = '1 ' #we seem to be working in a rh system in FreeCAD
  44.         else:
  45.             direct = '-1 '
  46.         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], ")))"
  47.  
  48.     elif (isinstance(s.Curve,Part.Line)):
  49.         print "curve.append(area.Point( ",s.Vertexes[-1].Point[0],", " ,s.Vertexes[-1].Point[1], "))"
  50.     else:
  51.         pass
  52. #export curve elements to heekscnc
  53. #to reverse the curve:
  54. print "curve.Reverse()"
  55.  
  56. class point:
  57.     "this class will print out the coords of a point after the user clicked a point on the screen"
  58.     def __init__(self):
  59.         self.view = FreeCADGui.ActiveDocument.ActiveView
  60.         self.stack = []
  61.         self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.getpoint)
  62.     def getpoint(self,event_cb):
  63.         event = event_cb.getEvent()
  64.         if event.getState() == SoMouseButtonEvent.DOWN:
  65.             pos = event.getPosition()
  66.             point = self.view.getPoint(pos[0],pos[1])
  67.             self.stack.append(point)
  68.             if len(self.stack) == 1:
  69.                 #FreeCAD.Console.PrintMessage("a point at" +str(self.stack[0])+"\n")
  70.                 FreeCAD.Console.PrintMessage( "kurve_funcs.make_smaller( curve, start = area.Point("+ str(self.stack[0][0])+","+ str(self.stack[0][1]) + "))\n")
  71.                 #l = Part.Line(self.stack[0],self.stack[1])
  72.                 #shape = l.toShape()
  73.                 #Part.show(shape)
  74.                 self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.callback)
  75.  
  76. point()
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement