Geo Pattern.mac
! 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"