llsheng_73 发表于 2013-11-18 08:35:23

本帖最后由 llsheng_73 于 2013-11-18 08:37 编辑

958620832 发表于 2013-11-18 08:33 static/image/common/back.gif
非常感谢你的帮助,但还是不够完善啊。
问题在于,多段线不一定是直的,还可以是折的。对于只有两个顶点 ...
你能不能一次把所有要求及要处理的特殊情况说完
还有没有别的什么情况,等你5分钟,没有就只是前边所说的了

958620832 发表于 2013-11-18 08:38:08

llsheng_73 发表于 2013-11-18 08:35 static/image/common/back.gif
你能不能一次把所有要求及要处理的特殊情况说完

我说了,见7#,只不过没有图示,没有那么直观。引用7楼如下:
“是我没有表述清楚。之前,倒角我用的都是cad系统本身就有的chamfer或者FILLET命令,但后来发现它的某一方面的功能对我来说有点多余,就是,只要两条线中有一条是多段线,倒角的结果就是将两条线合并为一条多段线,并且颜色、线型、线宽都同一了,我想将这一个功能取消,但其他功能都保留,想找个能替代chamfer或者FILLET命令的程序,只是本人编写lisp程序水平有限,始终都编不出来,于是就求助于各位高手。”

llsheng_73 发表于 2013-11-18 09:00:30

958620832 发表于 2013-11-18 08:38 static/image/common/back.gif
我说了,见7#,只不过没有图示,没有那么直观。引用7楼如下:
“是我没有表述清楚。之前,倒角我用的都是 ...

限于水平无法一次性理解你的描述

llsheng_73 发表于 2013-11-18 17:02:10

liu22737 发表于 2013-11-18 16:58 static/image/common/back.gif
管他有什么要求,直接调用AUTOCAD原始命令啊

(defun c:tt(/ b2 a2)


AUTOCAD命令很多版本之间它可能会有细微差别

陨落 发表于 2013-11-18 19:00:14

liu22737 发表于 2013-11-18 16:58 static/image/common/back.gif
管他有什么要求,直接调用AUTOCAD原始命令啊

(defun c:tt(/ b2 a2)


嗯,这个思路是极好的

风树 发表于 2013-11-18 20:00:39

llsheng_73 发表于 2013-11-18 08:35 static/image/common/back.gif
你能不能一次把所有要求及要处理的特殊情况说完
还有没有别的什么情况,等你5分钟,没有就只是前边 ...

表示支持、理解及

liu22737 发表于 2013-11-19 08:55:53

llsheng_73 发表于 2013-11-18 17:02 static/image/common/back.gif
AUTOCAD命令很多版本之间它可能会有细微差别

版本不同可能会有差别,最主要是系统变量对命令影响很大,
这要在自己电脑上调试,尽量不要随便更改变量,

另外我觉得我们很难写一个FILLET命令,倒角时遇到的情况太复杂了,线,射线,圆弧,椭圆,样条线,多义线等,你匆忙写的程式很难达到要求,其实楼主要的功能很单一,提供个简单思路自己写呗,
最好要求AUTOCAD公司提供一个这样的变量控制它

958620832 发表于 2013-11-19 18:07:17

本帖最后由 958620832 于 2013-11-21 08:22 编辑

liu22737 发表于 2013-11-18 16:58 http://bbs.mjtd.com/static/image/common/back.gif
管他有什么要求,直接调用AUTOCAD原始命令啊

(defun c:tt(/ b2 a2)
思路不错,根据你提出的思路,编出来了,也试验成功了。
(defun c:f (/ ent1 ent2 ent3 ent4) ;;;仅适用于直线(LINE)、多段线(POLYLINE和LWPOLYLINE两种)
(setq obj1 (entsel) obj2 (entsel))
(setq e1 (car obj1) e2 (car obj2) p1 (cadr obj1) p2 (cadr obj2))
(setq ent1 (entget e1) ent2 (entget e2) ty1 (cdr (assoc 0 ent1)) ty2 (cdr (assoc 0 ent2)))
(vl-cmdf "chamfer" p1 p2) ;第一步,倒角
(setq e3 (car (nentselp p1)))
(if (or (= ty1 "LWPOLYLINE") (= ty2 "LWPOLYLINE") (= ty1 "POLYLINE") (= ty2 "POLYLINE")) (progn
    (vl-cmdf "BREAK" e3 "int" p1 p2 "int" p1 p2) ;第二步,打断
    (setq e3 (car (nentselp p1)) e4 (car (nentselp p2)))
    (setq ent3 (entget e3) ent4 (entget e4))
    (if (= ty1 "LINE") (progn (vl-cmdf "explode" e3 "") (setq e3 (car (nentselp p1))) (setq ent3 (entget e3))))
    (if (= ty2 "LINE") (progn (vl-cmdf "explode" e4 "") (setq e4 (car (nentselp p2))) (setq ent4 (entget e4))))
    ;第三步,属性还原(ent1还原ent3,ent2还原ent4),还原属性共有颜色(62)、线型(6)、比例(48)三种
    (setq ys1 (if (assoc 62 ent1) (assoc 62 ent1) (cons 62 256)) xx1 (if (assoc 6 ent1) (assoc 6 ent1) (cons 6 "bylayer")))
    (setq ys3 (if (assoc 62 ent3) (assoc 62 ent3)) xx3 (if (assoc 6 ent3) (assoc 6 ent3)))
    (setq ys2 (if (assoc 62 ent2) (assoc 62 ent2) (cons 62 256)) xx2 (if (assoc 6 ent2) (assoc 6 ent2) (cons 6 "bylayer")))
    (setq ys4 (if (assoc 62 ent4) (assoc 62 ent4)) xx4 (if (assoc 6 ent4) (assoc 6 ent4)))
    (setq bl1 (if (assoc 48 ent1) (assoc 48 ent1) (cons 48 1)) bl2 (if (assoc 48 ent2) (assoc 48 ent2) (cons 48 1)))
    (setq bl3 (if (assoc 48 ent3) (assoc 48 ent3)) bl4 (if (assoc 48 ent4) (assoc 48 ent4)))
    (setq ent3 (if ys3 (subst ys1 ys3 ent3) (append ent3 (list ys1))))
    (setq ent3 (if xx3 (subst xx1 xx3 ent3) (append ent3 (list xx1))))
    (setq ent3 (if bl3 (subst bl1 bl3 ent3) (append ent3 (list bl1))))
    (entmod ent3)
    (setq ent4 (if ys4 (subst ys2 ys4 ent4) (append ent4 (list ys2))))
    (setq ent4 (if xx4 (subst xx2 xx4 ent4) (append ent4 (list xx2))))
    (setq ent4 (if bl4 (subst bl2 bl4 ent4) (append ent4 (list bl2))))
    (entmod ent4)))
(princ))

ou_y_x 发表于 2013-11-20 13:03:45

楼主这是在设置闯关游戏吧

958620832 发表于 2013-11-20 18:37:20

ou_y_x 发表于 2013-11-20 13:03 static/image/common/back.gif
楼主这是在设置闯关游戏吧

楼主向诸位保证,楼主绝不是那种吃饱了撑着没事干的人,没事找事。
事先,我的确不知道程序怎么编写的。后来,根据网友提供的思路才编出来的。既然有人提供了思路,有没有一个人愿意编下去,那我就只好自己编了。只要有了一个好的思路,编程应该不难。我将程序编出来,目的在于让有些lisp刚入门的人学习学习。我很乐意奉献自己的经验,绝不像有些人那样保守。
页: 1 [2] 3
查看完整版本: 关于倒角的一个问题