- 积分
- 3449
- 明经币
- 个
- 注册时间
- 2010-9-4
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
这个程序好像是选择一个对象偏移并将新生成的对象放到当前层.
;|
说明:偏移对象并将偏移后的对象设置为当前图层.
可选择是否批量偏移,如果不需要选择,可以注释掉 (setq mor (getstring "\n空格为单个偏移,其他任意字符为多个偏移:")) 行
批量偏移时按空格结束偏移.
偏移后统一修改对象图层
|;
(defun c:OC ( / oldOSMODE di_key di o mor po lay ss_tmp )
(vl-load-com)
(setvar "cmdecho" 0)
(command "_undo" "be")
(setq oldOSMODE (getvar "OSMODE"))
;start部分结束
(initget "a")
(setq di_key (getreal (strcat "\n输入偏移距离,输入a为" (vl-princ-to-string (setq di (getvar "OFFSETDIST"))) ",空格为点选位置:")))
(cond ((not di_key);输入空格
(setq di ""))
((equal "a" di_key);输入为a,不修改di
)
(t ;如果输入了偏移距离,则将di的值设为其值
(setq di di_key)
)
)
(setq o (car (entsel "\n选择需要偏移的对象")));由于offset不适用于选择集,修改为entsel
(setq mor (getstring "\n空格为单个偏移,其他任意字符为多个偏移:"))
(setq po (getpoint "\n选择偏移的点"))
(setq LAY (getvar "CLAYER"))
(setq ss_tmp (ssadd))
(if (/= "" mor)
(progn
(COMMAND "OFFSET" di o po "")
(while (setq po (getpoint "\n选择下一个偏移的点"))
(ssadd (entlast) ss_tmp)
(COMMAND "OFFSET" di (setq o (entlast)) po "")
)
)
(COMMAND "OFFSET" di o po "")
)
(ssadd (entlast) ss_tmp)
(COMMAND "CHPROP" ss_tmp "" "LA" lay "LT" "bylayer" "C" "bylayer" "")
;end部分开始
(setvar "OSMODE" oldOSMODE)
(command "_undo" "e")
(setvar "cmdecho" 1)
)
(princ)
|
|