明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 876|回复: 4

[提问] 如何优化下面的源码

[复制链接]
发表于 2019-12-18 08:59:12 | 显示全部楼层 |阅读模式
自己写的画梁水平加腋的程序如下:目前有个BUG  就是按下数字后  鼠标指针不能乱动  必须不动选取L1起始点  才能画好   要是选择L1时鼠标乱动  就只能画一条线  求大佬优化一下  解决这个BUG
(defun C:66 (/   PT1 PT2  xsm  jjdd1 jjdd2)
    (initget "1 11 2 22 3 33 4 44") ;这里可以添加自定义的
        (if (not xsm) (setq xsm "1"))(setq in (getkword (strcat "选择加腋方向:[1.一左/11.一上/2.二上/22.二右/3.三右/33.三下/4.四下/44.四左]:<" 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"  PT1  PT2  "c" )
  (command "cecolor" 256)
    (command "hatch" "solid" (entlast) "")

     (setvar "clayer" CL)
     (setvar "CMDECHO" OLD_CMDECHO)
)
    )
    (princ)
)

发表于 2019-12-18 10:55:14 | 显示全部楼层
本帖最后由 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"  p3  p4  "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)
)

虽然是要选取两点,但是可以以此判断角度可以适用倾斜的情况,你那个只能水平垂直
发表于 2019-12-18 13:17:11 | 显示全部楼层
  1. (defun ukword (bit kwd msg def / inp)
  2.   (if (and def (/= def ""))
  3.     (setq msg (strcat "\n" msg "<" def ">: ")
  4.           bit (* 2 (fix (/ bit 2)))
  5.     )
  6.     (setq msg (strcat "\n" msg ": "))
  7.   )
  8.   (initget bit kwd)
  9.   (setq inp (getkword msg))
  10.   (if inp
  11.     inp
  12.     def
  13.   )
  14. )
  15. (defun C:66 ()
  16.   (setq        msg "选择加腋方向:[1.一左/11.一上/2.二上/22.二右/3.三右/33.三下/4.四下/44.四左"
  17.         uk  (Ukword 1 "1 11 2 22 3 33 4 44" msg uk)
  18.   )
  19.   (cond        ((= uk "1") (setq r1 0) (setq r2 (* 0.5 pi)))
  20.         ((= uk "11") (setq r1 (* 0.5 pi)) (setq r2 0))
  21.         ((= uk "2") (setq r1 (* 0.5 pi)) (setq r2 pi))
  22.         ((= uk "22") (setq r1 pi) (setq r2 (* 0.5 pi)))
  23.         ((= uk "3") (setq r1 pi) (setq r2 (* 1.5 pi)))
  24.         ((= uk "33") (setq r1 (* 1.5 pi)) (setq r2 pi))
  25.         ((= uk "4") (setq r1 (* 1.5 pi)) (setq r2 0))
  26.         ((= uk "44") (setq r1 0) (setq r2 (* 1.5 pi)))
  27.         (t (princ))
  28.   )
  29.   (if (setq L1 (getpoint "\n选择加腋位置(梁柱交点)<退出>: "))
  30.     (progn
  31.       (setq CL (getvar "clayer"))
  32.       (command "layer" "make" "梁加腋图层" "c" "253" "" "")
  33.       (setq p1 (polar L1 r1 500))
  34.       (setq p2 (polar L1 r2 200))
  35.       (command "cecolor" 7)
  36.       (command "pline" L1 "w" "0" "0" "non" p1 "non" p2 "c")
  37.       (command "cecolor" 256)
  38.       (command "hatch" "solid" (entlast) "")
  39.       (setvar "clayer" CL)
  40.     )
  41.   )
  42.   (princ)
  43. )
 楼主| 发表于 2019-12-18 14:07:57 | 显示全部楼层
start4444 发表于 2019-12-18 10:55
命令的捕捉导致出错,关了就行,这个代码那么多情况能记清吗,试试最后加个镜像处理会简便很多

(defun C ...

谢谢  但是我还是不太明白  为啥我的也是在选取L1点后关闭 捕捉 就出问题了呢?
 楼主| 发表于 2019-12-18 14:13:26 | 显示全部楼层

谢谢  为啥这个都不用关捕捉都行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 11:46 , Processed in 0.172991 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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