You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

177 lines
6.5 KiB

import FreeCAD as App
import FreeCADGui as Gui
import Part
import os
import re
import copy
from .program import LaserProgram, ViewProviderLaserProgram
from .pad import LaserPad, ViewProviderLaserPad
from .kuka import Kuka_Prog, Kuka_Pose, get_list_of_poses
class LCCreateProgram():
def Activated(self):
# Here your write what your ScriptCmd does...
App.Console.PrintMessage('Create Lasser Cladding Program')
a=App.ActiveDocument.addObject("App::FeaturePython","LaserProgram")
LaserProgram(a)
ViewProviderLaserProgram(a.ViewObject)
def GetResources(self):
return {'Pixmap' : ":icons/LaserCreateProg.svg", 'MenuText': 'Create Laser Program', 'ToolTip': 'Add a Laser Program to your Document'}
class LCSelectBaseReference():
def Activated(self):
# Here your write what your ScriptCmd does...
App.Console.PrintMessage('Select Base reference!')
if not Gui.Selection.hasSelection():
App.Console.PrintMessage('Select a Vertex')
return
# check length
selection = Gui.Selection.getSelectionEx()
# find first vertex
for s in selection:
if s.HasSubObjects:
for obj in s.SubObjects:
if isinstance(obj, Part.Vertex):
vertex = obj.copy()
laserjob_entry = App.ActiveDocument.getObject('LaserProgram')
if laserjob_entry is None:
App.Console.PrintMessage('Create a LaserJob first')
return
laserjob_entry.base_reference = App.Vector((vertex.X, vertex.Y, vertex.Z))
App.ActiveDocument.recompute()
def GetResources(self):
return {'Pixmap' : ":icons/LaserSelectBaseRef.svg",
'MenuText': 'Select Base reference',
'ToolTip': 'Add a Job to your Document'}
class LCCreatePad():
def _create_laserpad(self, ref_to_face):
laserprogram = App.ActiveDocument.getObject('LaserProgram')
if laserprogram is None:
App.Console.PrintMessage('Create a LaserProgram first')
return
pad_obj = laserprogram.newObject("App::FeaturePython","LaserPad")
LaserPad(pad_obj, ref_to_face)
ViewProviderLaserPad(pad_obj.ViewObject)
return pad_obj
def Activated(self):
# Here your write what your ScriptCmd does...
App.Console.PrintMessage('Select some Face as reference')
if not Gui.Selection.hasSelection():
App.Console.PrintMessage('Select a Face')
return
# check length
ref_face = (Gui.Selection.getSelection()[0],
Gui.Selection.getSelectionEx()[0].SubElementNames[0])
#selection = Gui.Selection.getSelectionEx()
# find first vertex
#for s in selection:
# if s.HasSubObjects:
# for obj in s.SubObjects:
# if isinstance(obj, Part.Face):
# face = obj.copy()
self._create_laserpad(ref_face)
App.ActiveDocument.recompute()
def GetResources(self):
return {'Pixmap' : ":icons/LaserCreatePad.svg", 'MenuText': 'Create Pad', 'ToolTip': 'Create a Pad on selected face'}
class LCRecompute():
def Activated(self):
# Here your write what your ScriptCmd does...
App.Console.PrintMessage('Recomputer Pads')
if not Gui.Selection.hasSelection():
App.Console.PrintMessage('Select a Pad')
return
if Gui.Selection.hasSelection():
laser_path_obj = Gui.Selection.getSelection()[0]
if len(laser_path_obj.Group):
laser_path_obj.removeObjectsFromDocument()
laser_path_obj.Proxy._create_path(laser_path_obj)
App.ActiveDocument.recompute()
def GetResources(self):
return {'Pixmap' : ":icons/LaserRecomputePad.svg",
'MenuText': 'Recompute',
'ToolTip': 'Recompute selected Pads'}
class LCSaveProg():
def Activated(self):
# Here your write what your ScriptCmd does...
App.Console.PrintMessage('Saving to KRL')
c = App.ActiveDocument.getObject("LaserProgram")
pads = c.Group
prog = Kuka_Prog()
prog.set_baseorigin(c.base_reference)
prog.set_tool(c.rob_tool)
prog.set_base(c.rob_base)
prog.set_velocity(c.laser_feedrate, c.laser_speed)
prog.set_laser_power(c.laser_power)
prog.set_laser_out(c.laser_real_out)
prog.set_simulation(c.simulation)
for pad in pads:
# one pad with contours and hatchlines
for progpart in pad.Group:
## jedes Contour oder Hatchline Feature
if re.match('Contour*', progpart.Name):
# do Conoutes
face = pad.ref_body.getSubObject(pad.ref_surface)
edges = Part.__sortEdges__(progpart.Shape.Edges)
vlist = []
for edge in edges:
vlist.extend([v.Point for v in edge.Vertexes])
poly = Part.makePolygon(vlist)
#Part.show(poly, "ContourPath")
poses = get_list_of_poses(face, poly.Edges)
prog.append_contour(poses, progpart.pathtype)
elif re.match('Hatch*', progpart.Name):
face = pad.ref_body.getSubObject(pad.ref_surface)
edges = progpart.Shape.Edges
for edge in edges:
p0 = edge.Vertexes[0].Point
p1 = edge.Vertexes[1].Point
line = []
for p in [p0, p1]:
uv = face.Surface.parameter(p)
normal = face.normalAt(uv[0], uv[1])
pose = Kuka_Pose.from_point_and_normal(p, normal)
line.append(pose)
prog.append_hatchline(line, progpart.pathtype)
prog.save_prog(c.progpath)
App.ActiveDocument.recompute()
def GetResources(self):
return {'Pixmap' : ":icons/LaserSaveProg.svg",
'MenuText': 'Save Program',
'ToolTip': 'Save the Program as KRL'}
Gui.addCommand('LCCreateProgram', LCCreateProgram())
Gui.addCommand('LCSelectBaseReference', LCSelectBaseReference())
Gui.addCommand('LCCreatePad', LCCreatePad())
Gui.addCommand('LCRecompute', LCRecompute())
Gui.addCommand('LCSaveProg', LCSaveProg())