明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: start4444

[源码] 批量倒角-可调圆角半径【多对多】-批量倒圆角/斜角合并版-(多段线/直线 )【 多对一】

    [复制链接]
发表于 2021-1-28 08:59:25 | 显示全部楼层
谢谢楼主分享!
发表于 2021-1-28 13:46:49 | 显示全部楼层
本帖最后由 sn2200 于 2021-1-28 13:50 编辑

命令可用,但命令行文字提示为乱码“妗嗛妗嗛
发表于 2021-1-28 17:55:05 | 显示全部楼层
顶起来,,好贴
发表于 2021-1-29 08:46:28 | 显示全部楼层
能否给上个动图 不太会用这个命令呢
发表于 2021-1-29 09:42:54 | 显示全部楼层
edsion24 发表于 2021-1-29 08:46
能否给上个动图 不太会用这个命令呢

论坛还没修复  图片和文件都传不了啦
发表于 2021-1-30 18:45:42 | 显示全部楼层
http://www.tietuku.com/
可以在这个网站上上传图片,然后外链图片
发表于 2021-1-31 12:43:00 | 显示全部楼层
很实用,谢谢大侠了!
发表于 2021-2-1 15:09:47 | 显示全部楼层
magicheno 发表于 2021-1-26 18:29
大侠如果想把这个多段线功能打断的单独列出来要怎么操作呢,我乱整了下好像不大行,还有就是如果我想直接空 ...

大侠有空帮我看看这个问题呢
 楼主| 发表于 2021-2-1 18:52:10 | 显示全部楼层
magicheno 发表于 2021-2-1 15:09
大侠有空帮我看看这个问题呢

(defun c:tt5 (/ entname1 entname2 fi1 fi2 i key key2 loop lst1 lst2 p1 p1a p2 p3 p4 pa1 pa2 pb1 pb2 ptx ptx1 ptx2 r ss1 ss2);;批量倒角-多段线有效
        (vl-load-com)
        (setvar "cmdecho" 0)
        (command "undo" "be")
        (initget "F")
        (setq p1 (getpoint"\n框选起点[线选(F)]:"))
        (if (= p1 "F") (setq p3 (getpoint"\n线选起点1:") p1 (getpoint p3 "\n线选终点1:") p1a (getpoint"\n线选起点2:") p4 (getpoint p1a "\n线选终点2:") ss1 (ssget "f" (list p1 p3) '((0 . "*line"))) ss2 (ssget "f" (list p4 p1a) '((0 . "*line"))) key2 1)
                (setq p2 (getcorner p1"\n终点:") p3 (list (car p1) (cadr p2)) p4 (list (car p2) (cadr p1)) ss1 (ssget "f" (list p1 p3) '((0 . "*line"))) ss2 (ssget "f" (list p1 p4) '((0 . "*line"))) key2 2)
        );if
        (setq loop T r 0)
        (while loop
                (setq i 0)
                (repeat (sslength ss1)
                        (setq entname1 (ssname ss1 i) entname2 (ssname ss2 i))
                        (setq ptx1 (cadar (cdddr (car (ssnamex ss1 i)))))
                        (setq ptx2 (cadar (cdddr (car (ssnamex ss2 i)))))
                        (if (and (equal (cdr (assoc 0 (entget entname1))) "LWPOLYLINE") (equal (cdr (assoc 0 (entget entname2))) "LWPOLYLINE"))
                                (setq fi1 ptx1 fi2 ptx2)
                                (setq fi1 (list entname1 ptx1) fi2 (list entname2 ptx2))
                        );if
                        (command "FILLET" "r" r)
                        (command "FILLET" "non"  fi1 "non"  fi2)
                        (setq i (1+ i))
                );re
                (setq key (getstring "\n连接(K)/默认断开(空格)]:"))
                (cond
                        ((= key "k") (setq loop nil))
                        (T (if (= key2 1) (setq ss1 (ssget "f" (list p1 p3) '((0 . "LWPOLYLINE"))) ss2 (ssget "f" (list p4 p1a) '((0 . "LWPOLYLINE")))) (setq ss1 (ssget "f" (list p1 p3) '((0 . "LWPOLYLINE"))) ss2 (ssget "f" (list p1 p4) '((0 . "LWPOLYLINE")))))
                                (if ss1
                                        (progn
                                                (setq i 0)
                                                (repeat (sslength ss1)
                                                        (setq entname1 (ssname ss1 i) entname2 (ssname ss2 i))
                                                        (setq ptx1 (cadar (cdddr (car (ssnamex ss1 i)))) lst1 (HH:pickSegEndPt entname1 ptx1) pa1 (car lst1) pb1 (cadr lst1))
                                                        (setq ptx2 (cadar (cdddr (car (ssnamex ss2 i)))) lst2 (HH:pickSegEndPt entname2 ptx2) pa2 (car lst2) pb2 (cadr lst2))
                                                        (setq ptx (inters pa1 pb1 pa2 pb2 nil))
                                                        (if (= r 0) (command "BREAK" entname1 "non" ptx "non" ptx)
                                                                (command "BREAK" entname1 "non" (vlax-curve-getclosestpointto entname1 (trans ptx 1 0)) "non" (vlax-curve-getclosestpointto entname1 (trans ptx 1 0)))
                                                        );if
                                                        (setq i (1+ i))
                                                );re
                                        );pr
                                );if
                                (setq loop nil)
                        )
                );cond
        );while
        (command "undo" "e")
        (setvar "cmdecho" 1)
        (princ)
)
;;[功能] 多段线所点击子段的两端点列表By 自贡黄明儒
;;示例(HH:pickSegEndPt (car(setq en(entsel))) (cadr en))
(defun HH:pickSegEndPt (obj p / pp n)
  (setq        pp (vlax-curve-getclosestpointto obj (trans p 1 0))
                n  (fix (vlax-curve-getparamatpoint obj pp))
  )
  (list        (vlax-curve-getPointAtParam obj n)
                (vlax-curve-getPointAtParam obj (1+ n))
  )
)

评分

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

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2021-2-1 23:22:45 | 显示全部楼层
start4444 发表于 2021-2-1 18:52
(defun c:tt5 (/ entname1 entname2 fi1 fi2 i key key2 loop lst1 lst2 p1 p1a p2 p3 p4 pa1 pa2 pb1 pb ...

感谢大侠,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 15:37 , Processed in 0.183047 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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