Skip to content

Commit c31422f

Browse files
committed
foo
1 parent 37cfa17 commit c31422f

File tree

2 files changed

+44
-13
lines changed

2 files changed

+44
-13
lines changed

gcodeplot.inx

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<dependency type="executable" location="extensions">gcodeplot.py</dependency>
77
<param name="tab" type="notebook">
88
<page name="general" _gui-text="General Settings ">
9-
<param name="tool-mode" type="enum" _gui-text="Tool mode:" _gui-description="In draw mode, tool offset and overcut settings are ignored. In cut mode, shading is always disabled. In custom mode, all the other settings are used.">
9+
<param name="tool-mode" type="enum" _gui-text="Tool mode:" _gui-description="In draw mode, tool offset, overcut and inside-out sorting settings are ignored. In cut mode, shading is always disabled, optimization is disabled and inside-out sorting is always enabled. In custom mode, one can mix and match these.">
1010
<item value="draw">drawing</item>
1111
<item value="cut">cutting</item>
1212
<item value="custom">custom</item>
@@ -22,18 +22,40 @@
2222
<param name="pen-up-speed" type="float" min="-1000000" max="1000000" precision="1" _gui-text="Movement speed (mm/s):" _gui-description="Speed moving with pen up (Default: 40)">40</param>
2323
<param name="pen-down-speed" type="float" min="-1000000" max="1000000" precision="1" _gui-text="Draw speed (mm/s):" _gui-description="Speed moving with pen down (Default: 35)">35</param>
2424
<param name="z-speed" type="float" min="-1000000" max="1000000" precision="1" _gui-text="Z-speed (mm/s):" _gui-description="Speed moving pen up/down (Default: 5)">5</param>
25+
</page>
26+
<page name="fitting" _gui-text="Fitting and Extracting">
2527
<param name="scale" type="enum" _gui-text="Scaling mode:" _gui-description="Method for scaling to print area (Default: none; should be 'none' if tool-offset option is set in cutter tab)">
2628
<item value="none">none (needed if tool offset&gt;0)</item>
2729
<item value="fit">fit</item>
2830
<item value="down-only">down-only</item>
2931
</param>
32+
<param name="align-x" type="enum" _gui-text="Horizontal alignment:" _gui-description="Horizontal alignment of drawing in plotter area">
33+
<item value="none">none</item>
34+
<item value="left">left</item>
35+
<item value="center">center</item>
36+
<item value="right">right</item>
37+
</param>
38+
<param name="align-y" type="enum" _gui-text="Vertical alignment:" _gui-description="Vertical alignment of drawing in plotter area">
39+
<item value="none">none</item>
40+
<item value="bottom">left</item>
41+
<item value="center">center</item>
42+
<item value="top">right</item>
43+
</param>
44+
<param name="boolean-extract-color" type="boolean" _gui-text="Extract one color from drawing" _gui-description="If enabled, only paths in the selected color are drawn.">0</param>
45+
<param name="extract-color" type="color" _gui-text="Color to extract from drawing" _gui-description="If extract option is active, this selects the color to extract.">#000000</param>
3046
</page>
31-
<page name="shading" _gui-text="Shading Settings">
47+
<page name="drawing" _gui-text="Drawing Settings">
3248
<param name="shading-threshold" type="float" min="0" max="1" precision="2" _gui-text="Shading threshold:" _gui-description="Shade whenever the shade is below this value, where 0=black and 1=white. To turn off shading, set to 0. (Default: 1, shade everything other than white).">1</param>
3349
<param name="shading-lightest" type="float" min="0" max="1000" precision="1" _gui-text="Lightest shading spacing (mm):" _gui-description="Distance between shading lines for the lightest shaded areas.">3</param>
3450
<param name="shading-darkest" type="float" min="0" max="1000" precision="1" _gui-text="Darkest shading spacing (mm):" _gui-description="Distance between shading lines for the darkest shaded areas.">0.5</param>
3551
<param name="shading-angle" type="float" min="0" max="180" precision="1" _gui-text="Shading angle (degrees)" _gui-description="Angle of shading lines">45</param>
3652
<param name="boolean-shading-crosshatch" type="boolean" _gui-text="Crosshatching" _gui-description="Crosshatching when shading">0</param>
53+
<param name="optimization-time" type="int" min="0" max="600" precision="1" _gui-text="Optimization time (sec.):" _gui-description="Maximum amount of time to spend optimizing pen movement (typical is half of it).">60</param>
54+
</page>
55+
<page name="cutting" _gui-text="Cutting Settings">
56+
<param name="tool-offset" type="float" min="0" max="1000" precision="2" _gui-text="Tool offset (mm):" _gui-description="Horizontal distance from tool rotation axis to cutting tip (default: 1)">1</param>
57+
<param name="overcut" type="float" min="0" max="1000" precision="2" _gui-text="Overcut (mm):" _gui-description="Extra cut distance for closed curves (default: 1)">1</param>
58+
<param name="boolean-sort" type="boolean" _gui-text="Inside-out sorting" _gui-description="Cut inside curves first">1</param>
3759
</page>
3860
</param>
3961
<output>

gcodeplot.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ def help():
614614
-X|--shading-crosshatch*: cross hatch shading
615615
-L|--stroke-all*: stroke even regions specified by SVG to have no stroke
616616
-O|--shading-avoid-outline*: avoid going over outline twice when shading
617-
-o|--optimization-timeout=t: timeout on optimization attempt (seconds; will be retried once; set to 0 to turn off optimization) [default 30]
617+
-o|--optimization-time=t: max time to spend optimizing (seconds; set to 0 to turn off optimization) [default 60]
618618
-d|--sort*: sort paths from inside to outside for cutting [default off]
619619
-c|--config-file=filename: read arguments, one per line, from filename
620620
-w|--gcode-pause=cmd: gcode pause command [default: @pause]
@@ -641,7 +641,7 @@ def help():
641641
strokeAll = False
642642
extractColor = None
643643
gcodePause = "@pause"
644-
optimizationTimeOut = 30
644+
optimizationTime = 30
645645
dpi = (1016., 1016.)
646646
pens = {1:Pen('1 (0.,0.) black default')}
647647
doDump = False
@@ -652,16 +652,18 @@ def help():
652652
toolOffset = 0.
653653
overcut = 0.
654654
toolMode = "custom"
655+
booleanExtractColor = False
655656

656657
try:
657658
opts, args = getopt.getopt(sys.argv[1:], "UR:Uhdulw:P:o:Oc:LT:M:m:A:XHrf:na:D:t:s:S:x:y:z:Z:p:f:F:",
658659
["help", "down", "up", "lower-left", "allow-repeats", "no-allow-repeats", "scale=", "config-file=",
659-
"area=", 'align-x=', 'align-y=', 'optimization-timeout=', "pens=",
660+
"area=", 'align-x=', 'align-y=', 'optimization-time=', "pens=",
660661
'input-dpi=', 'tolerance=', 'send=', 'send-speed=', 'pen-down-z=', 'pen-up-z=', 'parking-z=',
661662
'pen-down-speed=', 'pen-up-speed=', 'z-speed=', 'hpgl-out', 'no-hpgl-out', 'shading-threshold=',
662663
'shading-angle=', 'shading-crosshatch', 'no-shading-crosshatch', 'shading-avoid-outline',
663664
'pause-at-start', 'no-pause-at-start', 'min-x=', 'max-x=', 'min-y=', 'max-y=',
664-
'no-shading-avoid-outline', 'shading-darkest=', 'shading-lightest=', 'stroke-all', 'no-stroke-all', 'gcode-pause', 'dump-options', 'tab=', 'extract-color=', 'sort', 'no-sort', 'simulation', 'no-simulation', 'tool-offset=', 'overcut=', 'boolean-shading-crosshatch=' ], )
665+
'no-shading-avoid-outline', 'shading-darkest=', 'shading-lightest=', 'stroke-all', 'no-stroke-all', 'gcode-pause', 'dump-options', 'tab=', 'extract-color=', 'sort', 'no-sort', 'simulation', 'no-simulation', 'tool-offset=', 'overcut=',
666+
'boolean-shading-crosshatch=', 'boolean-extract-color=', 'boolean-sort=' ], )
665667

666668
if len(args) + len(opts) == 0:
667669
raise getopt.GetoptError("invalid commandline")
@@ -771,6 +773,10 @@ def help():
771773
shader.angle = float(arg)
772774
elif opt == '--boolean-shading-crosshatch':
773775
shader.crossHatch = int(arg) != 0
776+
elif opt == '--boolean-extract-color':
777+
booleanExtractColor = int(arg) != 0
778+
elif opt == '--boolean-sort':
779+
sort = int(arg) != 0
774780
elif opt in ('-X', '--shading-crosshatch'):
775781
shader.crossHatch = True
776782
elif opt == '--no-shading-crosshatch':
@@ -792,9 +798,9 @@ def help():
792798
elif opt in ('-c', '--config-file'):
793799
configOpts = getConfigOpts(arg)
794800
opts = opts[:i+1] + configOpts + opts[i+1:]
795-
elif opt in ('-o', '--optimization-timeout'):
796-
optimizationTimeOut = float(arg)
797-
if optimizationTimeOut > 0:
801+
elif opt in ('-o', '--optimization-time'):
802+
optimizationTime = float(arg)
803+
if optimizationTime > 0:
798804
sort = False
799805
elif opt in ('-h', '--help'):
800806
help()
@@ -809,7 +815,7 @@ def help():
809815
extractColor = parser.rgbFromColor(arg)
810816
elif opt in ('d', '--sort'):
811817
sortPaths = True
812-
optimizationTimeOut = 0
818+
optimizationTime = 0
813819
elif opt == '--no-sort':
814820
sortPaths = False
815821
elif opt in ('U', '--simulation'):
@@ -881,7 +887,7 @@ def help():
881887
print('shading-angle=%g' % (shader.angle))
882888
print('shading-crosshatch' if shader.crossHatch else 'no-shading-crosshatch')
883889
print('stroke-all' if strokeAll else 'no-stroke-all')
884-
print('optimization-timeout=%g' % (optimizationTimeOut))
890+
print('optimization-time=%g' % (optimizationTime))
885891
print('sort' if sortPaths else 'no-sort')
886892
print('pause-at-start' if pauseAtStart else 'no-pause-at-start')
887893
print('extract-color=all' if extractColor is None else 'extract-color=rgb(%.3f,%.3f,%.3f)' % tuple(extractColor))
@@ -893,8 +899,11 @@ def help():
893899

894900
if toolMode == 'cut':
895901
shader.unshadedThreshold = 0
902+
optimizationTime = 0
903+
sortPaths = True
896904
elif toolMode == 'draw':
897905
toolOffset = 0.
906+
sortPaths = False
898907

899908
variables = {'lift':plotter.liftDeltaZ, 'work':plotter.workZ, 'safe':plotter.safeDeltaZ, 'left':plotter.xyMin[0],
900909
'bottom':plotter.xyMin[1]}
@@ -944,9 +953,9 @@ def help():
944953
for pen in penData:
945954
penData[pen] = op.processPath(penData[pen])
946955

947-
if optimizationTimeOut > 0.:
956+
if optimizationTime > 0.:
948957
for pen in penData:
949-
penData[pen] = anneal.optimize(penData[pen], timeout=optimizationTimeOut)
958+
penData[pen] = anneal.optimize(penData[pen], timeout=optimizationTime/2.)
950959
penData = removePenBob(penData)
951960

952961
if sortPaths:

0 commit comments

Comments
 (0)