xj6019 发表于 2020-9-22 19:34:00

折腾一下午 一个点击封闭区域向内偏移的代码 东拼西凑来的 效果very good

本帖最后由 xj6019 于 2020-9-22 19:59 编辑

这半天把我给憋的,各个地方找,各个地方凑呀,里面差不多从四五个地方拼凑来的,总算没白忙活。。效果很理想。。
;;封闭区域内点击向内偏移的函数,封闭区域可以是圆,多段线,零散直线等都可以,必须是闭合区域才行。
;;代码拼凑来的,也可能不一定合理哦,反正多次测试能用了。里面应该还有几句没有用的,反正也不影响,待着去吧。
;;循环好像有点问题,感觉别扭的话就删掉循环。
;;图层跟随当前图层
(defun c:NM()
(vl-load-com)
;错误恢复捕捉
(defun *MYERR* (MSG)
(setvar "CMDECHO" CMD_OLD)
(setvar "OSMODE" OS_OLD)
(setq *ERROR* *OLDERR*)
(if (= MSG "完美退出。谢谢使用。")
(princ (strcat "\\n>>>" MSG))
(princ "\\n>>>虽然中途退出了,对象捕捉已经被恢复。")
)
(princ)
)
(setq *OLDERR* *ERROR*
*ERROR**MYERR*
OS_OLD   (getvar "OSMODE")
CMD_OLD(getvar "CMDECHO")
)
(setvar "osmode" 0) 
(if (not ssj) (setq ssj (getstring "\n请输入偏移量:")) (setq ssj (if (/= "" (setq ss2k (getstring (strcat "\n请输入偏移量<" ssj ">:")))) ss2k ssj)))
(setq a t)
(while a
(setq pt (getpoint "\n闭合范围里取点(退出ESC):"))      
    (command "bpoly" pt "")
    (setq ssaa (entlast))
(command "select" ssaa"")
(setq ss (ssget "p" '((0 . "LWPOLYLINE,region,circle"))))
(setq len (sslength ss))
(setq n 0)
(repeat len
(setq ent (ssname ss n))
(setq obj (vlax-ename->vla-object ent))
   (vla-GetBoundingBox obj 'pta 'ptb)
(command "offset" ssjSS PT "")
(setq n (+ 1 n))
)
(COMMAND "_.erase"ss "");删除生成的边界线!
)
(princ);_关闭程序返回
);_程序结束












xj6019 发表于 2020-9-23 07:42:29

本帖最后由 xj6019 于 2020-12-11 10:38 编辑

删掉了不少,现在应该没啥多余的了吧,循环也改了改,行了,感觉也就这么着了吧。。




(defun c:NM()
;错误恢复捕捉
(defun *MYERR* (MSG)
(setvar "CMDECHO" CMD_OLD)
(setvar "OSMODE" OS_OLD)
(setq *ERROR* *OLDERR*)
(if (= MSG "完美退出。谢谢使用。")
(princ (strcat "\\n>>>" MSG))
(princ "\\n>>>虽然中途退出了,对象捕捉已经被恢复。")
)
(princ)
)
(setq *OLDERR* *ERROR*
*ERROR**MYERR*
OS_OLD   (getvar "OSMODE")
CMD_OLD(getvar "CMDECHO")
)
(setvar "osmode" 0) 
(if (not ssj) (setq ssj (getstring "\n请输入偏移量:")) (setq ssj (if (/= "" (setq ss2k (getstring (strcat "\n请输入偏移量<" ssj ">:")))) ss2k ssj)))
(while
(setq pt (getpoint "\n闭合范围里取点(退出ESC):"))
   (command "bpoly" pt "")
   (setq ssaa (entlast))
   (command "offset" ssj ssaa PT "")
   (COMMAND "_.erase" ssaa "")                ;删除生成的边界线!
)
(setvar"osmode" OS_OLD)
(princ);_关闭程序返回);_程序结束
)





xvjiex 发表于 2020-9-23 09:26:16

(while
(setq pt (getpoint "\n闭合范围里取点(退出ESC):"))
   (command "bpoly" pt "")
   (setq ssaa (entlast))
   (command "offset" ssj ssaa PT "")
   (COMMAND "_.erase" ssaa "")                ;删除生成的边界线!
)

start4444 发表于 2020-9-23 00:08:12

走了不少弯路,但最终还是到达了目的地

xj6019 发表于 2020-9-23 07:21:41

start4444 发表于 2020-9-23 00:08
走了不少弯路,但最终还是到达了目的地

弯路也是电脑走,最多也就相当于电脑多算一遍1+1的程度,不碍事的:lol:lol

999999 发表于 2020-9-23 08:08:55

历害了哇,可以自己拼凑起来,,要是不怎么懂的根本放大面前都接不起来

xvjiex 发表于 2020-9-23 09:18:00

恭喜!进步很快啊!

xj6019 发表于 2020-9-23 10:31:13

xvjiex 发表于 2020-9-23 09:26
(while
(setq pt (getpoint "\n闭合范围里取点(退出ESC):"))
   (command "bpoly" pt "")


不错,又可以删掉点代码了,谢谢。

xzklk 发表于 2020-9-24 18:09:11

学习了,谢谢分享

hhh454 发表于 2020-9-24 20:09:31

结尾加个恢复捕捉
页: [1] 2 3
查看完整版本: 折腾一下午 一个点击封闭区域向内偏移的代码 东拼西凑来的 效果very good