明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1412|回复: 11

多段线向内或向外偏移后,角点自动画出斜线

[复制链接]
发表于 2020-12-15 08:48 | 显示全部楼层 |阅读模式
2明经币
多段线向内或向外偏移后,角点自动画出斜线

类似这样的,蓝色的线是多段线,红色的线是偏移之后的线,需要角点的斜线自动出来。

有个参考的代码。

附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(defun c:SGX() (setq cmd (getvar "cmdecho")) (setq osm (getvar "osmode")) (setvar "cmdecho" 0) (setvar "osmode" 0) (command "_undo" "be") (while (progn (princ "\需要选取单根POLYLINE作为截面线") (setq ssa (ssget ":S" '((0 . "lwpolyline")(70 . 1)))) ) (If (= (setq pyjl (getreal "\n偏移距离=")) nil) (setq pyjl 1.0) ) ...
发表于 2020-12-15 08:48 | 显示全部楼层
yyz123121 发表于 2020-12-15 21:49
你好,测试了下,如果输入数值,那么就直接向内偏移,如果点外侧,那就没法输入数值。可以帮忙优化一下吗 ...

(defun c:SGX()
    (setq cmd (getvar "cmdecho"))
    (setq osm (getvar "osmode"))
    (setvar "cmdecho" 0)
    (setvar "osmode" 0)
    (command "_undo" "be")
    (while (progn
               (princ "\需要选取单根POLYLINE作为截面线")
               (setq ssa (ssget ":S" '((0 . "lwpolyline")(70 . 1))))
           )
         (If (= (setq pyjl (getreal "\n偏移距离<1.0>=")) nil)
             (setq pyjl 1.0)
         )
         (If (setq pt1 (getpoint "\n点选偏移方向(向内侧)"))
             (progn
                 (setq ent (ssname ssa 0))
                 (setq dxf (entget ent))
                 (setq pts (mapcar 'cdr (vl-remove-if-not '(lambda(a)(= (car a) 10)) dxf)))
                 (command "_offset" pyjl ent pt1 "")
                 (command "_chprop" (entlast) "" "c" 1 "")
                 (setq pts1 (mapcar 'cdr (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget (entlast)))))
                 (mapcar '(lambda(a b)
                              (command "_line" a b "" "_chprop" (entlast) "" "c" 1 "")
                          )
                          pts
                          pts1
                 )
             )
         )
    )
    (command "_undo" "e")
    (setvar "osmode" osm)
    (setvar "cmdecho" cmd)
    (princ)
)
回复

使用道具 举报

发表于 2020-12-15 14:13 | 显示全部楼层

(defun c:SGX()
    (setq cmd (getvar "cmdecho"))
    (setq osm (getvar "osmode"))
    (setvar "cmdecho" 0)
    (setvar "osmode" 0)
    (command "_undo" "be")
    (setq cd (getvar "offsetdist"))
    (while (progn
               (princ "\需要选取单根POLYLINE作为截面线")
               (setq ssa (ssget ":S" '((0 . "lwpolyline")(70 . 1))))
           )
         (setq ent (ssname ssa 0))
         (setq dxf (entget ent))
         (setq pts (mapcar 'cdr (vl-remove-if-not '(lambda(a)(= (car a) 10)) dxf)))
         (setq pt1 (getpoint "\n点选偏移方向(向内侧)"))
         (setq cd (distance pt1 (vlax-curve-getclosestpointto ent pt1)))
         (setvar "offsetdist" cd)
         (command "_offset" "" ent pt1 "")
         (command "_chprop" (entlast) "" "c" 1 "")
         (setq pts1 (mapcar 'cdr (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget (entlast)))))
         (mapcar '(lambda(a b)
                      (command "_line" a b "" "_chprop" (entlast) "" "c" 1 "")
                  )
                  pts
                  pts1
        )
    )
    (command "_undo" "e")
    (setvar "osmode" osm)
    (setvar "cmdecho" cmd)
    (princ)
)
回复

使用道具 举报

 楼主| 发表于 2020-12-15 21:49 来自手机 | 显示全部楼层
yshf 发表于 2020-12-15 14:13
(defun c:SGX()
    (setq cmd (getvar "cmdecho"))
    (setq osm (getvar "osmode"))

你好,测试了下,如果输入数值,那么就直接向内偏移,如果点外侧,那就没法输入数值。可以帮忙优化一下吗,改成输入命令后,让输入数值,然后选择多段线,然后点击内侧或外侧。
回复

使用道具 举报

 楼主| 发表于 2020-12-16 10:44 | 显示全部楼层
yshf 发表于 2020-12-15 22:04
(defun c:SGX()
    (setq cmd (getvar "cmdecho"))
    (setq osm (getvar "osmode"))

谢谢,就是这个效果,非常完美。
回复

使用道具 举报

发表于 2021-6-26 22:06 | 显示全部楼层
yshf 发表于 2020-12-15 08:48
(defun c:SGX()
    (setq cmd (getvar "cmdecho"))
    (setq osm (getvar "osmode"))

谢谢长老的回帖,我感觉可以用来参考画结构图的加腋板
回复

使用道具 举报

发表于 2021-7-14 09:19 | 显示全部楼层
yshf 发表于 2020-12-15 08:48
(defun c:SGX()
    (setq cmd (getvar "cmdecho"))
    (setq osm (getvar "osmode"))

版主,你这个只适合多段线,
回复

使用道具 举报

发表于 2021-7-14 09:22 | 显示全部楼层
yshf 发表于 2020-12-15 08:48
(defun c:SGX()
    (setq cmd (getvar "cmdecho"))
    (setq osm (getvar "osmode"))

如果是线段或者其他图形,很难做出来这个效果
回复

使用道具 举报

发表于 2021-7-15 17:22 来自手机 | 显示全部楼层
很好人实用
回复

使用道具 举报

发表于 2021-11-8 10:04 | 显示全部楼层
每次使用后捕捉都全部取消了是怎么回事呢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 14:04 , Processed in 0.300980 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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