Geo Pattern
From Macros Wiki
! create a contour and then copy it | |
! across a rectangular grid | |
! | |
! show use of geometry selection lists | |
a1$ = "This macro will create a shape and" | |
a2$ = "then copy it across a rectangular grid" | |
a3$ = "It will use 2 dialogs, one for the shape" | |
a4$ = "data and another for the pattern data" | |
a5$ = "After creating the geomtry, it will select" | |
a6$ = "the individual parts, rows and columns" | |
message "%a1$\n%a2$\n\n%a3$\n%a4$\n\n%a5$\n%a6$" | |
dialog "GeoPattern_Part.dlg" | |
:get_repeats | |
dialog "GeoPattern_Repeats.dlg" | |
! data from Part dialog | |
! l1 = long length | |
! l2 = short length | |
! h1 = long height | |
! h2 = short height | |
! r1 = large fillet | |
! r2 = small fillet | |
! data from Repeats dialog | |
! xs = x start | |
! ys = y start | |
! dx = x spacing | |
! dy = y spacing | |
! nx = number in x | |
! ny = number in y | |
if nx<2 then message "Invalid number of parts in X (2 to 5)" | |
if nx<2 then goto get_repeats | |
if nx>5 then message "Invalid number of parts in X (2 to 5)" | |
if nx>5 then goto get_repeats | |
if ny<2 then message "Invalid number of parts in Y (2 to 4)" | |
if ny<2 then goto get_repeats | |
if ny>4 then message "Invalid number of parts in Y (2 to 4)" | |
if ny>4 then goto get_repeats | |
! start a new part and set the stock size | |
! --------------------------------------- | |
new_part "Example.vnc" | |
set_part_data mdd_name, "VMill3a" ! 3 axis vertical mill | |
set_part_data units, 1 ! inches | |
! set the stock size | |
! ------------------ | |
set_part_data stock_x1, xs | |
set_part_data stock_y1, ys | |
set_part_data stock_z1, 0 | |
set_part_data stock_x2, xs+dx*(nx-1)+l1 | |
set_part_data stock_y2, ys+dy*(ny-1)+h1 | |
set_part_data stock_z2, 1 | |
set_view top | |
zoom_view 0 | |
message "Create one shape, starting at X 0, Y 0", "Geo pattern", 1 | |
contour [ | |
start r1, 0 | |
line l1-r1, 0 | |
arc l1-r1, r1, l1, r1, ccw | |
line l1, h2-r2 | |
arc l1-r2, h2-r2, l1-r2, h2, ccw | |
line l2+r2, h2 | |
arc l2+r2, h2+r2, l2, h2+r2, cw | |
line l2, h1-r2 | |
arc l2-r2, h1-r2, l2-r2, h1, ccw | |
line r1, h1 | |
arc r1, h1-r1, 0, h1-r1, ccw | |
line 0, r1 | |
arc r1, r1, r1, 0, ccw | |
] | |
iref=ContourRef | ! reference number for the contour |
clear_select | ! make sure nothing is selected |
select_shape iref | ! select the shape we just created |
get_selection_list 1 | ! save list of currently selected geometry |
redraw | |
message "Move to start position", "Geo pattern", 1 | |
translate_geo xs,ys | ! translate it to the start position |
redraw | |
message "Copy Horizontally", "Geo pattern", 1 | |
translate_geo dx,0,0,(nx-1) ! translate and copy | |
redraw | |
message "Copy Vertically", "Geo pattern", 1 | |
! after the translate and copy | |
! just the copies will be selected | |
get_selection_list 2 | ! save list of currently selected geometry |
select_shape iref | ! reselect the original shape |
translate_geo 0,dy,0,(ny-1) | ! translate the whole row in Y |
redraw | |
get_selection_list 3 | ! save list of currently selected geometry |
message "Select the original shape", "Geo pattern", 1 | |
set_selection_list 1 | |
redraw | |
message "Select the copies in X", "Geo pattern", 1 | |
set_selection_list 2 | |
redraw | |
message "Select the copies in Y", "Geo pattern", 1 | |
set_selection_list 3 | |
redraw | |
! using the set_selection list command with a single value | |
! means that the geometry in the list will be the only | |
! selected geometry. Adding a 1 to the command, suppresses the | |
! deselect all, so we can select geometry from multiple lists | |
message "Select the original shape and the copies in X", "Geo pattern", 1 | |
set_selection_list 1 | |
set_selection_list 2, 1 | |
redraw | |
message "Add the copies in Y", "Geo pattern", 1 | |
set_selection_list 3, 1 | |
redraw | |
message "Finished" |