def __init__(self, master): Plugin.__init__(self, master, "PocketIsland") self.icon = "pocketisland" self.group = "Development" self.variables = [ ("name", "db" , "", _("Name")), ("endmill", "db" , "", _("End Mill")), ("RecursiveDepth","Single profile,Full pocket,Custom recursive depth", "Single profile", _("Recursive depth")), ("CustomRecursiveDepth","int",1,_("Nb of contours (Custom Recursive Depth)")), ("ProfileDir","inside,outside", "inside", _("Profile direction if profile option selected")), ("CutDir","conventional milling,climbing milling", "conventional milling", _("Cut Direction,default is conventional")), ("AdditionalCut" , "mm" , 0., _("Additional cut inside profile")), ("Overcuts" , "bool" , False, _("Overcuts inside corners")), ("ignoreIslands", "Regard all islands except tabs,Ignore all islands,Regard only selected islands", "Regard all islands except tabs",_("Ignore islands)")), ("allowG1", "bool", True, _("allow pocket paths linking segments(default yes)")), ] self.help="""- Recursive depth : indicates the number of profile passes (single,custom number,full pocket) - Nb of contours (Custom Recursive Depth) : indicates the number of contours if custom selected - Profile direction : indicates the direction (inside / outside) for making profiles - Cut Direction,default is conventional - Additional cut inside profile : acts like a tool corrector inside the profile - Overcuts inside corners : Overcuts allow milling in the corners of a box - Ignore islands : Tabs are always ignored. You can select if all islands are active, none, or only selected """ self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "DragKnife") self.icon = "dragknife" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM_Core" #<<< This is the name of group that plugin belongs #self.oneshot = True #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name", "db", "", _("Name") ), #used to store plugin settings in the internal database ("offset", "mm", 3, _("dragknife offset"), _("distance from dragknife rotation center to the tip of the blade" )), ("angle", "float", 20, _("angle threshold"), _("do not perform pivot action for angles smaller than this")), ("swivelz", "mm", 0, _("swivel height"), _("retract to this height for pivots (useful for thick materials, you should enter number slightly lower than material thickness)" )), ("initdir", "X+,Y+,Y-,X-,none", "X+", _("initial direction"), _("direction that knife blade is facing before and after cut. Eg.: if you set this to X+, then the knifes rotation axis should be on the right side of the tip. Meaning that the knife is ready to cut towards right immediately without pivoting. If you cut multiple shapes in single operation, it's important to have this set consistently across all of them." )), ("feed", "mm", 200, _("feedrate")), ("simulate", "bool", False, _("simulate"), _("Use this option to simulate cuting of dragknife path. Resulting shape will reflect what shape will actuall be cut. This should reverse the dragknife procedure and give you back the original shape from g-code that was previously processed for dragknife." )), ("simpreci", "mm", 0.5, _("simulation precision"), _("Simulation is currently approximated by using lots of short lines. This is the length of these lines." )) ] self.buttons.append( "exe" ) #<<< This is the button added at bottom to call the execute method below self.help = """DragKnifes are special kind of razor/blade holders that can be fit into spindle of your CNC (do not turn the spindle on!!!). They are often used to cut soft and thin materials like vinyl stickers, fabric, leather, rubber gaskets, paper, cardboard, etc...
def __init__(self, master): Plugin.__init__(self, master) self.name = "Midi2CNC" self.icon = "midi2cnc" self.group = "Artistic" self.axes_dict = dict( { 'X':[0], 'Y':[1], 'Z':[2], 'XY':[0,1], 'YX':[1,0], 'XZ':[0,2], 'ZX':[2,0], 'YZ':[1,2], 'ZY':[2,1], 'XYZ':[0,1,2], 'XZY':[0,2,1], 'YXZ':[1,0,2], 'YZX':[1,2,0], 'ZXY':[2,0,1], 'ZYX':[2,1,0] }) self.variables = [ ("name", "db" , "", _("Name")), ("ppu_X" , "float" , 200.0, _("Pulse per unit for X")), ("ppu_Y" , "float" , 200.0, _("Pulse per unit for Y")), ("ppu_Z" , "float" , 200.0, _("Pulse per unit for Z")), ("max_X" , "int" , 50, _("Maximum X travel")), ("max_Y" , "int" , 50, _("Maximum Y travel")), ("max_Z" , "int" , 20, _("Maximum Z travel")), ("AxisUsed", ",".join(self.axes_dict.keys()), "XYZ", _("Axis to be used")), ("File" , "file" , "", _("Midi to process")), ] self.buttons.append("exe")
def __init__(self, main): Plugin.__init__(self, main, "Marker for manual drilling") self.icon = "crosshair" self.group = "Generator" self.variables = [ ("name", "db", "", _("Name") ), # used to store plugin settings in the internal database ( "Mark size", "mm", 10.0, _("Drill mark size") ), # a variable that will be converted in mm/inch based on bCNC settting ("PosX", "mm", 0, _("Mark X center")), # an integer variable ("PosY", "mm", 0, _("Mark Y center")), # a float value variable ("Burn time", "float", 4.0, _("Burn time for drillmark")), ("Burn power", "float", 1000.0, _("Burn power for drillmark")), ("Mark power", "float", 400.0, _("Mark drawing power")), ("Mark type", "Point,Cross,Cross45,Star,Spikes,Spikes45,SpikesStar,SpikesStar45", "Cross", _("Type of the mark")), # a multiple choice combo box ("Draw ring", "bool", True, _("Ring mark (d/2)")) ] self.sin45 = math.sqrt(0.5) self.buttons.append( "exe" ) # <<< This is the button added at bottom to call the execute method below self.help = "This plugin is for creating drilling marks with a laser engraver for manual drilling"
def __init__(self, master): Plugin.__init__(self, master, "Offset") self.icon = "offset" self.group = "CAM_Core+" self.variables = [ ("name", "db" , "", _("Name")), ("endmill", "db" , "", _("End Mill")), ("RecursiveDepth","Single profile,Full pocket,Custom offset count", "Single profile", _("Operation"), _('indicates the number of profile passes (single,custom number,full pocket)')), ("CustomRecursiveDepth","int",2,_("Custom offset count"), _('Number of contours (Custom offset count) : indicates the number of contours if custom selected. MAX:'+str(sys.getrecursionlimit()-1)) ), ("ProfileDir","inside,outside", "inside", _("Offset side"), _('indicates the direction (inside / outside) for making profiles')), ("CutDir","bool", False, _("Climb milling"), _('This can be used to switch between Conventional and Climb milling. If unsure use Convetional (default).')), ("AdditionalCut" , "mm" , 0., _("Additional offset (mm)"), _('acts like a tool corrector inside the profile')), ("Overcuts" , "bool" , False, _("Overcut corners"), _('Tabs are always ignored. You can select if all islands are active, none, or only selected')), ("ignoreIslands", "Regard all islands except tabs,Ignore all islands,Regard only selected islands", "Regard all islands except tabs",_("Island behaviour"), _('Tabs are always ignored. You can select if all islands are active, none, or only selected')), ("allowG1", "bool", True, _("Link segments"), _('Currently there is some weird behaviour sometimes when trying to link segments of pocket internally, so it can be disabled using this option. This workaround should be fixed and removed in future.')), ] self.help="""This plugin offsets shapes to create toolpaths for profiling and pocketing operation. Shape needs to be offset by the radius of endmill to get cut correctly. Currently we have two modes. Without overcut: #overcut-without And with overcut: #overcut-with Blue is the original shape from CAD Turquoise is the generated toolpath Grey is simulation of how part will look after machining """ self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Driller") self.icon = "driller" self.group = "CAM" self.variables = [ ("name", "db", "", _("Name")), ("HolesDistance", "mm", 10.0, _("Distance between holes")), ("TargetDepth", "mm", 0.0, _("Target Depth")), ("Peck", "mm", 0.0, _("Peck, 0 means None")), ("Dwell", "float", 0.0, _("Dwell time, 0 means None")), ("useAnchor", "bool", False, _("Use anchor")), ("File", "file", "", _("Excellon-File")), ("useCustom", "bool", False, _("M3 for laser (settings below)")), ("rFeed", "int", "", _("Feed rapid G0"), "Defaults from config, if blank" ), # default = min(CNC.feedmax_x, CNC.feedmax_y) ("spinMin", "int", "", _("Laser power minimum"), "Defaults from config, if blank" ), # default = Utils.config.get("CNC","spindlemin") ("spinMax", "int", "", _("Laser power maximum"), "Defaults from config, if blank" ), # default = Utils.config.get("CNC","spindlemax") ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Midi2CNC") self.icon = "midi2cnc" self.group = "Artistic" self.axes_dict = dict({ 'X': [0], 'Y': [1], 'Z': [2], 'XY': [0, 1], 'YX': [1, 0], 'XZ': [0, 2], 'ZX': [2, 0], 'YZ': [1, 2], 'ZY': [2, 1], 'XYZ': [0, 1, 2], 'XZY': [0, 2, 1], 'YXZ': [1, 0, 2], 'YZX': [1, 2, 0], 'ZXY': [2, 0, 1], 'ZYX': [2, 1, 0] }) self.variables = [ ("name", "db", "", _("Name")), ("ppu_X", "float", 200.0, _("Pulse per unit for X")), ("ppu_Y", "float", 200.0, _("Pulse per unit for Y")), ("ppu_Z", "float", 200.0, _("Pulse per unit for Z")), ("max_X", "int", 50, _("Maximum X travel")), ("max_Y", "int", 50, _("Maximum Y travel")), ("max_Z", "int", 20, _("Maximum Z travel")), ("AxisUsed", ",".join(self.axes_dict.keys()), "XYZ", _("Axis to be used")), ("File", "file", "", _("Midi to process")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Trochoid_Path") #NAME OF THE PLUGIN self.icon = "trochoidal" self.group = "Development" self.variables = [ ("name", "db", "", _("Name")), ("trochcutdiam", "mm", 6.0, _("Cut Diameter"), "Real cutting diameter"), ("direction", "inside,outside,on", "inside", _("Direction")), ("offset", "float", 0.0, _("Additional offset distance")), ("endmill", "db", "", _("End Mill"), "If Empty chooses, End Mill loaded"), ("adaptative", "bool", 1, _("Adaptative"), "Generate path for adaptative trochoids in the corners (Not yet implemented in trochoidal plugin)" ), ("overcut", "bool", 0, _("Overcut")), ("targetDepth", "mm", -1, _("Target Depth")), ("depthIncrement", "mm", 1, _("Depth Increment")), ("depthIncrement", "mm", 1, _("Depth Increment")), ("tabsnumber", "mm", 1, _("Number of Tabs 0 = Not Tabs"), "Not available yet"), ("tabsWidth", "mm", 1, _("Tabs Diameter"), "Not available yet"), ("tabsHeight", "mm", 1, _("Tabs Height"), "Not available yet"), # ("mintrochdiam", "float", 10, _("Minimal trochoid in % tool")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Slice Mesh") #Helical_Descent: is the name of the plugin show in the tool ribbon button self.icon = "mesh" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name", "db", "", _("Name") ), #used to store plugin settings in the internal database ("file", "file", "", _(".STL/.PLY file to slice"), "What file to slice"), ("flat", "bool", True, _("Get flat slice"), "Pack all slices into single Z height?"), ("cam3d", "bool", False, _("3D slice (devel)"), "This is just for testing"), ("faceup", "Z,-Z,X,-X,Y,-Y", "Z", _("Flip upwards"), "Which face goes up?"), ("scale", "float", 1, _("scale factor"), "Size will be multiplied by this factor"), ("zoff", "mm", 0, _("z offset"), "This will be added to Z"), ("zstep", "mm", 0.1, _("layer height (0 = only single zmin)"), "Distance between layers of slices"), ("zmin", "mm", -1, _("minimum Z height"), "Height to start slicing"), ("zmax", "mm", 1, _("maximum Z height"), "Height to stop slicing") ] self.buttons.append( "exe" ) #<<< This is the button added at bottom to call the execute method below self.help = '''This plugin can slice meshes
def __init__(self, master): Plugin.__init__(self, master,"Helical") #Helical_Descent: is the name of the plugin show in the tool ribbon button self.icon = "helical" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name" , "db" , "", _("Name")), #used to store plugin settings in the internal database ("Sel_Blocks", "bool" , "False", _("Selected Block")), ("X", "mm" , 0.00, _("X Initial")), ("Y", "mm" , 0.00, _("Y Initial")), ("Z", "mm" , 0.00, _("Z Initial")), ("CutDiam" ,"float", 1.50, _("Diameter Cut")), ("endmill", "db" , "", _("End Mill")), # ("RadioHelix", "mm" , 0.80, _("Helicoid Radius")), #a variable that will be converted in mm/inch based on bCNC settting ("Pitch" , "mm" , 0.10, _("Drop by lap")), #an integer variable ("Depth" , "mm" , 3.00, _("Final Depth")), #a float value variable ("Mult_Feed_Z", "float" ,1.0, _("Z Feed Multiplier")), ("HelicalCut" , "Helical Cut,Internal Right Thread,Internal Left Thread,External Right Thread,External Left Thread", "Helical Cut",_("Helical Type")), ("Entry" ,"Center,Edge" , "Center", _("Entry and Exit")), ("ClearanceEntry" ,"float", 0.2, _("Entry Edge Clearance")), ("ClearanceExit" ,"float", 0.2, _("Exit Edge Clearance")), ("ReturnToSafeZ" ,"bool" , "True", _("Returns to safe Z")), # ("Text" , "text" , "Free Text", _("Text description")), #a text input box # ("CheckBox", "bool" , False, _("CheckBox description")), #a true/false check box # ("OpenFile", "file" , "", _("OpenFile description")), #a file chooser widget # ("ComboBox", "Item1,Item2,Item3" , "Item1", _("ComboBox description")) #a multiple choice combo box ] self.buttons.append("exe") #<<< This is the button added at bottom to call the execute method below
def __init__(self, master): Plugin.__init__(self, master, "Random") self.icon = "randomize" self.group = "CAM" self.variables = [("name", "db", "", _("Name")), ("randx", "mm", 5.0, "Rand x"), ("randy", "mm", 5.0, "Rand y")] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Tile" self.icon = "tile" self.variables = [("name", "db", "", _("Name")), ("nx", "int", 3, "Nx"), ("ny", "int", 3, "Ny"), ("dx", "mm", 50.0, "Dx"), ("dy", "mm", 50.0, "Dy")] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Hilbert") self.icon = "hilbert" self.group = "Artistic" self.variables = [("name", "db", "", _("Name")), ("Size", "mm", 50.0, _("Size")), ("Order", "int", 2, _("Order")), ("Depth", "int", 0, _("Depth"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Bowl" self.icon = "bowl" self.variables = [("name", "db", "", _("Name")), ("D", "mm", 30.0, _("Diameter")), ("res", "float", 10.0, _("Resolution (degrees)")), ("pocket", "bool", 1, _("Progressive"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Gear") self.icon = "gear" self.group = "Generator" self.variables = [("name", "db", "", _("Name")), ("n", "int", 10, _("No of teeth")), ("phi", "float", 17.0, _("Pressure angle")), ("pc", "mm", 5.0, _("Circular Pitch"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "PocketIsland") self.icon = "pocketisland" self.group = "Development" self.variables = [ ("name", "db" , "", _("Name")), ("endmill", "db" , "", _("End Mill")), ("allowG1", "bool", True, _("allow G1 linking segments(default yes)")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Spirograph") self.icon = "spirograph" self.group = "Artistic" self.variables = [("name", "db", "", _("Name")), ("RadiusExternal", "mm", 50.0, _("External Radius")), ("RadiusInternal", "mm", 33.0, _("Internal Radius")), ("RadiusOffset", "mm", 13.0, _("Offset radius")), ("Depth", "mm", 0, _("Target Depth"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Hilbert") self.icon = "hilbert" self.group = "Artistic" self.variables = [ ("name", "db" , "", _("Name")), ("Size" , "mm" , 50.0, _("Size")), ("Order" , "int" , 2, _("Order")), ("Depth" , "int" , 0, _("Depth")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "SimpleLine") self.icon = "SimpleLine" self.group = "Generator" self.variables = [ ("xstart", "float", 10, _("xStart")), ("xend", "float", 20, _("xEnd")), ("ystart", "float", 10, _("yStart")), ("yend", "float", 20, _("yEnd")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Bowl" self.icon = "bowl" self.variables = [ ("name", "db", "", _("Name")), ("D", "mm", 30.0, _("Diameter")), ("res", "float", 10.0, _("Resolution (degrees)")), ("pocket", "bool", 1, _("Progressive")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "SimpleTranslate") self.icon = "SimpleTranslate" self.group = "Generator" self.variables = [ ("xinc", "float", 10.0, _("x increment")), ("yinc", "float", 10.0, _("y increment")), ("nbrepeat", "int", 2, _("nb repeat including original")), ("keep", "bool", True, _("Keep original Yes/No")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Gear" self.icon = "gear" self.variables = [ ("name", "db", "", "Name"), ("n", "int", 10, "No of teeth"), ("phi", "float", 17.0, "Pressure angle"), ("pc", "mm", 5.0, "Circular Pitch") ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "SimpleArc") self.icon = "SimpleArc" self.group = "Generator" self.variables = [ ("xcenter", "float", 0.0, _("Center X")), ("ycenter", "float", 0.0, _("Center Y")), ("radius", "float", 0, _("Radius")), ("startangle", "float", 0, _("Start Angle in Degrees")), ("endangle", "float", 360, _("End Angle in Degrees ")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master,"Intersection") #Helical_Descent: is the name of the plugin show in the tool ribbon button self.icon = "intersection" #<<< This is the name of png file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "Development" #<<< This is the name of group that plugin belongs self.oneshot = True #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name" , "db" , "", _("Name")), #used to store plugin settings in the internal database ] self.buttons.append("exe") #<<< This is the button added at bottom to call the execute method below
def __init__(self, master): Plugin.__init__(self, master) self.name = "Tile" self.icon = "tile" self.variables = [ ("name", "db", "", _("Name")), ("nx", "int", 3, "Nx"), ("ny", "int", 3, "Ny"), ("dx", "mm", 50.0, "Dx"), ("dy", "mm", 50.0, "Dy") ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Text") self.icon = "text" self.group = "Generator" self.variables = [("name", "db", "", _("Name")), ("Text", "text", "Write this!", _("Text to generate")), ("Depth", "mm", 0.0, _("Working Depth")), ("FontSize", "mm", 10.0, _("Font size")), ("FontFile", "file", "", _("Font file"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "SimpleRotate") self.icon = "SimpleRotate" self.group = "Generator" self.variables = [ ("xcenter", "float", 10.0, _("x center")), ("ycenter", "float", 10.0, _("y center")), ("alpha", "float", 90.0, _("angle step (degrees)")), ("nbrepeat", "int", 2, _("nb repeat including original")), ("keep", "bool", True, _("Keep original yes/no")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Spirograph" self.icon = "spirograph" self.variables = [ ("name", "db" , "", _("Name")), ("RadiusExternal" , "mm" , 50.0, _("External Radius")), ("RadiusInternal" , "mm" , 33.0, _("Internal Radius")), ("RadiusOffset" , "mm" , 13.0, _("Offset radius")), ("Depth" , "mm" , 0, _("Target Depth")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master,"Center") #Helical_Descent: is the name of the plugin show in the tool ribbon button self.icon = "centerpoint" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs self.oneshot = True #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name" , "db" , "", _("Name")) #used to store plugin settings in the internal database ] self.buttons.append("exe") #<<< This is the button added at bottom to call the execute method below
def __init__(self, master): Plugin.__init__(self, master, "Scaling") self.icon = "scale" self.group = "CAM" self.variables = [("name", "db", "", _("Name")), ("xscale", "float", "", _("X Scale")), ("yscale", "float", "", _("Y Scale")), ("zscale", "float", "", _("Z Scale")), ("feed", "int", 1200, _("Feed")), ("zfeed", "int", "", _("Plunge Feed")), ("rpm", "int", 12000, _("RPM"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "SimpleRectangle") self.icon = "SimpleRectangle" self.group = "Generator" self.variables = [ ("xstart", "float", 0, _("xStart")), ("xend", "float", 20, _("xEnd")), ("ystart", "float", 0, _("yStart")), ("yend", "float", 40, _("yEnd")), ("radius", "float", 0, _("Corner Radius")), ("cw", "bool", True, _("clockwise")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Driller" self.icon = "driller" self.variables = [ ("name", "db", "", _("Name")), ("HolesDistance", "mm", 10.0, _("Distance between holes")), ("TargetDepth", "mm", 0.0, _("Target Depth")), ("Peck", "mm", 0.0, _("Peck, 0 meas None")), ("Dwell", "float", 0.0, _("Dwell time, 0 means None")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Driller") self.icon = "driller" self.group = "CAM" self.variables = [ ("name", "db", "", _("Name")), ("HolesDistance", "mm", 10.0, _("Distance between holes")), ("TargetDepth", "mm", 0.0, _("Target Depth")), ("Peck", "mm", 0.0, _("Peck, 0 meas None")), ("Dwell", "float", 0.0, _("Dwell time, 0 means None")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Text" self.icon = "text" self.variables = [("name", "db" , "", _("Name")), ("Text", "text", "Write this!", _("Text to generate")), ("Depth", "mm", 0.0, _("Working Depth")), ("FontSize", "mm", 10.0, _("Font size")), ("FontFile", "file", "", _("Font file")), ("ImageToAscii","file", "", _("Image to Ascii")), ("CharsWidth", "int", 80, _("Image chars width"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Zig-Zag") self.icon = "zigzag" self.group = "Artistic" self.variables = [("name", "db", "", _("Name")), ("Nlines", "int", 34, _("Number of lines")), ("LineLen", "mm", 33., _("Line length")), ("StartEndLen", "mm", 5., _("Additional length at start/end")), ("Step", "mm", 1., _("Step distance")), ("CornerRes", "int", 5, _("Corner resolution")), ("Depth", "mm", -0.1, _("Depth"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master,"ArcFit") self.icon = "arcfit" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs #self.oneshot = True #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name" , "db" , "", _("Name")), #used to store plugin settings in the internal database ("preci", "mm", 0.5, _("precision (mm)")), ("numseg", "int", 2, _("minimal number of segments to create arc")) ] self.buttons.append("exe") #<<< This is the button added at bottom to call the execute method below
def __init__(self, master): Plugin.__init__(self, master, "Trochoidal 3D") self.icon = "trochoidal" self.group = "CAM" self.variables = [ ("name", "db", "", _("Name")), ("diam" ,"float", "", _("Trochoid Cut Diameter")), ("endmill", "db" , "", _("End Mill"), "If Empty chooses, End Mill loaded"), ("ae", "mm", 0.30, _("Trochoids Advance")), ("TypeSplice","Warpedarc,Splices,Circular one side rectified,Circular both sides rectified,Straight,Cut",\ "Warpedarc", _("Type of Splice"),"Currently Splices works very slow"), ("direction","inside,outside,on (3d Path)" , "inside", _("Direction")), ("offset", "float", 0.0, _("Additional offset distance"), " Only for In or On direction"), ("adaptative", "bool", 1, _("Adaptative"), "Generate path for adaptative trochoids in the corners. Only for In or On direction"), ("overcut", "bool", 0, _("Overcut"), " Only for In or On direction"), ("targetDepth", "mm", -1, _("Target Depth"), " Only for In or On direction"), ("depthIncrement", "mm", 1, _("Depth Increment"), " Only for In or On direction"), ("cw" , "bool" , True, _("Clockwise")), # ("helicalangle", "int" , 25, _("Helical descent angle")), ("rpm", "int" , 12000, _("RPM")), ("feed" , "int", 1200 , _("Feed")), ("zfeed" , "int", "" , _("Plunge Feed")), ("splicesteps", "int", 12 , _("splice steps every 360 degrees"), "Only for Splices Type of Splice"), # ("tabsnumber", "mm", 1, _("Number of Tabs 0 = Not Tabs")), # ("tabsWidth", "mm", 1, _("Tabs Diameter")), # ("tabsHeight", "mm", 1, _("Tabs Height")), # ("VerticalResolution" , "mm" , 0.15, _("Resolution or Vertical Step")), # ("variableRPM" , "bool",True , _("Variable RPM")), # ("S_z", "int", "", _("RPM For Descent Cut")), # ("S_xy", "int", "", _("RPM Trochoidal Cutting")), # ("variableFeed" , "bool",True , _("Variable Feed")), # ("K_Z" , "float", 1.00, _("Feed rate Multiplier Z")), # ("K_XY" , "float", 1.00, _("Feed rate Multiplier XY")), # ("TargetDepth", "mm", 0.0, _("Target Depth")), # ("_3D" , "bool",False , _("Cut accord 3D Path")), # ("VerticalClimbing" , "bool",False , _("Vertical Climbing Trochoid")), # ("AllowSurface" , "bool",False , _("Trochoid on Z Surface")), # ("MinTrochDiam", "float", 6.0 , _("Minimal trochoid in % tool")), # ("OnlyGline" , "bool",False , _("Only go to Trochoid Center")), # ("FirstPoint" , "bool",False , _("First Point Problem")), # ("Dwell", "float", 0.0, _("Dwell time, 0 means None")), # ("Peck", "mm", 0.0, _("Peck, 0 meas None")), # ("manualsetting", "bool", False , _("----- Manual setting ------")), # ("helicalDiam" ,"float", 7.0, _("Helical Descent Diameter")), # ("minimfeed", "int" , "", _("Minimum Adaptative Feed")), ] self.buttons.append("exe") self.help= '''It generates the trochoidal cutting mode on the selected block, even at different heights.
def __init__(self, master): Plugin.__init__(self, master, "Zig-Zag") self.icon = "zigzag" self.group = "Artistic" self.variables = [ ("name", "db", "", _("Name")), ("Nlines", "int", 34, _("Number of lines")), ("LineLen", "mm", 33., _("Line length")), ("StartEndLen", "mm", 5., _("Additional length at start/end")), ("Step", "mm", 1., _("Step distance")), ("CornerRes", "int", 5, _("Corner resolution")), ("Depth", "mm", -0.1, _("Depth")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Jigsaw") self.icon = "jigsaw" self.group = "Generator" self.variables = [ ("name", "db", "", _("Name")), ("width", "mm", 1000.0, _("Board width")), ("height", "mm", 800.0, _("Board height")), ("piece_count", "int", 100, _("Piece count")), ("random_seed", "int", 1, _("Random seed")), ("threshold", "float", 1.2, _("Difference between pieces")), ("tap_shape", 'basic,heart,anchor', 'basic', _("Shape of the tap")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Text" self.icon = "text" self.group = "Generator" self.variables = [("name", "db" , "", _("Name")), ("Text", "text", "Write this!", _("Text to generate")), ("Depth", "mm", 0.0, _("Working Depth")), ("FontSize", "mm", 10.0, _("Font size")), ("FontFile", "file", "", _("Font file")), ("ImageToAscii","file", "", _("Image to Ascii")), ("CharsWidth", "int", 80, _("Image chars width"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master,"Linearize") self.icon = "linearize" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs #self.oneshot = True #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name" , "db" , "", _("Name")), #used to store plugin settings in the internal database ("maxseg", "mm", "1", _("segment size"), _("Maximal length of resulting lines, smaller number means more precise output and longer g-code. Length will be automaticaly truncated to be even across whole subdivided segment.")), ("splitlines", "bool", False, _("subdiv lines"), _("Also subdivide the lines. Otherwise only arcs and splines will be subdivided")) ] self.buttons.append("exe") #<<< This is the button added at bottom to call the execute method below self.help = """
def __init__(self, master): Plugin.__init__(self, master, "Driller") self.icon = "driller" self.group = "CAM" self.variables = [ ("name", "db", "", _("Name")), ("HolesDistance", "mm", 10.0, _("Distance between holes")), ("TargetDepth", "mm", 0.0, _("Target Depth")), ("Peck", "mm", 0.0, _("Peck, 0 meas None")), ("Dwell", "float", 0.0, _("Dwell time, 0 means None")), ("useAnchor", "bool", False, _("Use anchor")), ("File" , "file" , "", _("Excellon-File")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Scaling") self.icon = "scale" self.group = "CAM" self.variables = [ ("name", "db", "", _("Name")), ("xscale" ,"float", "", _("X Scale")), ("yscale" ,"float", "", _("Y Scale")), ("zscale" ,"float", "", _("Z Scale")), ("feed" , "int", 1200 , _("Feed")), ("zfeed" , "int", "" , _("Plunge Feed")), ("rpm", "int" , 12000, _("RPM")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Box" self.icon = "box" self.variables = [("name", "db", "", _("Name")), ("dx", "mm", 100.0, _("Width Dx")), ("dy", "mm", 70.0, _("Depth Dy")), ("dz", "mm", 50.0, _("Height Dz")), ("nx", "int", 11, _("Fingers Nx")), ("ny", "int", 7, _("Fingers Ny")), ("nz", "int", 5, _("Fingers Nz")), ("profile", "bool", 0, _("Profile")), ("overcut", "bool", 1, _("Overcut")), ("cut", "bool", 0, _("Cut"))] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Flatten") self.icon = "flatten" self.group = "CAM" self.variables = [ ("name", "db", "", _("Name")), ("XStart" , "mm", 0.0, _("X start")), ("YStart" , "mm", 0.0, _("Y start")), ("FlatWidth" , "mm", 30.0, _("Width to flatten")), ("FlatHeight" , "mm", 20.0, _("Height to flatten")), ("FlatDepth" , "mm", 0.0, _("Depth to flatten")), ("BorderPass" , "bool", True , _("Raster border")), ("CutDirection", "Climb,Conventional","Climb", _("Cut Direction")), ("PocketType" , "Raster,Offset" ,"Raster", _("Pocket type")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Trochoid_Path") #NAME OF THE PLUGIN self.icon = "trochoidpath" self.group = "CAM" self.variables = [ ("name", "db" , "", _("Name")), ("CutDiam" ,"float", 6.0, _("Trochoid Diameter")), ("Direction","inside,outside,on" , "outside", _("Direction")), ("Offset", "float", 0.0, _("Additional offset distance")), ("endmill", "db" , "", _("End Mill")), ("Adaptative", "bool",1, _("Adaptative")), ("Overcut", "bool", 0, _("Overcut")), ("cornerdiameter", "float", 10, _("Diameter safe to corner %")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Box" self.icon = "box" self.variables = [ ("name", "db", "", "Name"), ("dx", "mm", 100.0, "Width Dx"), ("dy", "mm", 70.0, "Depth Dy"), ("dz", "mm", 50.0, "Height Dz"), ("nx", "int", 11, "Fingers Nx"), ("ny", "int", 7, "Fingers Ny"), ("nz", "int", 5, "Fingers Nz"), ("profile", "bool", 0, "Profile"), ("overcut", "bool", 1, "Overcut"), ("cut", "bool", 0, "Cut") ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Pyrograph" self.icon = "pyrograph" self.variables = [ ("name", "db" , "", _("Name")), ("ToolSize", "mm" , 0.5, _("Pyrograph tip size")), ("Depth", "mm" , 0.0, _("Working Depth")), ("MaxSize", "mm" , 100.0, _("Maximum size")), ("FeedMin", "int" , 250, _("Minimum feed")), ("FeedMax", "int" , 5000, _("Maximum feed")), ("Direction", "Horizontal,Vertical,Both", "Horizontal", _("Direction")), ("DrawBorder", "bool", False, _("Draw border")), ("File", "file" , "", _("Image to process")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master) self.name = "Heightmap" self.icon = "heightmap" self.variables = [ ("name", "db", "", _("Name")), ("Depth", "mm", -1.0, _("Working Depth")), ("MaxSize", "mm", 100.0, _("Maximum size")), ("Scan", "Columns,Rows,C&R,R&C", "Rows", _("Scan")), ("ScanDir", "Alternating,Positive,Negative,Up Mill,Down Mill", "Alternating", _("ScanDir")), ("CutTop", "bool", False, _("Cut Top")), ("CutBorder", "bool", False, _("Cut Border")), ("Invert", "bool", False, _("Invert")), ("File", "file", "", _("Image to process")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Sketch") self.icon = "sketch" self.group = "Artistic" self.variables = [ ("name", "db" , "", _("Name")), ("Grundgy","Low,Medium,High,Very High", "Medium", _("Grundgy, search radius")), ("Depth" , "mm" , 0.0, _("Working Depth")), ("MaxSize" , "mm" , 250.0, _("Maximum size")), ("SquiggleTotal" , "int" , 300, _("Squiggle total count")), ("SquiggleLength", "mm" , 400.0, _("Squiggle Length")), ("DrawBorder", "bool", False, _("Draw border")), ("File" , "file" , "", _("Image to process")), ("Channel","Luminance,Red,Green,Blue" ,"Luminance", _("Channel to analyze")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, "Box") self.icon = "box" self.group = "Generator" self.variables = [ ("name", "db", "", _("Name")), ("internal","bool", 1, _("Internal Dimensions")), ("dx", "mm", 100.0, _("Width Dx")), ("dy", "mm", 70.0, _("Depth Dy")), ("dz", "mm", 50.0, _("Height Dz")), ("nx", "int", 11, _("Fingers Nx")), ("ny", "int", 7, _("Fingers Ny")), ("nz", "int", 5, _("Fingers Nz")), ("profile", "bool", 0, _("Profile")), ("overcut", "bool", 1, _("Overcut")), ("cut", "bool", 0, _("Cut")) ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master,"Trochoidal") #Helical_Descent: is the name of the plugin show in the tool ribbon button self.icon = "helical" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name" , "db" , "", _("Name")), #used to store plugin settings in the internal database ("cw" , "bool" , True, _("Clockwise")), ("circ" , "bool" , False, _("Circular")), ("evenspacing" , "bool" , True, _("Even spacing across segment")), ("entry" , "bool" , False, _("Trochoid entry (prepare for helicut)")), ("rdoc" , "mm" , "0.2", _("Radial depth of cut (<= cutter D * 0.4)")), ("dia" , "mm" , "3", _("Trochoid diameter (<= cutter D)")), ("feed" , "mm" , "2000", _("Feedrate")) ] self.buttons.append("exe") #<<< This is the button added at bottom to call the execute method below
def __init__(self, master): Plugin.__init__(self, master, "Marker for manual drilling") self.icon = "crosshair" self.group = "Generator" self.variables = [ ("name", "db", "", _("Name")), # used to store plugin settings in the internal database ("Mark size", "mm", 10.0, _("Drill mark size")), # a variable that will be converted in mm/inch based on bCNC settting ("PosX", "mm", 0, _("Mark X center")), # an integer variable ("PosY", "mm", 0, _("Mark Y center")), # a float value variable ("Burn time", "float", 4.0, _("Burn time for drillmark")), ("Burn power", "float", 1000.0, _("Burn power for drillmark")), ("Mark power", "float", 400.0, _("Mark drawing power")), ("Mark type", "Point,Cross,Cross45,Star,Spikes,Spikes45,SpikesStar,SpikesStar45", "Cross", _("Type of the mark")), # a multiple choice combo box ("Draw ring", "bool", True, _("Ring mark (d/2)")) ] self.sin45 = math.sqrt(0.5) self.buttons.append("exe") # <<< This is the button added at bottom to call the execute method below self.help = "This plugin is for creating drilling marks with a laser engraver for manual drilling"
def __init__(self, master): Plugin.__init__(self, master,"DragKnife") self.icon = "dragknife" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs #self.oneshot = True #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name" , "db" , "", _("Name")), #used to store plugin settings in the internal database ("offset", "mm", 3, _("dragknife offset"), _("distance from dragknife rotation center to the tip of the blade")), ("angle", "float", 20, _("angle threshold"), _("do not perform pivot action for angles smaller than this")), ("swivelz", "mm", 0, _("swivel height"), _("retract to this height for pivots (useful for thick materials, you should enter number slightly lower than material thickness)")), ("initdir", "X+,Y+,Y-,X-,none", "X+", _("initial direction"), _("direction that knife blade is facing before and after cut. Eg.: if you set this to X+, then the knifes rotation axis should be on the right side of the tip. Meaning that the knife is ready to cut towards right immediately without pivoting. If you cut multiple shapes in single operation, it's important to have this set consistently across all of them.")), ("feed", "mm", 200, _("feedrate")), ("simulate", "bool", False, _("simulate"), _("Use this option to simulate cuting of dragknife path. Resulting shape will reflect what shape will actuall be cut. This should reverse the dragknife procedure and give you back the original shape from g-code that was previously processed for dragknife.")), ("simpreci", "mm", 0.5, _("simulation precision"), _("Simulation is currently approximated by using lots of short lines. This is the length of these lines.")) ] self.buttons.append("exe") #<<< This is the button added at bottom to call the execute method below self.help = """DragKnifes are special kind of razor/blade holders that can be fit into spindle of your CNC (do not turn the spindle on!!!). They are often used to cut soft and thin materials like vinyl stickers, fabric, leather, rubber gaskets, paper, cardboard, etc...
def __init__(self, master): Plugin.__init__(self, master, "Halftone") self.icon = "halftone" self.group = "Artistic" self.variables = [ ("name", "db" , "", _("Name")), ("File" , "file" , "", _("Image to process")), ("Channel","Luminance,Red(sqrt),Green(sqrt),Blue(sqrt)" ,"Luminance", _("Channel to analyze")), ("Invert" , "bool" , "", _("Invert Colors")), ("DrawSize" , "mm" , 250.0, _("Max draw size (Width or Height)")), ("CellSize" , "mm" , 5.0, _("Cell size")), ("DiameterMax" , "mm" , 4.0, _("Max diameter, cap limit")), ("DiameterMin" , "mm" , 0.2, _("Min diameter, cut off")), ("Angle", "float" , 0.0, _("Image rotation angle")), ("DrawBorder", "bool" , False, _("Draw border")), ("Depth" , "mm" , 0.0, _("Working Depth")), ("Conical", "bool" , False, _("Generate for conical end mill")), ] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master,"Slice Mesh") #Helical_Descent: is the name of the plugin show in the tool ribbon button self.icon = "mesh" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs #Here we are creating the widgets presented to the user inside the plugin #Name, Type , Default value, Description self.variables = [ #<<< Define a list of components for the GUI ("name" , "db" , "", _("Name")), #used to store plugin settings in the internal database ("file" , "file" , "", _(".STL/.PLY file to slice"), "What file to slice"), ("flat" , "bool" , True, _("Get flat slice"), "Pack all slices into single Z height?"), ("cam3d" , "bool" , False, _("3D slice (devel)"), "This is just for testing"), ("faceup" , "Z,-Z,X,-X,Y,-Y" , "Z", _("Flip upwards"), "Which face goes up?"), ("scale" , "float" , 1, _("scale factor"), "Size will be multiplied by this factor"), ("zoff" , "mm" , 0, _("z offset"), "This will be added to Z"), ("zstep" , "mm" , 0.1, _("layer height (0 = only single zmin)"), "Distance between layers of slices"), ("zmin" , "mm" , -1, _("minimum Z height"), "Height to start slicing"), ("zmax" , "mm" , 1, _("maximum Z height"), "Height to stop slicing") ] self.buttons.append("exe") #<<< This is the button added at bottom to call the execute method below self.help = '''This plugin can slice meshes
def __init__(self, master): Plugin.__init__(self, master,"Embroidery") self.name = "Embroidery" self.icon = "tile" self.group= "CAM" self.variables = [ ("name", "db", "", "Name"), ("FileName", "file", "", "DST Tajima file"), ("FeedMin" , "int" , 250, "Minimum feed"), ("FeedMax" , "int" , 5000, "Maximum feed"), ("LA", "LA", "", "name"), ("ST", "ST", "", "Stitch count"), ("CO:", "CL", "", "color changes"), ("+X:", "posx", "", "maximum X extent"), ("-X:", "negx", "", "minimum X extent"), ("+Y:", "posy", "", "maximum Y extent"), ("-Y:", "negy", "", "minimum Y extent"), ("AX:", "ax", "", "needle end point X"), ("AY:", "ay", "", "needle end point Y") ] feedMax = self["FeedMax"] self.buttons.append("exe")
def __init__(self, master): Plugin.__init__(self, master, 'Function') self.icon = 'parabola' self.group = 'Artistic' self.variables = [ ('name', 'db', 'Function', _('Name')), ('form', 'text', 'x**2', _('Formula')), ('res', 'float', 0.005, _('Resolution')), ('ranX', 'float', 10, _('Range of X')), ('ranY', 'float', 10, _('Range of Y')), ('centX', 'float', 5, _('Center X coordinate')), ('centY', 'float', 0, _('Center Y coordinate')), ('dimX', 'mm', 100.0, _('X dimension')), ('dimY', 'mm', 100.0, _('Y dimension')), ('spacX', 'float', 1, _('X number line xpacing')), ('spacY', 'float', 1, _('Y number line xpacing')), ('lin', 'float', 1, _('Small line length')), ('draw', 'bool', True, _('Draw coordinate system?')), ] self.buttons.append('exe') self.help = """
def __init__(self, master): Plugin.__init__(self, master,"FlatPath") self.icon = "flatpath" #<<< This is the name of file used as icon for the ribbon button. It will be search in the "icons" subfolder self.group = "CAM" #<<< This is the name of group that plugin belongs self.oneshot = True