求一个能画出三拐封闭多段线的lsp,求大神指导
各位大神,现已有能画出两拐的代码,现想画出三拐的图元,该如何更改?有大神赐教下吗?,谢谢两转的代码如下:
;转角----------------------------------------------------------------------
(defun c:3C (/ OLDOS p0 p1 P2 P3 P4 P5 p0x p0y p2x p2y x02i y02i pc tTmax);测量BC作文本
(COMMAND "UNDO" "BE")
(SETQ OLDOS(GETVAR "OSMODE"))
(SETQ OLDLN (GETVAR "CLAYER"))
(initget 1)
(setq p0 (getpoint "\nFirst Point:"))
(initget 33)
(setq p1 (getPOINT p0 "\nSecond Point:"))
(initget 33)
(setq p2 (getPOINT p1 "\nThird Point:"))
(SETQ P3 (POLAR P2 (- (ANGLE P1 P2) (/ PI 2)) 100))
(SETQ P5 (POLAR P0 (- (ANGLE P0 P1) (/ PI 2)) 100))
(SETQ P4 (INTERS P3 (POLAR P3 (ANGLE P2 P1) 65) P5 (POLAR P5 (ANGLE P0 P1) 65) NIL))
(SETQ p0x (NTH 0 P0))
(SETQ p0y (NTH 1 P0))
(SETQ p2x (NTH 0 P2))
(SETQ p2y (NTH 1 P2))
(SETQ x02i (- p2x p0x))
(SETQ y02i (- p2y p0y))
(SETQ ANG1 (ANGLE P0 P1))
(SETQ ANG2 (ANGLE P1 P2))
(SETQ DIST1 (distance p0 p1))
(SETQ DIST2 (distance p1 p2))
(if (and p0 p1 P2)
(progn
(setq ttmax (STRCAT "3C " (RTOS (distance p0 p1) 2 0) "+" (RTOS (distance p1 p2) 2 0)))
(SETVAR "OSMODE" 0)
(command "layer""m""03-LC" "c" "7" "03-LC" "")
(COMMAND "PLINE" P0 P1 P2 P3 P4 P5 "C")
(command "layer""m""03-LC-word" "c" "4" "03-LC-word" "")
(if (> (abs DIST1) (abs DIST2))
(PROGN
(setq pc (polar p0 (angle p0 p4) (/ (distance p0 p4) 2)))
(COMMAND "TEXT" "j" "m" pc "50" (* (/ ANG1 PI) 180) tTmax)
)
(PROGN
(setq pc (polar p4 (angle p4 p2) (/ (distance p4 p2) 2)))
(COMMAND "TEXT" "j" "m" pc "50" (* (/ ANG2 PI) 180) tTmax)
)
)
)
)
(SETVAR "OSMODE" OLDOS)
(SETVAR "CLAYER" OLDLN)
(COMMAND "UNDO" "E")
(PRINC)
)
362928018 发表于 2017-12-6 22:47
高手啊,好厉害,能不能改下,
出来的图元是内侧的尺寸,能否变成外侧红色标注的尺寸? 附图
(defun c:3C ( / OLDOS p0 p1 P2 P3 P4 P5 p6 p7 p8 p0x p0y p2x p2y x02i y02i pc tTmax)
(COMMAND "UNDO" "BE")
(SETQ OLDOS(GETVAR "OSMODE"))
(SETQ OLDLN (GETVAR "CLAYER"))
(initget 1)
(setq p0 (getpoint "\n指定第一个点:"))
(initget 33)
(setq p1 (getPOINT p0 "\n指定第二个点:"))
(initget 33)
(setq p2 (getPOINT p1 "\n指定第三个点:"))
(initget 33);设定下次getxxx函数的有效输入
(setq p3 (getPOINT p2 "\n指定第四个点:"))
(SETQ P4 (POLAR P3 (ANGLE P2 P1) 100))
(SETQ P7 (POLAR P0 (ANGLE P2 P1)100))
(setq p6 (polar p7(ANGLE P0 P1) (+ 100
(sqrt
(+
(*(- (nth 0 p0) (nth 0 p1))
(- (nth 0 p0) (nth 0 p1))
)
(*(- (nth 1 p0) (nth 1 p1))
(- (nth 1 p0) (nth 1 p1))
)
)
)
)))
(setq p5 (polar p6 (ANGLE P1 P2)(sqrt
(+
(*(- (nth 0 p2) (nth 0 p1))
(- (nth 0 p2) (nth 0 p1))
)
(*(- (nth 1 p2) (nth 1 p1))
(- (nth 1 p2) (nth 1 p1))
)
)
)
))
;新增p8变量是为了给文字起点到左边
(SETQ P8 (POLAR P4 PI 2000))
;(SETQ P4 (INTERS P3 (POLAR P3 (ANGLE P2 P1) 65) P5 (POLAR P5 (ANGLE P0 P1) 75) NIL))
;(inters 1 2 3 4 模式)取得两条线的交点
(SETQ p0x (NTH 0 P0))
(SETQ p0y (NTH 1 P0))
(SETQ p2x (NTH 0 P2))
(SETQ p2y (NTH 1 P2))
(SETQ x02i (- p2x p0x))
(SETQ y02i (- p2y p0y))
(SETQ ANG1 (ANGLE P0 P1))
(SETQ ANG2 (ANGLE P1 P2))
(SETQ DIST1 (distance p0 p1))
(SETQ DIST2 (distance p1 p2))
(if (and p0 p1 P2)
(progn
(setq ttmax (STRCAT "4C " (RTOS (distance p0 p1) 2 0) "+" (RTOS (distance p1 p2) 2 0) "+" (RTOS (distance p2 p3) 2 0)))
(SETVAR "OSMODE" 0)
(command "layer""m""03-LC" "c" "7" "03-LC" "")
(COMMAND "PLINE" P0 P1 P2 P3 P4 P5 p6 p7 "C")
;以下程序用来新建一个红色图层,然后在红色图层上面标注
(command "layer""m""03-LC-dim" "c" "1" "03-LC-dim" "")
(command "dimlinear" p0 p1 (POLAR P0 (ANGLE P1 P2)500))
(command "dimlinear" p2 p1 (POLAR P1 (ANGLE P1 P0)500))
(command "dimlinear" p2 p3 (POLAR P2 (ANGLE P1 P2)500))
(command "dimlinear" p4 p5 (POLAR P4 (ANGLE P3 P4)500))
(command "dimlinear" p5 p6 (POLAR P5 (ANGLE P5 P4)500))
(command "dimlinear" p6 p7 (POLAR P6 (ANGLE P5 P6)500))
(command "layer""m""03-LC-word" "c" "4" "03-LC-word" "")
(if (> (abs DIST1) (abs DIST2))
(PROGN
(setq pc (polar p0 (angle p0 p4) (/ (distance p0 p4) 2)))
(COMMAND "TEXT" p8 "50"
"0"
tTmax)
)
(PROGN
(setq pc (polar p4 (angle p4 p2) (/ (distance p4 p2) 2)))
(COMMAND "TEXT" p8 "50"
"0"
tTmax)
)
)
)
)
(SETVAR "OSMODE" OLDOS)
(SETVAR "CLAYER" OLDLN)
(COMMAND "UNDO" "E")
(PRINC)
)
(defun c:3C ( / OLDOS p0 p1 P2 P3 P4 P5 p0x p0y p2x p2y x02i y02i pc tTmax)
(COMMAND "UNDO" "BE")
(SETQ OLDOS(GETVAR "OSMODE"))
(SETQ OLDLN (GETVAR "CLAYER"))
(initget 1)
(setq p0 (getpoint "\n指定第一个点:"))
(initget 33)
(setq p1 (getPOINT p0 "\n指定第二个点:"))
(initget 33)
(setq p2 (getPOINT p1 "\n指定第三个点:"))
(initget 33);设定下次getxxx函数的有效输入
(setq p3 (getPOINT p2 "\n指定第四个点:"))
(SETQ P4 (POLAR P3 (ANGLE P2 P1) 100))
(SETQ P7 (POLAR P0 (ANGLE P2 P1)100))
(setq p6 (polar p7(ANGLE P0 P1) (+ 100
(sqrt
(+
(*(- (nth 0 p0) (nth 0 p1))
(- (nth 0 p0) (nth 0 p1))
)
(*(- (nth 1 p0) (nth 1 p1))
(- (nth 1 p0) (nth 1 p1))
)
)
)
)))
(setq p5 (polar p6 (ANGLE P1 P2)(sqrt
(+
(*(- (nth 0 p2) (nth 0 p1))
(- (nth 0 p2) (nth 0 p1))
)
(*(- (nth 1 p2) (nth 1 p1))
(- (nth 1 p2) (nth 1 p1))
)
)
)
))
;(SETQ P4 (INTERS P3 (POLAR P3 (ANGLE P2 P1) 65) P5 (POLAR P5 (ANGLE P0 P1) 75) NIL))
;(inters 1 2 3 4 模式)取得两条线的交点
(SETQ p0x (NTH 0 P0))
(SETQ p0y (NTH 1 P0))
(SETQ p2x (NTH 0 P2))
(SETQ p2y (NTH 1 P2))
(SETQ x02i (- p2x p0x))
(SETQ y02i (- p2y p0y))
(SETQ ANG1 (ANGLE P0 P1))
(SETQ ANG2 (ANGLE P1 P2))
(SETQ DIST1 (distance p0 p1))
(SETQ DIST2 (distance p1 p2))
(if (and p0 p1 P2)
(progn
(setq ttmax (STRCAT "4C " (RTOS (distance p0 p1) 2 0) "+" (RTOS (distance p1 p2) 2 0) "+" (RTOS (distance p2 p3) 2 0)))
(SETVAR "OSMODE" 0)
(command "layer""m""03-LC" "c" "7" "03-LC" "")
(COMMAND "PLINE" P0 P1 P2 P3 P4 P5 p6 p7 "C")
(command "layer""m""03-LC-word" "c" "4" "03-LC-word" "")
(if (> (abs DIST1) (abs DIST2))
(PROGN
(setq pc (polar p0 (angle p0 p4) (/ (distance p0 p4) 2)))
(COMMAND "TEXT" "j" "m" pc "50" (* (/ ANG1 PI) 180) tTmax)
)
(PROGN
(setq pc (polar p4 (angle p4 p2) (/ (distance p4 p2) 2)))
(COMMAND "TEXT" "j" "m" pc "50" (* (/ ANG2 PI) 180) tTmax)
)
)
)
)
(SETVAR "OSMODE" OLDOS)
(SETVAR "CLAYER" OLDLN)
(COMMAND "UNDO" "E")
(PRINC)
) bzhyong 发表于 2017-12-6 14:10
我也是刚开始学习。弄了三四个小时才弄好,希望能帮到你
高手啊:handshake,好厉害,能不能改下,
出来的图元是内侧的尺寸,能否变成外侧红色标注的尺寸? 附图 有大神帮忙优化下吗 362928018 发表于 2017-12-1 09:36
有大神帮忙优化下吗
谢谢xyp1964版主的解答,我初学LISP,好多看不懂,能帮忙修改下吗? 362928018 发表于 2017-12-2 16:00
谢谢xyp1964版主的解答,我初学LISP,好多看不懂,能帮忙修改下吗?
;; 也许是你的意思
xyp1964 发表于 2017-12-2 19:40
;; 也许是你的意思
命令: TT ; 错误: no function definition: XYP-STARTSC提示错误,用不了,能再看看是哪里出问题吗? xyp1964 发表于 2017-12-2 19:40
;; 也许是你的意思
能在之前我提供的加入第四点的代码吗? 我也是刚开始学习。弄了三四个小时才弄好,希望能帮到你
页:
[1]
2