述学 发表于 2023-12-30 10:42:29

自动向外偏移一定距离的代码怎么写

图形由L和SPL命令产生的,想达到向外偏移一定距离,不删除原来的图形,自动连成封闭图形,新产生的图形在现在的层。

如下图所示:

liuhe 发表于 2023-12-30 11:11:27

原来的是不是封闭图形?

述学 发表于 2023-12-30 11:12:19

liuhe 发表于 2023-12-30 11:11
原来的是不是封闭图形?

不是封闭图形,一根一根画的

liuhe 发表于 2023-12-30 11:27:50

述学 发表于 2023-12-30 11:12
不是封闭图形,一根一根画的
那有点麻烦了,建议你先把图形封闭,再用vla- offsent      偏移

hhh454 发表于 2023-12-31 19:48:31

我的办法,先把spl转为pl,pe命令实现,然后把原始图形闭合,用offset命令偏移图形,offset里面有个选项,可以改变偏移后的图层为当前层,


命令: o OFFSET
当前设置: 删除源=否图层=源OFFSETGAPTYPE=0
指定偏移距离或 [通过(T)/删除(E)/图层(L)] <通过>: l
输入偏移对象的图层选项 [当前(C)/源(S)] <源>: c

述学 发表于 2023-12-31 21:45:13

hhh454 发表于 2023-12-31 19:48
我的办法,先把spl转为pl,pe命令实现,然后把原始图形闭合,用offset命令偏移图形,offset里面有个选项, ...

主要是offset命令后向外偏移的图形角度是圆角,不是像向内偏移的角。加一步先闭合也是可以的呢。我手动操作的是用offset每条线偏移出去,再用F命令两两闭合,就是有点繁琐。

陈鱼儿 发表于 2024-1-9 15:20:33

不难画出来,pe合并成多段线,然后偏移一下你指定得距离,
ex分解一下就好了,想用代码实现的话,还得看你是往哪个方向偏移

qazxswk 发表于 2024-1-9 17:40:46

(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))

述学 发表于 2024-1-10 20:53:38

qazxswk 发表于 2024-1-9 17:40
(defun c:11(/ ss)
(if (not dist0) (setq dist0 30))
(setq dist (getreal (strcat "\n请输入偏移距离") ...

向外偏移是圆角,这个问题可以解决不?需要像向内的直角那样的角。

qazxswk 发表于 2024-1-10 21:12:10

(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
查看完整版本: 自动向外偏移一定距离的代码怎么写