def opExecute(self, obj): '''opExecute(obj) ... process engraving operation''' PathLog.track() output = "" if obj.Comment != "": output += '(' + str(obj.Comment) + ')\n' output += "(" + obj.Label + ")" output += "(Compensated Tool Path. Diameter: " + str( obj.ToolController.Tool.Diameter) + ")" parentJob = PathUtils.findParentJob(obj) if parentJob is None: return print("base object: " + self.baseobject.Name) if obj.Algorithm in ['OCL Dropcutter', 'OCL Waterline']: try: import ocl except: FreeCAD.Console.PrintError( translate( "Path_Surface", "This operation requires OpenCamLib to be installed.") + "\n") return if self.baseobject.TypeId.startswith('Mesh'): mesh = self.baseobject.Mesh else: # try/except is for Path Jobs created before GeometryTolerance try: deflection = parentJob.GeometryTolerance except AttributeError: import PathScripts.PathPreferences as PathPreferences deflection = PathPreferences.defaultGeometryTolerance() self.baseobject.Shape.tessellate(0.5) mesh = MeshPart.meshFromShape(self.baseobject.Shape, Deflection=deflection) bb = mesh.BoundBox s = ocl.STLSurf() for f in mesh.Facets: p = f.Points[0] q = f.Points[1] r = f.Points[2] t = ocl.Triangle(ocl.Point(p[0], p[1], p[2]), ocl.Point(q[0], q[1], q[2]), ocl.Point(r[0], r[1], r[2])) s.addTriangle(t) if obj.Algorithm == 'OCL Dropcutter': output = self._dropcutter(obj, s, bb) elif obj.Algorithm == 'OCL Waterline': output = self._waterline(obj, s, bb) self.commandlist.extend(output)
def get_ocl_stl_surf(self): s = ocl.STLSurf() count = 0 for poly in self.polys: p1 = ocl.Point(*poly.coords[0]) p2 = ocl.Point(*poly.coords[1]) p3 = ocl.Point(*poly.coords[2]) t = ocl.Triangle(p1, p2, p3) s.addTriangle(t) count += 1 print "Surface with {} triangles!!".format(count) return s
def vtkPolyData2OCLSTL(vtkPolyData, oclSTL): """ read vtkPolyData and add each triangle to an ocl.STLSurf """ for cellId in range(0, vtkPolyData.GetNumberOfCells()): cell = vtkPolyData.GetCell(cellId) points = cell.GetPoints() plist = [] for pointId in range(0, points.GetNumberOfPoints()): vertex = points.GetPoint(pointId) p = ocl.Point(vertex[0], vertex[1], vertex[2]) plist.append(p) t = ocl.Triangle(plist[0], plist[1], plist[2]) oclSTL.addTriangle(t)
def get_oclSTL(operation): me = None oclSTL = ocl.STLSurf() for collision_object in operation.objects: activate(collision_object) if collision_object.type == "MESH": global_matrix = mathutils.Matrix.Identity(4) faces = blender_utils.faces_from_mesh(collision_object, global_matrix, operation.use_modifiers) for face in faces: t = ocl.Triangle(ocl.Point(face[0][0]*OCL_SCALE, face[0][1]*OCL_SCALE, (face[0][2]+operation.skin)*OCL_SCALE), ocl.Point(face[1][0]*OCL_SCALE, face[1][1]*OCL_SCALE, (face[1][2]+operation.skin)*OCL_SCALE), ocl.Point(face[2][0]*OCL_SCALE, face[2][1]*OCL_SCALE, (face[2][2]+operation.skin)*OCL_SCALE)) oclSTL.addTriangle(t) # FIXME needs to work with collections return oclSTL
def execute(self, obj): import MeshPart FreeCAD.Console.PrintWarning( translate("PathSurface", "Hold on. This might take a minute.\n")) output = "" toolLoad = PathUtils.getLastToolLoad(obj) if toolLoad is None or toolLoad.ToolNumber == 0: self.vertFeed = 100 self.horizFeed = 100 self.radius = 0.25 obj.ToolNumber = 0 obj.ToolDescription = "UNDEFINED" else: self.vertFeed = toolLoad.VertFeed.Value self.horizFeed = toolLoad.HorizFeed.Value tool = PathUtils.getTool(obj, toolLoad.ToolNumber) self.radius = tool.Diameter/2 obj.ToolNumber = toolLoad.ToolNumber obj.ToolDescription = toolLoad.Name if obj.UserLabel == "": obj.Label = obj.Name + " (" + obj.ToolDescription + ")" else: obj.Label = obj.UserLabel + " (" + obj.ToolDescription + ")" if obj.Base: for b in obj.Base: if obj.Algorithm in ['OCL Dropcutter', 'OCL Waterline']: try: import ocl except: FreeCAD.Console.PrintError(translate( "PathSurface", "This operation requires OpenCamLib to be installed.\n")) return mesh = b[0] if mesh.TypeId.startswith('Mesh'): mesh = mesh.Mesh bb = mesh.BoundBox else: bb = mesh.Shape.BoundBox mesh = MeshPart.meshFromShape(mesh.Shape, MaxLength=2) s = ocl.STLSurf() for f in mesh.Facets: p = f.Points[0] q = f.Points[1] r = f.Points[2] t = ocl.Triangle(ocl.Point(p[0], p[1], p[2]), ocl.Point( q[0], q[1], q[2]), ocl.Point(r[0], r[1], r[2])) s.addTriangle(t) if obj.Algorithm == 'OCL Dropcutter': output = self._dropcutter(obj, s, bb) elif obj.Algorithm == 'OCL Waterline': output = self._waterline(obj, s, bb) path = Path.Path(output) obj.Path = path
myscreen.addActor( camvtk.Sphere(center=(p.x,p.y,p.z+zofz),radius=0.0005, color=camvtk.pink ) ) nloop = nloop+1 if __name__ == "__main__": print ocl.version() myscreen = camvtk.VTKScreen() a = ocl.Point(0,1,0.3) myscreen.addActor(camvtk.Point(center=(a.x,a.y,a.z), color=(1,0,1))) b = ocl.Point(1,0.5,0.3) myscreen.addActor(camvtk.Point(center=(b.x,b.y,b.z), color=(1,0,1))) c = ocl.Point(-0.1,0.3,0.0) myscreen.addActor(camvtk.Point(center=(c.x,c.y,c.z), color=(1,0,1))) myscreen.addActor( camvtk.Line(p1=(a.x,a.y,a.z),p2=(c.x,c.y,c.z)) ) myscreen.addActor( camvtk.Line(p1=(c.x,c.y,c.z),p2=(b.x,b.y,b.z)) ) myscreen.addActor( camvtk.Line(p1=(a.x,a.y,a.z),p2=(b.x,b.y,b.z)) ) t = ocl.Triangle(b,c,a) s = ocl.STLSurf() s.addTriangle(t) # a one-triangle STLSurf zheights=[-0.3, -0.2, -0.1, -0.05, 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.26, 0.27, 0.28, 0.29 ] # the z-coordinates for the waterlines zheights=[-0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, -0.05, 0.0, 0.05, 0.1, 0.15, 0.2, 0.28 ] zheights=[ -0.35, -0.3, -0.25, -0.2, -0.15, -0.1, -0.05, 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.28] zheights=[] Nmax=10 zmin=-0.5 zmax= 0.30 dz = (zmax-zmin)/float(Nmax-1) z = zmin for n in xrange(Nmax): zheights.append(z) z=z+dz
a = ocl.Point(0,1,0.3) #myscreen.addActor(camvtk.Point(center=(a.x,a.y,a.z), color=(1,0,1))) b = ocl.Point(1,0.5,0.3) #myscreen.addActor(camvtk.Point(center=(b.x,b.y,b.z), color=(1,0,1))) c = ocl.Point(0,0,0.1) #myscreen.addActor(camvtk.Point(center=(c.x,c.y,c.z), color=(1,0,1))) #myscreen.addActor( camvtk.Line(p1=(a.x,a.y,a.z),p2=(c.x,c.y,c.z)) ) #myscreen.addActor( camvtk.Line(p1=(c.x,c.y,c.z),p2=(b.x,b.y,b.z)) ) #myscreen.addActor( camvtk.Line(p1=(a.x,a.y,a.z),p2=(b.x,b.y,b.z)) ) # a second triangle offset=ocl.Point(0.51,0.51,0) a2 = a+ offset b2 = b+ offset c2 = c+ offset t2 = ocl.Triangle(b2,c2,a2) t = ocl.Triangle(b,c,a) s = ocl.STLSurf() s.addTriangle(t) # a one-triangle STLSurf s.addTriangle(t2) cutter = ocl.CylCutter(0.3, 5) #cutter = ocl.BallCutter(0.4, 5) #cutter = ocl.BullCutter(0.4, 0.1, 5) print "fiber..." fiber_range=7 Nmax = 200 yvals = [float(n-float(Nmax)/2)/Nmax*float(fiber_range) for n in xrange(0,Nmax+1)] xvals = [float(n-float(Nmax)/2)/Nmax*float(fiber_range) for n in xrange(0,Nmax+1)]
if __name__ == "__main__": p = ocl.Point() p.x = 7 p.y = 8 p.z = -3 print p q = ocl.Point(1, 2, 3) print q r = p + q s = ocl.Point(66, 66, 66) s += r print r print s print "2*s=", (s * 2) print "s.norm=", s.norm() print "normalizing" s.normalize() print "s.norm=", s.norm() print "s dot r", s.dot(r) print "s cross r", s.cross(r) t = ocl.Triangle(p, q, r) print t s = ocl.STLSurf() print s s.addTriangle(t) s.addTriangle(t) print s print "end."
def execute(self, obj): import MeshPart FreeCAD.Console.PrintWarning( translate("PathSurface", "Hold on. This might take a minute.\n")) output = "" if obj.Comment != "": output += '(' + str(obj.Comment)+')\n' toolLoad = PathUtils.getLastToolLoad(obj) if toolLoad is None or toolLoad.ToolNumber == 0: self.vertFeed = 100 self.horizFeed = 100 self.vertRapid = 100 self.horizRapid = 100 self.radius = 0.25 obj.ToolNumber = 0 obj.ToolDescription = "UNDEFINED" else: self.vertFeed = toolLoad.VertFeed.Value self.horizFeed = toolLoad.HorizFeed.Value self.vertRapid = toolLoad.VertRapid.Value self.horizRapid = toolLoad.HorizRapid.Value tool = PathUtils.getTool(obj, toolLoad.ToolNumber) if tool.Diameter == 0: self.radius = 0.25 else: self.radius = tool.Diameter/2 obj.ToolNumber = toolLoad.ToolNumber obj.ToolDescription = toolLoad.Name if obj.UserLabel == "": obj.Label = obj.Name + " :" + obj.ToolDescription else: obj.Label = obj.UserLabel + " :" + obj.ToolDescription output += "(" + obj.Label + ")" output += "(Compensated Tool Path. Diameter: " + str(self.radius * 2) + ")" # if obj.Base: # for b in obj.Base: parentJob = PathUtils.findParentJob(obj) if parentJob is None: return mesh = parentJob.Base if mesh is None: return print "base object: " + mesh.Name if obj.Algorithm in ['OCL Dropcutter', 'OCL Waterline']: try: import ocl except: FreeCAD.Console.PrintError(translate( "PathSurface", "This operation requires OpenCamLib to be installed.\n")) return #mesh = b[0] if mesh.TypeId.startswith('Mesh'): mesh = mesh.Mesh bb = mesh.BoundBox else: bb = mesh.Shape.BoundBox mesh = MeshPart.meshFromShape(mesh.Shape, MaxLength=2) s = ocl.STLSurf() for f in mesh.Facets: p = f.Points[0] q = f.Points[1] r = f.Points[2] t = ocl.Triangle(ocl.Point(p[0], p[1], p[2]), ocl.Point( q[0], q[1], q[2]), ocl.Point(r[0], r[1], r[2])) s.addTriangle(t) if obj.Algorithm == 'OCL Dropcutter': output = self._dropcutter(obj, s, bb) elif obj.Algorithm == 'OCL Waterline': output = self._waterline(obj, s, bb) if obj.Active: path = Path.Path(output) obj.Path = path obj.ViewObject.Visibility = True else: path = Path.Path("(inactive operation)") obj.Path = path obj.ViewObject.Visibility = False
def drawTree2(myscreen,t,color=camvtk.red,opacity=0.2, offset=(0,0,0)): nodes = t.get_nodes() nmax=len(nodes) print("drawTree2: ", nmax," nodes",) # make a list of triangles tlist = [] i=0 ofs =ocl.Point(offset[0],offset[1],offset[2]) for n in nodes: p1 = n.corner(0)+ofs # + + + p2 = n.corner(1)+ofs # - + + p3 = n.corner(2)+ofs # + - + p4 = n.corner(3)+ofs # + + - p5 = n.corner(4)+ofs # + - - p6 = n.corner(5)+ofs # - + - p7 = n.corner(6)+ofs # - - + p8 = n.corner(7)+ofs # - - - tlist.append(ocl.Triangle(p1,p2,p3)) #top tlist.append(ocl.Triangle(p2,p3,p7)) #top tlist.append(ocl.Triangle(p4,p5,p6)) # bot tlist.append(ocl.Triangle(p5,p6,p8)) # bot tlist.append(ocl.Triangle(p1,p3,p4)) # 1,3,4,5 tlist.append(ocl.Triangle(p4,p5,p3)) tlist.append(ocl.Triangle(p2,p6,p7)) # 2,6,7,8 tlist.append(ocl.Triangle(p7,p8,p6)) tlist.append(ocl.Triangle(p3,p5,p7)) # 3,5,7,8 tlist.append(ocl.Triangle(p7,p8,p5)) tlist.append(ocl.Triangle(p1,p2,p4)) # 1,2,4,6 tlist.append(ocl.Triangle(p4,p6,p2)) if (nmax>100): if ( (i % (nmax/10))==0): print(".",) i=i+1 #tlist.append(ocl.Triangle(p1,p2,p4)) #tlist.append(ocl.Triangle(p1,p3,p5)) #tlist.append(ocl.Triangle(p2,p3,p7)) #tlist.append(ocl.Triangle(p2,p7,p8)) #tlist.append(ocl.Triangle(p3,p7,p8)) print(".actor.",) surf = camvtk.STLSurf(triangleList=tlist) surf.SetColor(color) surf.SetOpacity(opacity) print(".add.",) myscreen.addActor(surf) print(".done.")
myscreen.setAmbient(1, 1, 1) #camvtk.drawArrows(myscreen) a = ocl.Point(1, 0, -0.000010) b = ocl.Point(0, 1, +0.0) c = ocl.Point(0.001, 0, +0.3001) #c = ocl.Point(0,0,0.3) myscreen.addActor(camvtk.Point(center=(a.x, a.y, a.z), color=(1, 0, 1))) myscreen.addActor(camvtk.Point(center=(b.x, b.y, b.z), color=(1, 0, 1))) myscreen.addActor(camvtk.Point(center=(c.x, c.y, c.z), color=(1, 0, 1))) myscreen.addActor(camvtk.Line(p1=(a.x, a.y, a.z), p2=(c.x, c.y, c.z))) myscreen.addActor(camvtk.Line(p1=(c.x, c.y, c.z), p2=(b.x, b.y, b.z))) myscreen.addActor(camvtk.Line(p1=(a.x, a.y, a.z), p2=(b.x, b.y, b.z))) t = ocl.Triangle(a, b, c) angle = math.pi / 8 length = 5.0 #c1 = ocl.BullCutter(0.5,0.1, length) #c1 = ocl.CylCutter(0.5, length) #c1 = ocl.BallCutter(0.5, length) c1 = ocl.ConeCutter(0.5, angle, length) cutter = c1 cutter = c1.offsetCutter(0.1) print cutter # grid parameters minx = -0.7
def drawScreen(a,b,c,filename,write_flag): print ocl.revision() myscreen = camvtk.VTKScreen() z_hi = a.z if b.z > z_hi: z_hi = b.z if c.z > z_hi: z_hi = c.z z_lo = a.z if b.z < z_lo: z_lo = b.z if c.z < z_lo: z_lo = c.z #z_hi = 0.3 # this is the shallow case #ztri = 0.8 # this produces the steep case where we hit the circular rim #z_lo = 0.1 #a = ocl.Point(0,1,ztri) #b = ocl.Point(1,0.5,ztri) #c = ocl.Point(0.2,0.2,ztri_lo) myscreen.addActor(camvtk.Point(center=(a.x,a.y,a.z), color=(1,0,1))) myscreen.addActor(camvtk.Point(center=(b.x,b.y,b.z), color=(1,0,1))) myscreen.addActor(camvtk.Point(center=(c.x,c.y,c.z), color=(1,0,1))) myscreen.addActor( camvtk.Line(p1=(a.x,a.y,a.z),p2=(c.x,c.y,c.z)) ) myscreen.addActor( camvtk.Line(p1=(c.x,c.y,c.z),p2=(b.x,b.y,b.z)) ) myscreen.addActor( camvtk.Line(p1=(a.x,a.y,a.z),p2=(b.x,b.y,b.z)) ) t = ocl.Triangle(b,c,a) angle = math.pi/5 diameter=0.3 length=5 #cutter = ocl.BallCutter(diameter, length) #cutter = ocl.CylCutter(diameter, length) #cutter = ocl.BullCutter(diameter, diameter/4, length) cutter = ocl.ConeCutter(diameter, angle, length) #cutter = cutter.offsetCutter( 0.1 ) print "cutter= ", cutter print "length=", cutter.getLength() print "fiber..." range=2 Nmax = 100 yvals = [float(n-float(Nmax)/2)/Nmax*range for n in xrange(0,Nmax+1)] xvals = [float(n-float(Nmax)/2)/Nmax*range for n in xrange(0,Nmax+1)] zmin = z_lo - 0.3 zmax = z_hi zNmax = 20 dz = (zmax-zmin)/(zNmax-1) zvals=[] for n in xrange(0,zNmax): zvals.append(zmin+n*dz) for zh in zvals: yfiber(cutter,yvals,t,zh,myscreen) xfiber(cutter,xvals,t,zh,myscreen) print "done." myscreen.camera.SetPosition(-2, -1, 3) myscreen.camera.SetFocalPoint(1.0, 0.0, -0.5) camvtk.drawArrows(myscreen,center=(-0.5,-0.5,-0.5)) camvtk.drawOCLtext(myscreen) myscreen.render() w2if = vtk.vtkWindowToImageFilter() w2if.SetInput(myscreen.renWin) lwr = vtk.vtkPNGWriter() lwr.SetInput( w2if.GetOutput() ) w2if.Modified() lwr.SetFileName(filename) if write_flag: lwr.Write() print "wrote ",filename
def opExecute(self, obj): '''opExecute(obj) ... process surface operation''' PathLog.track() # OCL must be installed try: import ocl except: FreeCAD.Console.PrintError( translate( "Path_Surface", "This operation requires OpenCamLib to be installed.") + "\n") return print("StepOver is " + str(obj.StepOver)) if obj.StepOver > 100: obj.StepOver = 100 if obj.StepOver < 1: obj.StepOver = 1 output = "" if obj.Comment != "": output += '(' + str(obj.Comment) + ')\n' output += "(" + obj.Label + ")" output += "(Compensated Tool Path. Diameter: " + str( obj.ToolController.Tool.Diameter) + ")" parentJob = PathUtils.findParentJob(obj) if parentJob is None: return for base in self.model: print("base object: " + base.Name) if base.TypeId.startswith('Mesh'): mesh = base.Mesh else: # try/except is for Path Jobs created before GeometryTolerance try: deflection = parentJob.GeometryTolerance except AttributeError: import PathScripts.PathPreferences as PathPreferences deflection = PathPreferences.defaultGeometryTolerance() base.Shape.tessellate(0.5) mesh = MeshPart.meshFromShape(base.Shape, Deflection=deflection) if obj.BoundBox == "BaseBoundBox": bb = mesh.BoundBox else: bb = parentJob.Stock.Shape.BoundBox s = ocl.STLSurf() for f in mesh.Facets: p = f.Points[0] q = f.Points[1] r = f.Points[2] # offset the triangle in Z with DepthOffset t = ocl.Triangle( ocl.Point(p[0], p[1], p[2] + obj.DepthOffset.Value), ocl.Point(q[0], q[1], q[2] + obj.DepthOffset.Value), ocl.Point(r[0], r[1], r[2] + obj.DepthOffset.Value)) s.addTriangle(t) if obj.Algorithm == 'OCL Dropcutter': output = self._dropcutter(obj, s, bb) elif obj.Algorithm == 'OCL Waterline': output = self._waterline(obj, s, bb) self.commandlist.extend(output)
def drawScreen(a, b, c, filename, write_flag): print(ocl.version()) myscreen = camvtk.VTKScreen() #a = ocl.Point(0,1,0.3) myscreen.addActor(camvtk.Point(center=(a.x, a.y, a.z), color=(1, 0, 1))) #b = ocl.Point(1,0.5,0.3) myscreen.addActor(camvtk.Point(center=(b.x, b.y, b.z), color=(1, 0, 1))) #c = ocl.Point(-0.1,0.3,0.0) myscreen.addActor(camvtk.Point(center=(c.x, c.y, c.z), color=(1, 0, 1))) myscreen.addActor(camvtk.Line(p1=(a.x, a.y, a.z), p2=(c.x, c.y, c.z))) myscreen.addActor(camvtk.Line(p1=(c.x, c.y, c.z), p2=(b.x, b.y, b.z))) myscreen.addActor(camvtk.Line(p1=(a.x, a.y, a.z), p2=(b.x, b.y, b.z))) t = ocl.Triangle(b, c, a) s = ocl.STLSurf() s.addTriangle(t) # a one-triangle STLSurf zheights = [ -0.3, -0.2, -0.1, -0.05, 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.26, 0.27, 0.28, 0.29 ] # the z-coordinates for the waterlines zheights = [ -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, -0.05, 0.0, 0.05, 0.1, 0.15, 0.2, 0.28 ] zheights = [ -0.35, -0.3, -0.25, -0.2, -0.15, -0.1, -0.05, 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.28 ] zheights = [] Nmax = 20 zmin = -0.5 zmax = -0.05 dz = (zmax - zmin) / float(Nmax - 1) z = zmin for n in range(Nmax): zheights.append(z) z = z + dz zheights = [] zheights.append(-0.25) #zheights=[ -0.35, -0.25, -0.15, -0.05, 0.05, 0.15, 0.25] #zheights=[ 0.1] length = 10 diam = 0.6 cutter1 = ocl.CylCutter(diam, length) cutter2 = ocl.BallCutter(diam, length) cutter3 = ocl.BullCutter(diam, diam / 5, length) cutter4 = ocl.ConeCutter(diam, math.pi / 5, length) for zh in zheights: #loops = calcWaterline(zh, cutter1, s) #drawLoops(myscreen, loops[0], camvtk.yellow) #loops = calcWaterline(zh, cutter2, s) #drawLoops(myscreen, loops[0], camvtk.green) #loops = calcWaterline(zh, cutter3, s) #drawLoops(myscreen, loops[0], camvtk.yellow) loops = calcWaterline(zh, cutter4, s) drawLoops(myscreen, loops[0], camvtk.pink) #for f in loops[1]: # drawFiber(myscreen, f, camvtk.red) #for f in loops[2]: # drawFiber(myscreen, f, camvtk.lblue) print("done.") myscreen.camera.SetPosition(1, -1, 3) myscreen.camera.SetFocalPoint(0.5, 0.5, 0) camvtk.drawArrows(myscreen, center=(-0.5, -0.5, -0.5)) camvtk.drawOCLtext(myscreen) myscreen.render() """ w2if = vtk.vtkWindowToImageFilter() w2if.SetInput(myscreen.renWin) lwr = vtk.vtkPNGWriter() lwr.SetInput( w2if.GetOutput() ) w2if.Modified() lwr.SetFileName(filename) if write_flag: lwr.Write() print("wrote ",filename) """ time.sleep(1)
def octree2trilist(t): """ return a list of triangles corresponding to the input octree """ nodes = t.get_nodes() tlist = [] for n in nodes: p1 = n.corner(0) # + + + p2 = n.corner(1) # - + + p3 = n.corner(2) # + - + p4 = n.corner(3) # + + - p5 = n.corner(4) # + - - p6 = n.corner(5) # - + - p7 = n.corner(6) # - - + p8 = n.corner(7) # - - - tlist.append(ocl.Triangle(p1, p2, p3)) #top tlist.append(ocl.Triangle(p2, p3, p7)) #top tlist.append(ocl.Triangle(p4, p5, p6)) # bot tlist.append(ocl.Triangle(p5, p6, p8)) # bot tlist.append(ocl.Triangle(p1, p3, p4)) # 1,3,4,5 tlist.append(ocl.Triangle(p4, p5, p3)) tlist.append(ocl.Triangle(p2, p6, p7)) # 2,6,7,8 tlist.append(ocl.Triangle(p7, p8, p6)) tlist.append(ocl.Triangle(p3, p5, p7)) # 3,5,7,8 tlist.append(ocl.Triangle(p7, p8, p5)) tlist.append(ocl.Triangle(p1, p2, p4)) # 1,2,4,6 tlist.append(ocl.Triangle(p4, p6, p2)) return tlist
import ocl trilist = [] trilist.append( ocl.Triangle(ocl.Point(2.91337, 1, 3.93857), ocl.Point(2.89783, -7.09741e-016, 4.07462), ocl.Point(4, -9.79685e-016, 3))) trilist.append( ocl.Triangle(ocl.Point(2.91337, 1, 3.93857), ocl.Point(4, 0.673874, 2.92334), ocl.Point(4, 1, 2.82843))) trilist.append( ocl.Triangle(ocl.Point(2.91337, 1, 3.93857), ocl.Point(4, 0.339111, 2.98077), ocl.Point(4, 0.673874, 2.92334))) trilist.append( ocl.Triangle(ocl.Point(2.91337, 1, 3.93857), ocl.Point(4, -9.79685e-016, 3), ocl.Point(4, 0.339111, 2.98077))) trilist.append( ocl.Triangle(ocl.Point(1.53379, 1, 4.65268), ocl.Point(1.521, -3.72525e-016, 4.76304), ocl.Point(2.89783, -7.09741e-016, 4.07462))) trilist.append( ocl.Triangle(ocl.Point(1.53379, 1, 4.65268), ocl.Point(2.89783, -7.09741e-016, 4.07462), ocl.Point(2.91337, 1, 3.93857))) trilist.append( ocl.Triangle(ocl.Point(0, 0.669179, 4.95502), ocl.Point(1.53379, 1, 4.65268), ocl.Point(-1.19986e-015, 1, 4.89898))) trilist.append(
def execute(self, obj): import MeshPart FreeCAD.Console.PrintWarning( translate("Path_Surface", "Hold on. This might take a minute.\n")) output = "" if obj.Comment != "": output += '(' + str(obj.Comment) + ')\n' toolLoad = obj.ToolController if toolLoad is None or toolLoad.ToolNumber == 0: FreeCAD.Console.PrintError( "No Tool Controller is selected. We need a tool to build a Path." ) else: self.vertFeed = toolLoad.VertFeed.Value self.horizFeed = toolLoad.HorizFeed.Value self.vertRapid = toolLoad.VertRapid.Value self.horizRapid = toolLoad.HorizRapid.Value tool = toolLoad.Proxy.getTool(toolLoad) if not tool or tool.Diameter == 0: FreeCAD.Console.PrintError( "No Tool found or diameter is zero. We need a tool to build a Path." ) return else: self.radius = tool.Diameter / 2 output += "(" + obj.Label + ")" output += "(Compensated Tool Path. Diameter: " + str( self.radius * 2) + ")" # if obj.Base: # for b in obj.Base: parentJob = PathUtils.findParentJob(obj) if parentJob is None: return mesh = parentJob.Base if mesh is None: return print("base object: " + mesh.Name) if obj.Algorithm in ['OCL Dropcutter', 'OCL Waterline']: try: import ocl except: FreeCAD.Console.PrintError( translate( "Path_Surface", "This operation requires OpenCamLib to be installed.\n" )) return if mesh.TypeId.startswith('Mesh'): mesh = mesh.Mesh else: # try/except is for Path Jobs created before GeometryTolerance try: deflection = parentJob.GeometryTolerance except AttributeError: from PathScripts.PathPreferences import PathPreferences deflection = PathPreferences.defaultGeometryTolerance() mesh = MeshPart.meshFromShape(mesh.Shape, Deflection=deflection) bb = mesh.BoundBox s = ocl.STLSurf() for f in mesh.Facets: p = f.Points[0] q = f.Points[1] r = f.Points[2] t = ocl.Triangle(ocl.Point(p[0], p[1], p[2]), ocl.Point(q[0], q[1], q[2]), ocl.Point(r[0], r[1], r[2])) s.addTriangle(t) if obj.Algorithm == 'OCL Dropcutter': output = self._dropcutter(obj, s, bb) elif obj.Algorithm == 'OCL Waterline': output = self._waterline(obj, s, bb) if obj.Active: path = Path.Path(output) obj.Path = path obj.ViewObject.Visibility = True else: path = Path.Path("(inactive operation)") obj.Path = path obj.ViewObject.Visibility = False