diff --git a/freecad/LaserCladdingWorkbench/commands.py b/freecad/LaserCladdingWorkbench/commands.py index 56fe2c7..8dcf895 100644 --- a/freecad/LaserCladdingWorkbench/commands.py +++ b/freecad/LaserCladdingWorkbench/commands.py @@ -131,6 +131,7 @@ class LCSaveProg(): for pad in pads: # one pad with contours and hatchlines + prog.create_layer() for progpart in pad.Group: ## jedes Contour oder Hatchline Feature if re.match('Contour*', progpart.Name): @@ -162,7 +163,13 @@ class LCSaveProg(): line.append(pose) prog.append_hatchline(line, progpart.pathtype) - prog.save_prog(c.article, c.progpath) + #prog.save_prog(c.article, c.progpath) + if c.templatename is None: + templatename = "lasercladding" + else: + templatename = c.templatename + + prog.save_with_template(c.article, c.progpath, templatename) App.ActiveDocument.recompute() diff --git a/freecad/LaserCladdingWorkbench/kuka.py b/freecad/LaserCladdingWorkbench/kuka.py index 42c53a1..2026183 100644 --- a/freecad/LaserCladdingWorkbench/kuka.py +++ b/freecad/LaserCladdingWorkbench/kuka.py @@ -4,22 +4,10 @@ import time import Part import copy import os +import os.path +from jinja2 import Environment, FileSystemLoader +import io -TeachPointFold = """ -;FOLD LIN P4 Vel= 0.2 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 5.4.27,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P4, 3:, 5:0.2, 7:CPDAT1 -$BWDSTART = FALSE -LDAT_ACT=LCPDAT1 -FDAT_ACT=FP4 -BAS(#CP_PARAMS,0.2) -LIN XP4 -;ENDFOLD -""" - -TeachPointDat = """ -DECL E6POS XP4={X -25.1844196,Y 1122.42603,Z 1158.07996,A -14.3267002,B 0.537901878,C 179.028305,S 6,T 59,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} -DECL FDAT FP4={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} -DECL LDAT LCPDAT1={VEL 2.0,ACC 100.0,APO_DIST 100.0,APO_FAC 50.0,ORI_TYP #VAR} -""" header_src = """&ACCESS RVP &REL 1 @@ -27,22 +15,20 @@ header_src = """&ACCESS RVP &PARAM EDITMASK = * """ -ptp_fold = """;FOLD PTP xp1 Vel=100 % PDAT1 Tool[6]:laser6 Base[2]:Laser;%{PE}%R 8.2.24,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:xp1, 3:, 5:100, 7:PDAT1 -$BWDSTART=FALSE -PDAT_ACT=PPDAT1 -FDAT_ACT=Fxp1 -BAS(#PTP_PARAMS,100) -PTP Xxp1 -;ENDFOLD""" - z_up_pose = """{X 0.0, Y 0.0, Z 50.0, A 0.0, B 0.0, C 0.0, E1 0.0, E2 0.0}""" - +class Kuka_Layer: + def __init__(self): + self.contours = [] + self.hatchlines = [] class Kuka_Prog: def __init__(self): - self.contour_path_list = [] - self.hatchlines_list = [] + # each layer is a tuple of Contours[] and Hatchlines[] + self.layers = [] + self.current_layer = -1 + # self.contour_path_list = [] + # self.hatchlines_list = [] self.baseorigin = (0, 0, 0) self.tool = 6 self.base = 6 @@ -85,16 +71,23 @@ class Kuka_Prog: else: self.use_laser_out = self.laser_pilot_out + def create_layer(self): + self.layers.append(Kuka_Layer()) + self.current_layer += 1 + return self.current_layer + def append_contour(self, poses, segmenttype='LIN'): - self.contour_path_list.append((poses, segmenttype)) + layer = self.layers[self.current_layer] + layer.contours.append((poses, segmenttype)) def append_hatchline(self, line, segmenttype='LIN'): - if not len(self.hatchlines_list): - self.hatchlines_list.append((line, segmenttype)) + layer = self.layers[self.current_layer] + if not len(layer.hatchlines): + layer.hatchlines.append((line, segmenttype)) # poses are sorted # but maybe we need to reverse # get the point distance from first and last pose - last, _ = self.hatchlines_list[-1] + last, _ = layer.hatchlines[-1] nfirst = line[0] nlast = line[-1] last = FreeCAD.Base.Vector(last[1].X, last[1].Y, last[1].Z) @@ -104,25 +97,7 @@ class Kuka_Prog: dnf = last.distanceToPoint(nfirst) if dnl < dnf: line.reverse() - self.hatchlines_list.append((line, segmenttype)) - - def append_poses(self, poses): - if not len(self.pose_list): - self.pose_list.extend(poses) - # poses are sorted - # but maybe we need to reverse - # get the point distance from first and last pose - last = self.pose_list[-1] - nfirst = poses[0] - nlast = poses[-1] - last = FreeCAD.Base.Vector(last.X, last.Y, last.Z) - nlast = FreeCAD.Base.Vector(nlast.X, nlast.Y, nlast.Z) - nfirst = FreeCAD.Base.Vector(nfirst.X, nfirst.Y, nfirst.Z) - dnl = last.distanceToPoint(nlast) - dnf = last.distanceToPoint(nfirst) - if dnl < dnf: - poses.reverse() - self.pose_list.extend(poses) + layer.hatchlines.append((line, segmenttype)) def draw_wire(self, obj): path = Part.makePolygon([FreeCAD.Base.Vector(p.X, p.Y, p.Z) for p in self.pose_list ]) @@ -134,6 +109,98 @@ class Kuka_Prog: def get_vectors(self): return [FreeCAD.Base.Vector(p.X, p.Y, p.Z) for p in poses for poses in self.contour_path_list ] + def save_with_template(self, article, path, templatename): + if self.simulation: + filename_src = "kvt_{}_sim.src".format(article) + filename_dat = "kvt_{}_sim.dat".format(article) + else: + filename_src = "kvt_{}.src".format(article) + filename_dat = "kvt_{}.dat".format(article) + + user_dir = FreeCAD.getUserAppDataDir() + template_dir = os.path.join(user_dir, "Mod", "fc_lasercladding_wb", "freecad", "LaserCladdingWorkbench", "templates") + environment = Environment(loader=FileSystemLoader(template_dir)) + template_src = environment.get_template(templatename+".src") + + with io.StringIO("") as f: + for layer_idx, layer in enumerate(self.layers): + f.write(";- =============================\n") + f.write(";- Layer {}\n".format(layer_idx)) + f.write(";- Contourpaths\n") + for contour_idx, (poses, seg_type) in enumerate(layer.contours): + f.write(";- Contourpath {}\n".format(contour_idx)) + # start laser code + f.write(";- Move to pose up from contour start\n") + f.write("$VEL.CP = TRAVELSPEED ; m/s (vmax)\n") + f.write("LIN_REL {Z 90.0} C_VEL; relative 90mm up\n") + f.write("LIN refpose:{}:{} C_VEL; move to start point but save z distance\n".format(poses[0].translate_with(self.baseorigin).to_string(), z_up_pose)) + if seg_type == 'LIN': + f.write("LIN refpose:{} C_VEL; GENERATED\n".format(poses[0].translate_with(self.baseorigin).to_string())) + f.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=TRUE ; Turn on Laser at point\n" % self.use_laser_out) + f.write("$VEL.CP = WELDSPEED ; m/s ; m/s (vproc)\n") + for pose in poses[1:]: + f.write("LIN refpose:{} C_VEL; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string())) + + if seg_type == 'SPLINE': + f.write("SPLINE\n") + for pose in poses: + f.write(" SPL refpose:{} ; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string())) + f.write("ENDSPLINE\n") + + f.write(";- Turn off Laser\n") + f.write("$OUT[%d] = FALSE\n" % self.use_laser_out) + # end of subroutine + + f.write(";- =============================\n") + f.write(";- Hatchlines\n") + f.write("$VEL.CP = TRAVELSPEED ; m/s ; m/s \n") + f.write("LIN_REL {Z 90.0} C_VEL; just move up \n") + (line, seg_type) = layer.hatchlines[0] + f.write("LIN refpose:{}:{} C_VEL; move to first hatch point but with z_up\n".format(line[0].translate_with(self.baseorigin).to_string(), z_up_pose)) + for (line, seg_type) in layer.hatchlines: + # start laser code + f.write(";- Hatchline\n") + if seg_type == 'LIN': + f.write("$VEL.CP = TRAVELSPEED ;m/s \n") + f.write("LIN refpose:{} C_VEL; GENERATED\n".format(line[0].translate_with(self.baseorigin).to_string())) + f.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=TRUE; Turn on Laser at point \n" % self.use_laser_out) + f.write("$VEL.CP = WELDSPEED ; m/s \n") + f.write("LIN refpose:{} C_VEL; GENERATED\n".format(line[1].translate_with(self.baseorigin).to_string())) + f.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=FALSE; Turn off Laser at point\n" % self.use_laser_out) + f.write(";- ========= END LAYER =========\n") + f.write(";- =============================\n") + # end of subroutine + + content = template_src.render( + artikel=article, + tool=self.tool, + base=self.base, + powder_out=self.powder_out, + inert_gas_out=self.inert_gas_out, + laser_out=self.use_laser_out, + laserpower=self.laser_power, + vproc=self.vproc, + vmax=self.vmax, + paths=f.getvalue() + ) + + # dat template + template_dat = environment.get_template(templatename+".dat") + datcontent = template_dat.render( + artikel=article + ) + + ### Save the rendere template to output file + with open(filename_src, mode="w", encoding="utf-8") as message: + message.write(content) + print(f"... wrote {filename_src}") + + with open(filename_dat, mode="w", encoding="utf-8") as message: + message.write(datcontent) + print(f"... wrote {filename_dat}") + + + def save_prog(self, article, path): if self.simulation: filename = "kvt_{}_sim.src".format(article) @@ -148,6 +215,9 @@ class Kuka_Prog: srcfile.write(";- " + time.asctime() + "\n\n") # defining world and base srcfile.write("E6POS startp\n") + srcfile.write("REAL WELDSPEED\n") + srcfile.write("REAL TRAVELSPEED\n") + srcfile.write("REAL LASERPOWER\n") srcfile.write("E6POS point1\n") # srcfile.write("DECL E6AXIS xp1={A1 -1.9, A2 -105.76, A3 79.97, A4 178.83, A5 -20.3, A6 -4.37, E1 -90, E2 0}\n") srcfile.write(";------------- definitions ------------\n") @@ -157,18 +227,27 @@ class Kuka_Prog: srcfile.write("BAS (#BASE,%d) ;Initialicing the defaults for Vel and so on \n\n" % self.base) srcfile.write("PTP {A1 -33.31, A2 -104.71, A3 114.60, A4 282.66, A5 -39.21, A6 -104.87, E1 -90, E2 1.0}\n") srcfile.write("\n;------------- main part ------------\n") - srcfile.write("startp=$POS_ACT\n") #V = w.Velocity / 1000.0 # from mm/s to m/s CDIS = 2.3 CVEL = 95.0 + srcfile.write(";- Process Parameters (change here)\n") + srcfile.write("TRAVELSPEED = %f ; m/s\n" % self.vmax) + srcfile.write("WELDSPEED = %f ; m/s\n" % self.vproc) + srcfile.write("LASERPOWER = %f ; Set laser power\n" % self.laser_power) - srcfile.write(";- Movement paramters\n") - srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) + #srcfile.write("; hier teach punkt eingeben\n;FOLD PTP P1 Vel=25 % PDAT1 Tool[2]:LASER Base[2]:Laser;%{PE}%R 8.2.24,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:, 5:25, 7:PDAT1\n$BWDSTART=FALSE\nPDAT_ACT=PPDAT1\nFDAT_ACT=FP1\nBAS(#PTP_PARAMS,25)\nPTP XP1\n;ENDFOLD\n") + + + + srcfile.write("startp=$POS_ACT\n") + srcfile.write(";- Ab hier nicht mehr aendern!\n") + srcfile.write(";- Movement parameters\n") + srcfile.write("$VEL.CP = TRAVELSPEED\n") srcfile.write("$APO.CDIS = %f ; mm \n" % CDIS) srcfile.write("$APO.CVEL = %f ; percent \n" % CVEL) srcfile.write(";- Input/Output settings\n") - srcfile.write("$ANOUT[1] = %f ; Set laser power\n" % self.laser_power) + srcfile.write("$ANOUT[1] = LASERPOWER ; Set laser power\n") srcfile.write("$OUT[%d] = FALSE ; Set Laser off\n" % self.use_laser_out) # don't know but must be on if not self.simulation: srcfile.write("$OUT[2] = TRUE ; Set Laser activation on\n") # don't know but must be on @@ -184,45 +263,52 @@ class Kuka_Prog: srcfile.write("point1.T = startp.T\n") srcfile.write("LIN point1 C_VEL; GENERATED\n") srcfile.write("WAIT SEC 7.0\n") - srcfile.write(";- Contourpaths\n") - for (poses, seg_type) in self.contour_path_list: - # start laser code - srcfile.write(";- Move to pose up from contour start\n") - srcfile.write("$VEL.CP = %f ; m/s ; m/s (vmax)\n" % self.vmax) - srcfile.write("LIN_REL {Z 90.0} C_VEL; relative 90mm up\n") - srcfile.write("LIN {}:{} C_VEL; move to start point but save z distance\n".format(poses[0].translate_with(self.baseorigin).to_string(), z_up_pose)) - if seg_type == 'LIN': - srcfile.write("LIN {} C_VEL; GENERATED\n".format(poses[0].translate_with(self.baseorigin).to_string())) - srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=True ; Turn on Laser at point\n" % self.use_laser_out) - srcfile.write("$VEL.CP = %f ; m/s ; m/s (vproc)\n" % self.vproc) - for pose in poses[1:]: - srcfile.write("LIN {} C_VEL; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string())) - - if seg_type == 'SPLINE': - srcfile.write("SPLINE\n") - for pose in poses: - srcfile.write(" SPL {} ; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string())) - srcfile.write("ENDSPLINE\n") - - srcfile.write(";- Turn off Laser\n") - srcfile.write("$OUT[%d] = FALSE\n" % self.use_laser_out) - # end of subroutine - - srcfile.write(";- Hatchlines\n") - srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) - srcfile.write("LIN_REL {Z 90.0} C_VEL; just move up \n") - (line, seg_type) = self.hatchlines_list[0] - srcfile.write("LIN {}:{} C_VEL; move to first hatch point but with z_up\n".format(line[0].translate_with(self.baseorigin).to_string(), z_up_pose)) - for (line, seg_type) in self.hatchlines_list: - # start laser code - srcfile.write(";- Hatchline\n") - if seg_type == 'LIN': - srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) - srcfile.write("LIN {} C_VEL; GENERATED\n".format(line[0].translate_with(self.baseorigin).to_string())) - srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=True; Turn on Laser at point \n" % self.use_laser_out) - srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vproc) - srcfile.write("LIN {} C_VEL; GENERATED\n".format(line[1].translate_with(self.baseorigin).to_string())) - srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=FALSE; Turn off Laser at point\n" % self.use_laser_out) + for layer_idx, layer in enumerate(self.layers): + srcfile.write(";- =============================\n") + srcfile.write(";- Layer {}\n".format(layer_idx)) + srcfile.write(";- Contourpaths\n") + for contour_idx, (poses, seg_type) in enumerate(layer.contours): + srcfile.write(";- Contourpath {}\n".format(contour_idx)) + # start laser code + srcfile.write(";- Move to pose up from contour start\n") + srcfile.write("$VEL.CP = %f ; m/s ; m/s (vmax)\n" % self.vmax) + srcfile.write("LIN_REL {Z 90.0} C_VEL; relative 90mm up\n") + srcfile.write("LIN {}:{} C_VEL; move to start point but save z distance\n".format(poses[0].translate_with(self.baseorigin).to_string(), z_up_pose)) + if seg_type == 'LIN': + srcfile.write("LIN {} C_VEL; GENERATED\n".format(poses[0].translate_with(self.baseorigin).to_string())) + srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=True ; Turn on Laser at point\n" % self.use_laser_out) + srcfile.write("$VEL.CP = %f ; m/s ; m/s (vproc)\n" % self.vproc) + for pose in poses[1:]: + srcfile.write("LIN {} C_VEL; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string())) + + if seg_type == 'SPLINE': + srcfile.write("SPLINE\n") + for pose in poses: + srcfile.write(" SPL {} ; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string())) + srcfile.write("ENDSPLINE\n") + + srcfile.write(";- Turn off Laser\n") + srcfile.write("$OUT[%d] = FALSE\n" % self.use_laser_out) + # end of subroutine + + srcfile.write(";- =============================\n") + srcfile.write(";- Hatchlines\n") + srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) + srcfile.write("LIN_REL {Z 90.0} C_VEL; just move up \n") + (line, seg_type) = layer.hatchlines[0] + srcfile.write("LIN {}:{} C_VEL; move to first hatch point but with z_up\n".format(line[0].translate_with(self.baseorigin).to_string(), z_up_pose)) + for (line, seg_type) in layer.hatchlines: + # start laser code + srcfile.write(";- Hatchline\n") + if seg_type == 'LIN': + srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) + srcfile.write("LIN {} C_VEL; GENERATED\n".format(line[0].translate_with(self.baseorigin).to_string())) + srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=True; Turn on Laser at point \n" % self.use_laser_out) + srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vproc) + srcfile.write("LIN {} C_VEL; GENERATED\n".format(line[1].translate_with(self.baseorigin).to_string())) + srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=FALSE; Turn off Laser at point\n" % self.use_laser_out) + srcfile.write(";- ========= END LAYER =========\n") + srcfile.write(";- =============================\n") # end of subroutine srcfile.write("$OUT[%d] = FALSE; laser off\n" % self.use_laser_out) srcfile.write("$OUT[%d] = FALSE; powder off\n" % self.powder_out) diff --git a/freecad/LaserCladdingWorkbench/program.py b/freecad/LaserCladdingWorkbench/program.py index 4839b63..03e230a 100644 --- a/freecad/LaserCladdingWorkbench/program.py +++ b/freecad/LaserCladdingWorkbench/program.py @@ -23,10 +23,10 @@ class LaserProgram: obj.laser_real_out = 3 obj.addProperty("App::PropertyInteger", "laser_gas_out", "Laser Parameter", "Laser inert gas") - obj.laser_gas_out = 7 + obj.laser_gas_out = 9 obj.addProperty("App::PropertyInteger", "laser_powder_out", "Laser Parameter", "Laser Powder Bucket") - obj.laser_powder_out = 9 + obj.laser_powder_out = 7 obj.addProperty("App::PropertyFloat", "laser_feedrate", "Laser Parameter", "Process Velocity (Feedrate m/s)") obj.laser_feedrate = 0.022500 @@ -49,6 +49,9 @@ class LaserProgram: obj.addProperty("App::PropertyString", "article", "Export Parameters", "Article Number") obj.article = "0000000" + obj.addProperty("App::PropertyString", "templatename", "Export Parameters", "Template Filename") + obj.templatename = "lasercladding" + obj.addExtension("App::GroupExtensionPython") obj.Proxy = self diff --git a/freecad/LaserCladdingWorkbench/templates/lasercladding.dat b/freecad/LaserCladdingWorkbench/templates/lasercladding.dat new file mode 100644 index 0000000..4e29181 --- /dev/null +++ b/freecad/LaserCladdingWorkbench/templates/lasercladding.dat @@ -0,0 +1,19 @@ +&ACCESS RVO +&REL 47 +&PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabe +&PARAM EDITMASK = * +DEFDAT kvt_{{artikel}} PUBLIC +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +DECL BASIS_SUGG_T LAST_BASIS={POINT1[] "P1 ",POINT2[] "P1 ",CP_PARAMS[] "CPDAT0 ",PTP_PARAMS[] "PDAT1 ",CONT[] " ",CP_VEL[] "2.0 ",PTP_VEL[] "100 ",SYNC_PARAMS[] "SYNCDAT ",SPL_NAME[] "S0 "} +DECL E6POS XP1={X 1007.93701,Y 220.6707,Z 616.796082,A -59.0254211,B -89.0309219,C -120.955002,S 6,T 27,E1 4.45351398E-05,E2 12600.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL FDAT FP1={TOOL_NO 6,BASE_NO 6,IPO_FRAME #BASE,POINT2[] " ",TQ_STATE FALSE} +DECL PDAT PPDAT1={VEL 100.0,ACC 100.0,APO_DIST 100.0,GEAR_JERK 50.0} +ENDDAT diff --git a/freecad/LaserCladdingWorkbench/templates/lasercladding.src b/freecad/LaserCladdingWorkbench/templates/lasercladding.src new file mode 100644 index 0000000..14b9b78 --- /dev/null +++ b/freecad/LaserCladdingWorkbench/templates/lasercladding.src @@ -0,0 +1,82 @@ +&ACCESS RVP +&REL 1 +&PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabe +&PARAM EDITMASK = * +DEF kvt_{{artikel}}( ) + +;- Kuka src file, generated by FreeCAD LaserCladding WorkBench (by KVT) + +E6POS refpose +E6POS pulverstart +REAL WELDSPEED +REAL TRAVELSPEED +REAL LASERPOWER +INT POWDEROUT + +;------------- definitions ------------ +EXT BAS (BAS_COMMAND :IN,REAL :IN ) ;set base to World +BAS (#INITMOV,0 ) ;Initialicing the defaults for Vel and so on +BAS (#TOOL,{{tool}}) ;Initialicing the defaults for Vel and so on +BAS (#BASE,{{base}}) ;Initialicing the defaults for Vel and so on + +; Home Pos +PTP {A1 -33.31, A2 -104.71, A3 114.60, A4 282.66, A5 -39.21, A6 -104.87, E1 -90, E2 1.0} + +; hier teach punkt eingeben +;FOLD PTP P1 Vel=25 % PDAT1 Tool[6]:LASER Base[6]:Laser;%{PE}%R 8.2.24,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:, 5:25, 7:PDAT1 +$BWDSTART=FALSE +PDAT_ACT=PPDAT1 +FDAT_ACT=FP1 +BAS(#PTP_PARAMS,25) +PTP XP1 +;ENDFOLD + + +;------------- main part ------------ + +;- Process Parameters (change here) +TRAVELSPEED = {{vmax}} ; m/s +WELDSPEED = {{vproc}}; m/s +LASERPOWER = {{laserpower}} ; Set laser power +POWDEROUT = {{powder_out}} + +;- Movement parameters +$VEL.CP = TRAVELSPEED ; m/s ; m/s +$APO.CDIS = 2.300000 ; mm +$APO.CVEL = 95.000000 ; percent + +;- Input/Output settings +$ANOUT[1] = LASERPOWER ; Set laser power +$OUT[{{laser_out}}] = FALSE ; Set Laser off +$OUT[2] = TRUE ; Set Laser activation on +$OUT[POWDER_OUT] = FALSE ; Set powder on +$OUT[{{inert_gas_out}}] = FALSE ; Set inert gas on + +;- Ab hier nicht mehr aendern! +;- Starting point +refpose=$POS_ACT +pulverstart = {X -110.0, Y 0.0, Z 0.0, A 0.0000, B 0.0000, C 0.0000, E1 0.0000, E2 0.0000} +pulverstart.S = refpose.S +pulverstart.T = refpose.T +LIN refpose:pulverstart C_VEL; GENERATED +WAIT SEC 7.0 +$OUT[2] = TRUE ; Set Laser activation on +$OUT[POWDEROUT] = TRUE ; Set powder on +$OUT[{{inert_gas_out}}] = TRUE ; Set inert gas on +;- ============================= +;- == generated poses == +{{paths}} + + + +;- ============================= +$OUT[{{laser_out}}] = FALSE ; Set Laser off +$OUT[2] = FALSE ; Set Laser activation on +$OUT[POWDEROUT] = FALSE ; Set powder on +$OUT[{{inert_gas_out}}] = FALSE ; Set inert gas on +$VEL.CP = 0.100000 ; m/s ; m/s +;- Move to HOME position +PTP {A1 -33.31, A2 -104.71, A3 114.60, A4 282.66, A5 -39.21, A6 -104.87, E1 -90, E2 1.0} + +;------------- end ------------ +END diff --git a/freecad/LaserCladdingWorkbench/utils.py b/freecad/LaserCladdingWorkbench/utils.py index deab74d..415aed7 100644 --- a/freecad/LaserCladdingWorkbench/utils.py +++ b/freecad/LaserCladdingWorkbench/utils.py @@ -168,8 +168,8 @@ def create_contour_lines(geoms): for geom in geoms: if geom.type() == LayerGeometryType.Polygon: # print("Contour with {} coords".format(len(geom.coords))) - #coords = rdp.rdp(geom.coords, epsilon=0.3, algo="iter", return_mask=False) + coords = rdp.rdp(geom.coords, epsilon=0.2, algo="iter", return_mask=False) #print("Simplfied Poly:", len(coords)) - pp = Part.makePolygon([App.Vector(x,y,0) for (x,y) in geom.coords]) + pp = Part.makePolygon([App.Vector(x,y,0) for (x,y) in coords]) contours.append(pp) return contours