如何优化下面的源码
自己写的画梁水平加腋的程序如下:目前有个BUG就是按下数字后鼠标指针不能乱动必须不动选取L1起始点才能画好 要是选择L1时鼠标乱动就只能画一条线求大佬优化一下解决这个BUG(defun C:66 (/ PT1 PT2xsmjjdd1 jjdd2)
(initget "1 11 2 22 3 33 4 44") ;这里可以添加自定义的
(if (not xsm) (setq xsm "1"))(setq in (getkword (strcat "选择加腋方向::<" xsm ">")))
(if in (setq xsm in));;;记忆上次选择
(cond
((= xsm "1") (setq jjdd1 0) (setq jjdd2 (* 0.5 pi) ) ) ;内容自定义
((= xsm "11") (setq jjdd1 (* 0.5 pi)) (setq jjdd2 0 ) )
((= xsm "2") (setq jjdd1 (* 0.5 pi)) (setq jjdd2 pi ) )
((= xsm "22") (setq jjdd1 pi) (setq jjdd2 (* 0.5 pi) ) )
((= xsm "3") (setq jjdd1 pi) (setq jjdd2 (* 1.5 pi) ) )
((= xsm "33") (setq jjdd1 (* 1.5 pi)) (setq jjdd2 pi ) )
((= xsm "4") (setq jjdd1 (* 1.5 pi)) (setq jjdd2 0 ) )
((= xsm "44") (setq jjdd1 0) (setq jjdd2 (* 1.5 pi) ) )
;这里按上面自定义的添加删除
(t (princ))
)
(if (setq L1 (getpoint "\n选择加腋位置(梁柱交点):"))
(progn
(setq OLD_CMDECHO (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq CL (getvar "clayer"))
(command "layer" "make" "梁加腋图层" "c" "253""" "")
(setq PT1 (polar L1 jjdd1 500))
(setq PT2 (polar L1 jjdd2 200))
;;绘制
(command "cecolor" 7)
(command "pline" L1 "w" "0" "0"PT1PT2"c" )
(command "cecolor" 256)
(command "hatch" "solid" (entlast) "")
(setvar "clayer" CL)
(setvar "CMDECHO" OLD_CMDECHO)
)
)
(princ)
)
本帖最后由 start4444 于 2019-12-18 10:58 编辑
命令的捕捉导致出错,关了就行,这个代码那么多情况能记清吗,试试最后加个镜像处理会简便很多
(defun C:tt5(/ cl hat old_osm p1 p2 p3 p4 pl)
(setq OLD_osm (getvar "OSMODE"))
(setq CL (getvar "clayer"))
(command "layer" "make" "梁加腋图层" "c" "253""" "")
(setq p1 (getpoint"\n选取基点:") p2 (getpoint p1"\n选取长边方向点:") p3 (polar p1 (angle p1 p2) 500) p4 (polar p1 (- (angle p1 p2) (* 0.5 pi)) 200))
(setvar "OSMODE" 0) (command "cecolor" 7 "pline" p1 "w" "0" "0"p3p4"c" "cecolor" 256 "hatch" "solid" (setq pl (entlast)) "")
(setq hat (entlast))
(if (= (getstring"是否镜像?[是(Y)/否(空格)]:") "y") (command "MIRROR" hat pl"" p1 p2 "y"))
(setvar "clayer" CL)
(setvar "OSMODE" OLD_osm)
(princ)
)
虽然是要选取两点,但是可以以此判断角度可以适用倾斜的情况,你那个只能水平垂直
(defun ukword (bit kwd msg def / inp)
(if (and def (/= def ""))
(setq msg (strcat "\n" msg "<" def ">: ")
bit (* 2 (fix (/ bit 2)))
)
(setq msg (strcat "\n" msg ": "))
)
(initget bit kwd)
(setq inp (getkword msg))
(if inp
inp
def
)
)
(defun C:66 ()
(setq msg "选择加腋方向:[1.一左/11.一上/2.二上/22.二右/3.三右/33.三下/4.四下/44.四左"
uk(Ukword 1 "1 11 2 22 3 33 4 44" msg uk)
)
(cond ((= uk "1") (setq r1 0) (setq r2 (* 0.5 pi)))
((= uk "11") (setq r1 (* 0.5 pi)) (setq r2 0))
((= uk "2") (setq r1 (* 0.5 pi)) (setq r2 pi))
((= uk "22") (setq r1 pi) (setq r2 (* 0.5 pi)))
((= uk "3") (setq r1 pi) (setq r2 (* 1.5 pi)))
((= uk "33") (setq r1 (* 1.5 pi)) (setq r2 pi))
((= uk "4") (setq r1 (* 1.5 pi)) (setq r2 0))
((= uk "44") (setq r1 0) (setq r2 (* 1.5 pi)))
(t (princ))
)
(if (setq L1 (getpoint "\n选择加腋位置(梁柱交点)<退出>: "))
(progn
(setq CL (getvar "clayer"))
(command "layer" "make" "梁加腋图层" "c" "253" "" "")
(setq p1 (polar L1 r1 500))
(setq p2 (polar L1 r2 200))
(command "cecolor" 7)
(command "pline" L1 "w" "0" "0" "non" p1 "non" p2 "c")
(command "cecolor" 256)
(command "hatch" "solid" (entlast) "")
(setvar "clayer" CL)
)
)
(princ)
) start4444 发表于 2019-12-18 10:55
命令的捕捉导致出错,关了就行,这个代码那么多情况能记清吗,试试最后加个镜像处理会简便很多
(defun C ...
谢谢但是我还是不太明白为啥我的也是在选取L1点后关闭 捕捉 就出问题了呢? xyp1964 发表于 2019-12-18 13:17
谢谢为啥这个都不用关捕捉都行
页:
[1]