明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 962|回复: 8

[提问] 将多段线偏移成指定宽度的填充

[复制链接]
发表于 2022-11-25 13:28:39 | 显示全部楼层 |阅读模式
50明经币
求这样一个插件:将多段线偏移成指定宽度的填充



执行命令后,输入一个宽度值,选择目标线(多段线或直线),
①若直接确定→则以目标线为中心生成指定宽度的填充(生成后移除填充边界目标线)
②若指定方向→则按指定方向生成填充。

最佳答案

查看完整内容

(defun c:tt5 (/ d l l1 l2 l3 obj obj1 pt);;偏移填充->删除边线和原对象 (setvar "cmdecho" 0)(command "undo" "be") (setq d (getdist "\n指定偏移距离:") l (car (entsel "\n请选择对象:")) obj (vlax-ename->vla-object l) pt (getpoint"\n偏移点 或 [居中(空格)]:")) (if pt (progn (command "offset" d l "non" pt "") (setq obj1 (vlax-ename->vla-object (setq l1 (entlast))))) (progn (vla-Offset obj (* d 0.5) ...
发表于 2022-11-25 13:28:40 | 显示全部楼层
(defun c:tt5 (/ d l l1 l2 l3 obj obj1 pt);;偏移填充->删除边线和原对象
        (setvar "cmdecho" 0)(command "undo" "be")
        (setq d (getdist "\n指定偏移距离:") l (car (entsel "\n请选择对象:")) obj (vlax-ename->vla-object l) pt (getpoint"\n偏移点 或 [居中(空格)]:"))
        (if pt (progn (command "offset" d l "non" pt "") (setq obj1 (vlax-ename->vla-object (setq l1 (entlast))))) (progn (vla-Offset obj (* d 0.5))(setq obj1 (vlax-ename->vla-object (setq l1 (entlast))))   (vla-Offset obj (* d -0.5)) (vla-Delete obj) (setq obj (vlax-ename->vla-object (setq l (entlast))))))
        (entmake (list '(0 . "LINE") (cons 10 (vlax-curve-getEndPoint obj)) (cons 11 (vlax-curve-getEndPoint obj1)))) (setq l2 (entlast))
        (entmake (list '(0 . "LINE") (cons 10 (vlax-curve-getstartPoint obj)) (cons 11 (vlax-curve-getstartPoint obj1))))         (setq l3 (entlast))
        (command "hatch" "p" "solid"  l l1 l2 l3 "" "ERASE" l l1 l2 l3 "")       
        (command "undo" "e")(setvar "cmdecho" 1)
        (princ)       
)

点评

完美实现了功能!感谢!!!  发表于 2022-11-29 15:47

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
xj6019 + 1 + 50 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2022-11-29 15:56:16 | 显示全部楼层
start4444 发表于 2022-11-25 13:28
(defun c:tt5 (/ d l l1 l2 l3 obj obj1 pt);;偏移填充->删除边线和原对象
        (setvar "cmdecho" 0)(command ...

能否改一版生成填充后,保留原有 目标线 的插件呢!非常感谢!

点评

(vla-Delete obj) 把这一句去掉  发表于 2022-11-29 17:16
回复

使用道具 举报

 楼主| 发表于 2022-11-29 18:52:31 | 显示全部楼层
start4444 发表于 2022-11-25 13:28
(defun c:tt5 (/ d l l1 l2 l3 obj obj1 pt);;偏移填充->删除边线和原对象
        (setvar "cmdecho" 0)(command ...

奇怪了,我删除了这一句以后,被偏移对象还是消失不见
回复

使用道具 举报

发表于 2022-11-29 21:01:13 | 显示全部楼层
能批量就更好了

评分

参与人数 1明经币 +1 收起 理由
cheefeel + 1

查看全部评分

回复

使用道具 举报

发表于 2022-11-29 21:11:20 | 显示全部楼层
cheefeel 发表于 2022-11-29 18:52
奇怪了,我删除了这一句以后,被偏移对象还是消失不见

再换一下这句
(command "hatch" "p" "solid"  (setq ss (ssadd) ss (ssadd l ss) ss (ssadd l1 ss) ss (ssadd l2 ss) ss (ssadd l3 ss)) "" "ERASE" (if pt (ssdel l ss) ss) "")

评分

参与人数 1明经币 +1 收起 理由
cheefeel + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2022-11-30 12:01:19 | 显示全部楼层
start4444 发表于 2022-11-29 21:11
再换一下这句
(command "hatch" "p" "solid"  (setq ss (ssadd) ss (ssadd l ss) ss (ssadd l1 ss) ss ( ...

确实可以了!
最后还有一个小问题就是这个偏移没有继承目标对象的图层。
就是说偏移出来的填充其实是在当前图层创建的,而不是继承目标对象的图层,这个能改一下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 02:57 , Processed in 0.157146 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表