自动向外偏移一定距离的代码怎么写
图形由L和SPL命令产生的,想达到向外偏移一定距离,不删除原来的图形,自动连成封闭图形,新产生的图形在现在的层。如下图所示:
原来的是不是封闭图形? liuhe 发表于 2023-12-30 11:11
原来的是不是封闭图形?
不是封闭图形,一根一根画的 述学 发表于 2023-12-30 11:12
不是封闭图形,一根一根画的
那有点麻烦了,建议你先把图形封闭,再用vla- offsent 偏移 我的办法,先把spl转为pl,pe命令实现,然后把原始图形闭合,用offset命令偏移图形,offset里面有个选项,可以改变偏移后的图层为当前层,
命令: o OFFSET
当前设置: 删除源=否图层=源OFFSETGAPTYPE=0
指定偏移距离或 [通过(T)/删除(E)/图层(L)] <通过>: l
输入偏移对象的图层选项 [当前(C)/源(S)] <源>: c
hhh454 发表于 2023-12-31 19:48
我的办法,先把spl转为pl,pe命令实现,然后把原始图形闭合,用offset命令偏移图形,offset里面有个选项, ...
主要是offset命令后向外偏移的图形角度是圆角,不是像向内偏移的角。加一步先闭合也是可以的呢。我手动操作的是用offset每条线偏移出去,再用F命令两两闭合,就是有点繁琐。
不难画出来,pe合并成多段线,然后偏移一下你指定得距离,
ex分解一下就好了,想用代码实现的话,还得看你是往哪个方向偏移
(defun c:11(/ ss)
(if (not dist0) (setq dist0 30))
(setq dist (getreal (strcat "\n请输入偏移距离<初始值:"(rtos dist0)">")))
(if (null dist)(setq dist dist0)(setq dist0 dist))
(setq ss (ssget ":s" '((0 . "CIRCLE,ARC,*LINE"))))
(vl-cmdf "peditaccept" 1 "pedit" "m" ss "" "j" "" "" "peditaccept" 0)
(vla-offset (vlax-ename->vla-object (entlast)) dist)
(princ)) qazxswk 发表于 2024-1-9 17:40
(defun c:11(/ ss)
(if (not dist0) (setq dist0 30))
(setq dist (getreal (strcat "\n请输入偏移距离") ...
向外偏移是圆角,这个问题可以解决不?需要像向内的直角那样的角。 (defun c:11(/ ss)
(if (not dist0) (setq dist0 30))
(setq dist (getreal (strcat "\n请输入偏移距离<初始值:"(rtos dist0)">")))
(setvar "filletrad" (getreal(strcat "\n指定圆角半径:")))
(if (null dist)(setq dist dist0)(setq dist0 dist))
(if(setq ss (ssget ":s" '((0 . "CIRCLE,ARC,*LINE"))))
(progn
(vl-cmdf "peditaccept" 1 "pedit" "m" ss "" "j" "" "" "peditaccept" 0)
(vla-offset (vlax-ename->vla-object (entlast)) dist)
(vl-cmdf "fillet" "p" (entlast))
))
(princ))
页:
[1]
2