Geo Pattern

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"