明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2211|回复: 17

[已解答] 麻烦大神帮我看看我的程序,现在画线部分不执行。

[复制链接]
发表于 2015-4-15 18:12:07 | 显示全部楼层 |阅读模式
(defun C:tt()
     (setvar "CMDECHO" 0)
     (command "-layer" "m" "S3-BEAM-IDEN-HORT" "c" 21 "" "")
     (setq r1 (getvar "userr1"))
     (setq k1  (* 250 (/ r1 100))  )
     (setq k2  (* 200 (/ r1 100))  )
     (if (or (= str nil) (= (wcmatch str "*.*") nil) )  (setq str "200.400"))
     (if (= SDQ nil)
       (progn
         (setq SDQ "c" DQWZ "居中")
       )
     )
     (setq stt str)
     (setq dqq SDQ )
     (setq TFF 0)
     (while (= TFF 0)
      (if (or (= str nil) (= (wcmatch str "*.*") nil) )  (setq str "200.400"))
      (setq stt str)
      (setq str (getstring (strcat "\n输入梁截面(*.*)or[上对齐(F)/居中(C)/下对齐(B)]当前{" DQWZ "}:<" stt ">:")))
      (if (= str "") (setq str stt) )
       (setq sts (vl-string-subst "x" "." str))
      (if  (wcmatch str "*.*")
       (progn
        (setq TFF 1)
        (setq LKK (SB_LJM str 1))
        (setq LGG (SB_LJM str 2))
          (while
                                        (setq pc1 (getpoint "\n请输入第一点:"))
          (setq pc2 (getpoint  pc1 "\n请输入第二点:"))
          (setvar "CLAYER" "S0-BEAM1")
                      (setq jd0 (JD_PP pc1 pc2))
          (setq j0 (angtos jd0 0 20))
          (setq jd1 (+ jd0 (/ pi 2)))
          (setq pz2 (mapcar '+ pc1 pc2))
          (setq pzd (mapcar  '(lambda (x) (/ x 2)) pz2) )
              (if (= DQWZ "上对齐") (setq lks 0 ))
              (if (= DQWZ "居中")   (setq lks 0.5))
              (if (= DQWZ "下对齐") (setq lks 1))
              (setq k3 (+ (* LKK lks) k2) )
              (setq px1 (polar pzd jd1 k3 ))
              (setvar "clayer" "S3-BEAM-IDEN-HORT")
              (command "text" "style" "GB" "justify" "MC" px1 k1 j0 sts)
           )
                           )
                        (setq dqq str)
                )
                    (progn
      (if (or (= dqq "f") (= dqq "F"))
        (progn
         (setq TFF 0)
         (setq SDQ "f" DQWZ "上对齐")
                                 (command "line" pc1 pc2 "")
                                 (setq pt1 (polar pc1 (+ jd0 (* 1.5 pi)) LKK))
                                 (setq pt2 (polar pc2 (+ jd0 (* 1.5 pi)) LKK))
                                 (command "line" pt1 pt2 "")
         )
       )
       (if (or (= dqq "c") (= dqq "C"))
         (progn
         (setq TFF 0)
         (setq SDQ "c" DQWZ "居中")
                                 (setq l1 (/ LKK 2))
                                 (setq pt1 (polar pc1 (+ jd0 (* 1.5 pi)) l1))
                                 (setq pt2 (polar pc2 (+ jd0 (* 1.5 pi)) l1))
                                 (command "line" pt1 pt2 "")
                           (setq pt3 (polar pc1 (+ jd0 (* 0.5 pi)) l1))
                                 (setq pt4 (polar pc2 (+ jd0 (* 0.5 pi)) l1))
                                 (command "line" pt3 pt4 "")
         )
       )
       (if (or (= dqq "b") (= dqq "B"))
         (progn
         (setq TFF 0)
         (setq SDQ "b" DQWZ "下对齐")
                           (command "line" pc1 pc2 "")
                                 (setq pt1 (polar pc1 (+ jd0 (* 0.5 pi)) LKK))
                                 (setq pt2 (polar pc2 (+ jd0 (* 0.5 pi)) LKK))
                                 (command "line" pt1 pt2 "")
         )
       ))
     )
)

;;;(x)梁截面识别
(defun SB_LJM(LJM pr)        
     (VL-LOAD-COM)
     (setq LKST "")
     (setq LGST "")

     (setq LJMN (strlen LJM))
     
     (if (wcmatch LJM "*.*")
       (progn
        (setq XDWZ (vl-string-search  "." LJM))   ;;;小数点位置
      
        (setq LKWS XDWZ)                           ;;;梁宽位数
        (setq LGWZ (+ XDWZ 2))                     ;;;梁高位置
        (setq LGWS (+ (- LJMN LGWZ) 1) )           ;;;梁高位数

        (setq LKST (substr LJM 1 LKWS))            ;;;梁宽字符   
        (setq LGST (substr LJM LGWZ LGWS))         ;;;梁高字符

        (setq LKFF (atof LKST))                    ;;;梁宽实数
        (setq LGFF (atof LGST))                    ;;;梁宽实数
       )
     )
        (if (= pr 1)
          (setq LKLG LKFF)
          (setq LKLG LGFF)
         )

    LKLG   
)

;;;  根据两点求角度
(defun JD_PP(pd0 pdt)
    (setq adt (car  pdt))
    (setq bdt (cadr pdt))

    (setq ad0 (car  pd0))
    (setq bd0 (cadr pd0))

    (setq lda (- adt ad0))
    (setq ldb (- bdt bd0))

    (if (/= lda 0)
     (setq JDD (atan (/ ldb lda) ) ))
    (if (= lda 0)
     (setq JDD (/ pi 2)))
    JDD
)






 楼主| 发表于 2015-4-15 18:20:01 | 显示全部楼层
大神都在路上了么
 楼主| 发表于 2015-4-15 19:19:31 | 显示全部楼层
大神都在哪里?
发表于 2015-4-15 19:48:00 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-4-15 19:49 编辑

(while
                                        (setq pc1 (getpoint "\n请输入第一点:"))
          (setq pc2 (getpoint  pc1 "\n请输入第二点:"))
          (setvar "CLAYER" "S0-BEAM1")
                      (setq jd0 (JD_PP pc1 pc2))
          (setq j0 (angtos jd0 0 20))
          (setq jd1 (+ jd0 (/ pi 2)))
          (setq pz2 (mapcar '+ pc1 pc2))
          (setq pzd (mapcar  '(lambda (x) (/ x 2)) pz2) )
              (if (= DQWZ "上对齐") (setq lks 0 ))
              (if (= DQWZ "居中")   (setq lks 0.5))
              (if (= DQWZ "下对齐") (setq lks 1))
              (setq k3 (+ (* LKK lks) k2) )
              (setq px1 (polar pzd jd1 k3 ))
              (setvar "clayer" "S3-BEAM-IDEN-HORT")
              (command "text" "style" "GB" "justify" "MC" px1 k1 j0 sts)
           )

这一段无限循环,如果pc1进行空输入,下边句会出错,所以根本到不了画线部分
  1. (defun C:tt()
  2.      (setvar "CMDECHO" 0)
  3.      (command "-layer" "m" "S3-BEAM-IDEN-HORT" "c" 21 "" "")
  4.      (setq r1 (getvar "userr1"))
  5.      (setq k1  (* 250 (/ r1 100))  )
  6.      (setq k2  (* 200 (/ r1 100))  )
  7.      (if (or (= str nil) (= (wcmatch str "*.*") nil) )  (setq str "200.400"))
  8.      (if (= SDQ nil)
  9.        (progn
  10.          (setq SDQ "c" DQWZ "居中")
  11.        )
  12.      )
  13.      (setq stt str)
  14.      (setq dqq SDQ )
  15.      (setq TFF 0)
  16.      (while (= TFF 0)
  17.       (if (or (= str nil) (= (wcmatch str "*.*") nil) )  (setq str "200.400"))
  18.       (setq stt str)
  19.       (setq str (getstring (strcat "\n输入梁截面(*.*)or[上对齐(F)/居中(C)/下对齐(B)]当前{" DQWZ "}:<" stt ">:")))
  20.       (if (= str "") (setq str stt) )
  21.        (setq sts (vl-string-subst "x" "." str))
  22.       (if  (wcmatch str "*.*")
  23.        (progn
  24.         (setq TFF 1)
  25.         (setq LKK (SB_LJM str 1))
  26.         (setq LGG (SB_LJM str 2))
  27.           (while(NULL (setq pc1 (getpoint "\n请输入第一点:"))))
  28.           (setq pc2 (getpoint  pc1 "\n请输入第二点:"))
  29.           (setvar "CLAYER" "S0-BEAM1")
  30.                       (setq jd0 (JD_PP pc1 pc2))
  31.           (setq j0 (angtos jd0 0 20))
  32.           (setq jd1 (+ jd0 (/ pi 2)))
  33.           (setq pz2 (mapcar '+ pc1 pc2))
  34.           (setq pzd (mapcar  '(lambda (x) (/ x 2)) pz2) )
  35.               (if (= DQWZ "上对齐") (setq lks 0 ))
  36.               (if (= DQWZ "居中")   (setq lks 0.5))
  37.               (if (= DQWZ "下对齐") (setq lks 1))
  38.               (setq k3 (+ (* LKK lks) k2) )
  39.               (setq px1 (polar pzd jd1 k3 ))
  40.             ;  (setvar "clayer" "S3-BEAM-IDEN-HORT")
  41.               (command "text" "style" "HZ" "j" "MC" px1 k1 j0 sts)
  42.            )
  43.                            
  44.                         (setq dqq str)
  45.                 )
  46.                     (progn
  47.       (if (or (= dqq "f") (= dqq "F"))
  48.         (progn
  49.          (setq TFF 0)
  50.          (setq SDQ "f" DQWZ "上对齐")
  51.                                  (command "line" pc1 pc2 "")
  52.                                  (setq pt1 (polar pc1 (+ jd0 (* 1.5 pi)) LKK))
  53.                                  (setq pt2 (polar pc2 (+ jd0 (* 1.5 pi)) LKK))
  54.                                  (command "line" pt1 pt2 "")
  55.          )
  56.        )
  57.        (if (or (= dqq "c") (= dqq "C"))
  58.          (progn
  59.          (setq TFF 0)
  60.          (setq SDQ "c" DQWZ "居中")
  61.                                  (setq l1 (/ LKK 2))
  62.                                  (setq pt1 (polar pc1 (+ jd0 (* 1.5 pi)) l1))
  63.                                  (setq pt2 (polar pc2 (+ jd0 (* 1.5 pi)) l1))
  64.                                  (command "line" pt1 pt2 "")
  65.                            (setq pt3 (polar pc1 (+ jd0 (* 0.5 pi)) l1))
  66.                                  (setq pt4 (polar pc2 (+ jd0 (* 0.5 pi)) l1))
  67.                                  (command "line" pt3 pt4 "")
  68.          )
  69.        )
  70.        (if (or (= dqq "b") (= dqq "B"))
  71.          (progn
  72.          (setq TFF 0)
  73.          (setq SDQ "b" DQWZ "下对齐")
  74.                            (command "line" pc1 pc2 "")
  75.                                  (setq pt1 (polar pc1 (+ jd0 (* 0.5 pi)) LKK))
  76.                                  (setq pt2 (polar pc2 (+ jd0 (* 0.5 pi)) LKK))
  77.                                  (command "line" pt1 pt2 "")
  78.          )
  79.        ))
  80.      )
  81.        )

另外两点求角度直接用 (angle p1 p2)就行了。。。。
 楼主| 发表于 2015-4-15 20:01:20 | 显示全部楼层
llsheng_73 发表于 2015-4-15 19:48
(while
                                        (setq pc1 (getpoint "\n请输入第一点:"))
           ...

谢谢大神的指点,不过还有个小问题,如果我选择对齐方式不同会在上次绘图结束的地方生两条直线,不知道这怎么改呢?
 楼主| 发表于 2015-4-15 20:20:22 | 显示全部楼层
llsheng_73 发表于 2015-4-15 19:48
(while
                                        (setq pc1 (getpoint "\n请输入第一点:"))
           ...

发现问题主要是上一次的PC1和PC2变量都有赋值,如果选择对齐方式程序就自动向下执行程序了,所以如果选择任何一种对齐方式,例如输入B(下对齐)程序就会在原来的PC1与PC2点自动计算,画线!大神,这种情况该如何解决才最好?
 楼主| 发表于 2015-4-15 21:33:46 | 显示全部楼层
有版主来看看吗?
 楼主| 发表于 2015-4-15 23:49:59 | 显示全部楼层
睡前顶一下。恳请版主或者@llsheng_73(再次)出手相助。在此感谢。
 楼主| 发表于 2015-4-16 09:06:02 | 显示全部楼层
召唤个大神,或者提供下修改的思路也好啊。
 楼主| 发表于 2015-4-16 11:29:25 | 显示全部楼层
看来没有大神光顾了[em0]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-22 09:19 , Processed in 0.176775 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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