start4444
发表于 2021-1-26 10:51:38
edsion24 发表于 2021-1-26 08:59
命令: tt5
框选起点[线选(F)]:
终点:; 错误: 参数类型错误: lselsetp nil
两组线倒角
magicheno
发表于 2021-1-26 12:41:23
start4444 发表于 2021-1-26 10:50
后续炸散就行了吧
炸散后就想成了line线,再重新加宽,又多了很多步了额,能给个选项断开,多段线宽度不变吗
mahuan1279
发表于 2021-1-26 12:58:25
多段线批量倒角如何实现?
start4444
发表于 2021-1-26 13:49:40
mahuan1279 发表于 2021-1-26 12:58
多段线批量倒角如何实现?
这个是两组线两两倒角,如果是单根多段线倒圆角直接命令 ”FILLET“ “p”
start4444
发表于 2021-1-26 13:50:36
magicheno 发表于 2021-1-26 12:41
炸散后就想成了line线,再重新加宽,又多了很多步了额,能给个选项断开,多段线宽度不变吗
意思是两根多段线宽度不一样,想延伸到倒角那个交点?
magicheno
发表于 2021-1-26 14:20:32
本帖最后由 magicheno 于 2021-1-26 14:37 编辑
不是呢,多段线的宽度保持不变,转折处的是分开的,比如下图的附件呢,论坛里的图片发不上来,有点表达不清楚哈
http://i2.tiimg.com/732699/763521e0aa943122.png
start4444
发表于 2021-1-26 17:16:49
本帖最后由 start4444 于 2021-1-26 17:21 编辑
magicheno 发表于 2021-1-26 14:20
不是呢,多段线的宽度保持不变,转折处的是分开的,比如下图的附件呢,论坛里的图片发不上来,有点表达不清 ...
加入断开选项:
(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
(command "undo" "m")
(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[加大半径(A)/减小半径(S)/断开(K)/退出(空格)]:"))
(cond ((= key "a") (setq r (+ r 100)) (command "undo" "b"))
((= key "s") (setq r (- r 100)) (if (< r 0) (progn (setq r 0) (alert "半径已经为0!"))) (command "undo" "b"))
((= key "k") (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)
)
(t (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))
)
)
magicheno
发表于 2021-1-26 17:25:34
start4444 发表于 2021-1-26 17:16
加入断开选项:
(defun c:tt5 (/ entname1 entname2 fi1 fi2 i key key2 loop lst1 lst2 p1 p1a p2 p3 ...
好用大侠牛逼了
magicheno
发表于 2021-1-26 18:29:47
本帖最后由 magicheno 于 2021-1-26 20:46 编辑
大侠如果想把这个多段线功能打断的单独列出来要怎么操作呢,我乱整了下好像不大行,还有就是如果我想直接空格就断开而不是输入K断开,该怎么调呢
(defun c:tt6 ( 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)
(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)
)
;;[功能] 多段线所点击子段的两端点列表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))
)
)
czb203
发表于 2021-1-26 22:01:36
感谢老大又出山了