Geo Pattern.mac

From Macros Wiki
Jump to: navigation, search

! 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"