找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 612|回复: 1

[编程申请]: 这段lsp问题在哪?

[复制链接]
发表于 2004-2-22 12:39:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我是搞结构的,不大用天正,但是天正里标尺寸有一个很好的命令沿直墙注,我标柱、承台定位时,只需点取柱、承台的两点,程序自动判断两点之间是否有Dote层的轴线,然後以轴线为界标出两尺寸,且尺寸自动移开不打架,这样标柱定位时,每个柱只需标两次,水平和垂直,且不用因为打架而移数字,非常方便。但天正里的dimlw.lsp(里有沿直墙注:dimlwf;等距注墙:dimlwt)是AutoCAD PROTECTED LISP file,在R14中加载不能用。现在我用undisp.exe反编译dimlw.lsp后文件经本坛一位仁兄整理后如下,在R14中可以加载,运行却出错,请各位帮我看一下错在哪或帮我修改一下能完成上面的功能,我只需要dimlwf一个命令能用就行,diwlmt我不用,也帮我删掉,减减肥。

(defun dimlw1 (p / d)
  (setq d (distance q1 p))
  (if (equal dl (+ d (distance q2 p)) mm)
    (setq l1 (cons (cons (atof (rtos d 2 1)) p) l1))
  )
)
(defun dimlw2 (/ dsty)
  (if (setq dsty (cond ((and tf1 tf2) nil)
                       (tf1 "DIMB")
                       (tf2 "DIMA")
                       ("AXIS")
                 )
      )
    (progn (atop (entlast)) (chslb 3 (strcat dsty lna)))
  )
)
(defun dimlw (tf   /        mm   mma  mw   mx   pi32 blc  lna  ss        e
              elast        q1   q2          p0   p1   p2         p3   p4   a1        a2
              dl   l1        l2   le          tf1  tf2  tfz
             )
  (setq        mm   0.1
        mma  1e-2
        mw   19.
        mx   1e3
        pi32 (+ pi _pi2)
  )
  (pouts "公共标注")
  (if (and (setq q1 (fcpy "\n请点一下要标注(直墙线)的起始点 <退出>: "))
           (setq q2 (fcpy "\n结束点 <退出>: " q1))
           (setvar "osmode" 32)
           (setq p0 (getpoint (strcat "\n再点一下"
                                      (if tf
                                        "外面一道"
                                        ""
                                      )
                                      "尺寸线的位置 <退出>: "
                              )
                    )
           )
      )
    (progn
      (sndtin)
      (setvar "osmode" 0)
      (if (setq tfz (findshx q1 q2))
        (rdsld q1 q2)
      )
      (setq lna        (sldna "dimn")
            blc        (* 800 lna)
            lna        (if (= lna 1)
                  ""
                  (rtos (* 100 lna) 2 0)
                )
            p0        (cond ((osnap p0 "nea"))
                      (p0)
                )
            dl        (distance q1 q2)
            l1        (list (cons 0 q1) (cons (float (fix (+ 0.5 dl))) q2))
            a1        (angle q1 q2)
            a2        (+ _pi2 a1)
            p1        (polar q1 a1 (- mm))
            p2        (polar q2 a1 mm)
            ss        (ssget "CP"
                       (ltoecs (list (polar p1 a2 (- mw))
                                     (polar p1 a2 mw)
                                     (polar p2 a2 mw)
                                     (polar p2 a2 (- mw))
                               )
                       )
                       (list '(0 . "LINE") (cons 8 (parea "*墙线")))
                )
      )
      (if ss
        (progn
          (transws ss 0)
          (while (slb_slb 0)
            (if        (and (< (abs (sort (setq p1 (gcolor 10)) q1 q2)) mm)
                     (< (abs (sort (setq p2 (gcolor 11)) q1 q2)) mm)
                )
              (progn (dimlw1 p1) (dimlw1 p2))
            )
          )
        )
      )
      (if (setq        ss
                 (ssget        "F"
                        (ltoecs (list (polar q1 a1 mm) (polar q2 a1 (- mm))))
                        (list '(0 . "LINE") (cons 8 (parea "*轴线")))
                 )
          )
        (progn
          (setq l2 nil)
          (transws ss 0)
          (while (setq e (slb_slb 0))
            (setq p3 (gcolor 10)
                  p4 (gcolor 11)
                  p3 (splpath q1 q2 p3 p4)
            )
            (if        p3
              (progn (setq l2
                            (cons
                              (cons e
                                    (cons (atof (rtos (distance q1 p3) 2 1)) p3)
                              )
                              l2
                            )
                     )
                     (redraw e 3)
              )
            )
          )
          (if l2
            (progn
              (while (setq
                       e (interst "\n请点取不需要标注的轴线 <结束点取>: "
                                  "*轴线"
                         )
                     )
                (setq e         (car e)
                      l2 (apply 'end (cons e l2))
                )
                (redraw e 4)
              )
              (foreach e l2 (redraw (car e) 4))
              (setq l1 (append l1 (mapcar 'cdr l2)))
            )
          )
        )
      )
      (if tf
        (setq p1 (inters q1 q2 p0 (polar p0 a2 mx) nil)
              p0 (polar p0 (angle p0 p1) blc)
        )
      )
      (if (setq        l1 (apply 'mkpatb l1)
                p3 (polar p0 a1 mx)
                p1 (inters q1 (polar q1 a2 mx) p0 p3 nil)
                p2 (inters q2 (polar q2 a2 mx) p0 p3 nil)
                ss (ssget "F"
                          (ltoecs (list (polar p1 a1 (- mm)) (polar p2 a1 mm)))
                          '((0 . "LINE"))
                   )
          )
        (progn
          (setq le nil)
          (transws ss 0)
          (while (setq e (slb_slb 0))
            (if
              (and (setq p1 (splpath q1 q2 (gcolor 10) (gcolor 11) nil))
                   (setq l2 (assoc (fix (+ 0.5 (distance q1 p1))) l1))
              )
               (setq l1        (subst (cons nil (cdr l2)) l2 l1)
                     le        (cons e le)
               )
            )
          )
        )
      )
      (setq p1        (car l1)
            tf1        (car p1)
            l1        (cdr l1)
            p2        (car l1)
            tf2        (car p2)
            p1        (cdr p1)
            p2        (cdr p2)
            p2        (polar p1
                       (cond ((> (+ _pi2 mma) a1 (- _pi2 mma)) _pi2)
                             ((> (+ pi32 mma) a1 (- pi32 mma)) pi32)
                             (a1)
                       )
                       (distance p1 p2)
                )
      )
      (if _dim_auto
        (progn (_@ld "dimadj") (setq elast (entlast)))
      )
      (command "ali" p1 p2 p0 "")
      (dimlw2)
      (foreach l2 (cdr l1)
        (setq p1 (cdr l2))
        (command "ali" p2 p1 p0 "")
        (setq tf1 tf2
              tf2 (car l2)
              p2  p1
        )
        (dimlw2)
      )
      (command "res" "normal" "exit")
      (if _dim_auto
        (dimsort elast)
      )
      (foreach e le (redraw e))
      (if tfz
        (command ".zoom" "p")
      )
      (slb_sld)
    )
  )
  (mkstr2)
)
(defun c:dimlwt () (dimlw T))
(defun c:dimlwf () (dimlw nil))

运行出错如下:

Command: dimlwf
error: bad argument type
(+ PI _PI2)
(SETQ MM 0.1 MMA 0.01 MW 19.0 MX 1000.0 PI32 (+ PI _PI2))
(DIMLW nil)
(C:DIMLWF)
*Cancel*
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-2-22 16:29:10 | 显示全部楼层
在程序前面加一句:
(setq _pi2 (* 2 pi))
试试看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 22:37 , Processed in 0.413146 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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