Modify op path2: Difference between revisions
From Macros Wiki
Jump to navigationJump to search
No edit summary |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 53: | Line 53: | ||
|- | |- | ||
| | | | ||
| | |} | ||
: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 | |||
| | {| | ||
| | | | ||
|- | |- | ||
Line 69: | Line 69: | ||
|- | |- | ||
| | | | ||
| | |} | ||
:add_path_feat 1, 0, ifeat ! copy this feat to the new path | |||
| | {| | ||
| | | | ||
| | |} | ||
:continue | |||
| | {| | ||
| | | | ||
|- | |- | ||
|<nowiki>:</nowiki>edit_line | |<nowiki>:</nowiki>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 | |||
| | {| | ||
| | | | ||
|- | |- | ||
Line 125: | Line 125: | ||
|- | |- | ||
| | | | ||
| | |} | ||
: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 | |||
| | {| | ||
| | | | ||
|- | |- | ||
Line 200: | Line 200: | ||
| | | | ||
|- | |- | ||
|copy_path 1, 0 | |copy_path 1, 0 ! copy the new path to path zero | ||
|- | |- | ||
|set_op_path opnum | |set_op_path opnum ! set the op path to use path zero | ||
|- | |- | ||
|delete_path_list | |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 |