Modify op path2: Difference between revisions

From Macros Wiki
Jump to navigationJump to search
ConnerO (talk | contribs)
No edit summary
ConnerO (talk | contribs)
No edit summary
 
Line 70: Line 70:
| 
| 
|}
|}
:add_path_feat 1, 0, ifeat               ! copy this feat to the new path
:add_path_feat 1, 0, ifeat                             ! copy this feat to the new path
{|
{|
| 
| 
Line 108: Line 108:
| 
| 
|}
|}
:add_path_line 1, x1, y1, z1 ||! mid way along the feature
:add_path_line 1, x1, y1, z1                         ! mid way along the feature


:add_path_line 1, x2, y2, z2 ||! out by the given distance
:add_path_line 1, x2, y2, z2                         ! out by the given distance


:add_path_line 1, x1, y1, z1 ||! back to mid point
:add_path_line 1, x1, y1, z1                         ! back to mid point


:add_path_line 1, xe, ye, ze ||! end of original features
:add_path_line 1, xe, ye, ze                         ! end of original features
{|
{|
| 
| 
Line 138: Line 138:
| 
| 
|}
|}
:ang1 = ang1 + (ang3 / 2)  ||   ! angle mid way around arc
:ang1 = ang1 + (ang3 / 2)                               ! angle mid way around arc


:if ang1>360 then ang1 = ang1 - 360
:if ang1>360 then ang1 = ang1 - 360
Line 176: Line 176:
| 
| 
|}
|}
:add_path_line 1, x2, y2, z2  ||! out by the given distance
:add_path_line 1, x2, y2, z2                          ! out by the given distance


:add_path_line 1, x1, y1, z1  ||! back to mid point
:add_path_line 1, x1, y1, z1                          ! back to mid point
{|
{|
| 
| 
Line 200: Line 200:
| 
| 
|-
|-
|copy_path 1, 0      ||! copy the new path to path zero
|copy_path 1, 0                                                      ! copy the new path to path zero
|-
|-
|set_op_path opnum   ||! set the op path to use path zero
|set_op_path opnum                                          ! set the op path to use path zero
|-
|-
|delete_path_list   ||! delete the list of paths
|delete_path_list                                                ! delete the list of paths
|-
|-
| 
| 

Latest revision as of 20:29, 27 July 2010

args opnum, dist
local numfeat, ifeat, itype
local xs, ys, zs, xe, ye, ze, xc, yc, zc, rad, idir
local x1, y1, z1, x2, y2, z2, ang1, ang2, ang3
 
 
! get a copy of the current op path
! ---------------------------------
 
get_op_num_feat opnum, numfeat ! get the number of features
if numfeat<1 then goto done ! make sure there is at least 1
 
define_path_list 1 ! create path list
 
select_op_path_type main ! select the main path
get_op_path opnum get a copy of the op path
! this will be path zero
 
get_op_path_start opnum, xs, ys, zs
create_path 1, xs, ys, zs ! start a new path
 
 
! divide it up
! ------------
 
for ifeat=1 to numfeat
 
get_op_feat_type opnum, ifeat, itype
progress_set (ifeat / numfeat)
 
if itype = feat_type_line then goto edit_line
if itype = feat_type_arc then goto edit_arc
 
  ! not a line or arc, just use this feature as it is
 
add_path_feat 1, 0, ifeat                             ! copy this feat to the new path
 
continue
 
:edit_line
get_op_feat_start opnum, ifeat, xs, ys, zs
get_op_feat_end opnum, ifeat, xe, ye, ze
get_op_feat_angles opnum, ifeat, ang1, ang2, ang3
 
x1 = xs + ((xe - xs) / 2)
y1 = ys + ((ye - ys) / 2)
z1 = zs + ((ze - zs) / 2)
 
ang2 = ang1 + 90
 
x2 = x1 + dist * cos(ang2)
y2 = y1 + dist * sin(ang2)
z2 = z1
 
add_path_line 1, x1, y1, z1                         ! mid way along the feature
add_path_line 1, x2, y2, z2                         ! out by the given distance
add_path_line 1, x1, y1, z1                         ! back to mid point
add_path_line 1, xe, ye, ze                         ! end of original features
 
continue
 
:edit_arc
 
get_op_feat_start opnum, ifeat, xs, ys, zs
get_op_feat_end opnum, ifeat, xe, ye, ze
get_op_feat_angles opnum, ifeat, ang1, ang2, ang3
get_op_feat_arc_data opnum, ifeat, rad, idir, xc, yc, zc
if idir=1 then ang3 = -ang3
 
ang1 = ang1 + (ang3 / 2)                             ! angle mid way around arc
if ang1>360 then ang1 = ang1 - 360
if ang1<0 then ang1 = ang1 + 360
 
ang2 = ang1
if idir=0 then ang2 = ang1 + 180
if ang2 > 360 then ang2 = ang2 - 360
 
x1 = xc + rad * cos(ang1)
y1 = yc + rad * sin(ang1)
z1 = zs + ((ze - zs) / 2)
 
x2 = x1 + dist * cos(ang2)
y2 = y1 + dist * sin(ang2)
z2 = z1
 
if idir=1 then add_path_arc 1, x1, y1, z1, xc, yc, zc, rad, cw
if idir#1 then add_path_arc 1, x1, y1, z1, xc, yc, zc, rad, ccw
 
add_path_line 1, x2, y2, z2                         ! out by the given distance
add_path_line 1, x1, y1, z1                         ! back to mid point
 
if idir=1 then add_path_arc 1, xe, ye, ze, xc, yc, zc, rad, cw
if idir#1 then add_path_arc 1, xe, ye, ze, xc, yc, zc, rad, ccw
 
next ifeat
 
 
! end of path
! -----------
 
copy_path 1, 0                                                 ! copy the new path to path zero
set_op_path opnum                                          ! set the op path to use path zero
delete_path_list                                                ! delete the list of paths
 
:done