找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 718|回复: 6

[求助]:请帮我看一下这lsp文件错在哪?

[复制链接]
发表于 2004-2-21 21:37:31 | 显示全部楼层 |阅读模式

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

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

×
下面是我反编译天正里的dimlw.lsp(AutoCAD PROTECTED LISP file)文件后的文件,里面有标注尺寸里的沿直墙注命令dimlwf,我加载下面的不能用,错在哪?

(_@ld"clqlib")
(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))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-2-21 21:41:20 | 显示全部楼层
你的程序没有格式,实在没法看。lisp这么排版机器是很容易认识没有区别,但人看就是在是头痛,不出错才怪呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-21 21:49:16 | 显示全部楼层
编译出来就是这样,我一时还没能把()一一匹配整理好,等我整理好我再贴一次吧!天正的东西肯定不会有参数的问题,是不是调用格式有问题?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-21 23:01:01 | 显示全部楼层

  1.   [FONT=courier new]

  2. (defun dimlw1 (p / d)
  3.   (setq d (distance q1 p))
  4.   (if (equal dl (+ d (distance q2 p)) mm)
  5.     (setq l1 (cons (cons (atof (rtos d 2 1)) p) l1))
  6.   )
  7. )
  8. (defun dimlw2 (/ dsty)
  9.   (if (setq dsty (cond ((and tf1 tf2) nil)
  10.                        (tf1 "DIMB")
  11.                        (tf2 "DIMA")
  12.                        ("AXIS")
  13.                  )
  14.       )
  15.     (progn (atop (entlast)) (chslb 3 (strcat dsty lna)))
  16.   )
  17. )
  18. (defun dimlw (tf   /        mm   mma  mw   mx   pi32 blc  lna  ss        e
  19.               elast        q1   q2          p0   p1   p2         p3   p4   a1        a2
  20.               dl   l1        l2   le          tf1  tf2  tfz
  21.              )
  22.   (setq        mm   0.1
  23.         mma  1e-2
  24.         mw   19.
  25.         mx   1e3
  26.         pi32 (+ pi _pi2)
  27.   )
  28.   (pouts "公共标注")
  29.   (if (and (setq q1 (fcpy "\n请点一下要标注(直墙线)的起始点 <退出>: "))
  30.            (setq q2 (fcpy "\n结束点 <退出>: " q1))
  31.            (setvar "osmode" 32)
  32.            (setq p0 (getpoint (strcat "\n再点一下"
  33.                                       (if tf
  34.                                         "外面一道"
  35.                                         ""
  36.                                       )
  37.                                       "尺寸线的位置 <退出>: "
  38.                               )
  39.                     )
  40.            )
  41.       )
  42.     (progn
  43.       (sndtin)
  44.       (setvar "osmode" 0)
  45.       (if (setq tfz (findshx q1 q2))
  46.         (rdsld q1 q2)
  47.       )
  48.       (setq lna        (sldna "dimn")
  49.             blc        (* 800 lna)
  50.             lna        (if (= lna 1)
  51.                   ""
  52.                   (rtos (* 100 lna) 2 0)
  53.                 )
  54.             p0        (cond ((osnap p0 "nea"))
  55.                       (p0)
  56.                 )
  57.             dl        (distance q1 q2)
  58.             l1        (list (cons 0 q1) (cons (float (fix (+ 0.5 dl))) q2))
  59.             a1        (angle q1 q2)
  60.             a2        (+ _pi2 a1)
  61.             p1        (polar q1 a1 (- mm))
  62.             p2        (polar q2 a1 mm)
  63.             ss        (ssget "CP"
  64.                        (ltoecs (list (polar p1 a2 (- mw))
  65.                                      (polar p1 a2 mw)
  66.                                      (polar p2 a2 mw)
  67.                                      (polar p2 a2 (- mw))
  68.                                )
  69.                        )
  70.                        (list '(0 . "LINE") (cons 8 (parea "*墙线")))
  71.                 )
  72.       )
  73.       (if ss
  74.         (progn
  75.           (transws ss 0)
  76.           (while (slb_slb 0)
  77.             (if        (and (< (abs (sort (setq p1 (gcolor 10)) q1 q2)) mm)
  78.                      (< (abs (sort (setq p2 (gcolor 11)) q1 q2)) mm)
  79.                 )
  80.               (progn (dimlw1 p1) (dimlw1 p2))
  81.             )
  82.           )
  83.         )
  84.       )
  85.       (if (setq        ss
  86.                  (ssget        "F"
  87.                         (ltoecs (list (polar q1 a1 mm) (polar q2 a1 (- mm))))
  88.                         (list '(0 . "LINE") (cons 8 (parea "*轴线")))
  89.                  )
  90.           )
  91.         (progn
  92.           (setq l2 nil)
  93.           (transws ss 0)
  94.           (while (setq e (slb_slb 0))
  95.             (setq p3 (gcolor 10)
  96.                   p4 (gcolor 11)
  97.                   p3 (splpath q1 q2 p3 p4)
  98.             )
  99.             (if        p3
  100.               (progn (setq l2
  101.                             (cons
  102.                               (cons e
  103.                                     (cons (atof (rtos (distance q1 p3) 2 1)) p3)
  104.                               )
  105.                               l2
  106.                             )
  107.                      )
  108.                      (redraw e 3)
  109.               )
  110.             )
  111.           )
  112.           (if l2
  113.             (progn
  114.               (while (setq
  115.                        e (interst "\n请点取不需要标注的轴线 <结束点取>: "
  116.                                   "*轴线"
  117.                          )
  118.                      )
  119.                 (setq e         (car e)
  120.                       l2 (apply 'end (cons e l2))
  121.                 )
  122.                 (redraw e 4)
  123.               )
  124.               (foreach e l2 (redraw (car e) 4))
  125.               (setq l1 (append l1 (mapcar 'cdr l2)))
  126.             )
  127.           )
  128.         )
  129.       )
  130.       (if tf
  131.         (setq p1 (inters q1 q2 p0 (polar p0 a2 mx) nil)
  132.               p0 (polar p0 (angle p0 p1) blc)
  133.         )
  134.       )
  135.       (if (setq        l1 (apply 'mkpatb l1)
  136.                 p3 (polar p0 a1 mx)
  137.                 p1 (inters q1 (polar q1 a2 mx) p0 p3 nil)
  138.                 p2 (inters q2 (polar q2 a2 mx) p0 p3 nil)
  139.                 ss (ssget "F"
  140.                           (ltoecs (list (polar p1 a1 (- mm)) (polar p2 a1 mm)))
  141.                           '((0 . "LINE"))
  142.                    )
  143.           )
  144.         (progn
  145.           (setq le nil)
  146.           (transws ss 0)
  147.           (while (setq e (slb_slb 0))
  148.             (if
  149.               (and (setq p1 (splpath q1 q2 (gcolor 10) (gcolor 11) nil))
  150.                    (setq l2 (assoc (fix (+ 0.5 (distance q1 p1))) l1))
  151.               )
  152.                (setq l1        (subst (cons nil (cdr l2)) l2 l1)
  153.                      le        (cons e le)
  154.                )
  155.             )
  156.           )
  157.         )
  158.       )
  159.       (setq p1        (car l1)
  160.             tf1        (car p1)
  161.             l1        (cdr l1)
  162.             p2        (car l1)
  163.             tf2        (car p2)
  164.             p1        (cdr p1)
  165.             p2        (cdr p2)
  166.             p2        (polar p1
  167.                        (cond ((> (+ _pi2 mma) a1 (- _pi2 mma)) _pi2)
  168.                              ((> (+ pi32 mma) a1 (- pi32 mma)) pi32)
  169.                              (a1)
  170.                        )
  171.                        (distance p1 p2)
  172.                 )
  173.       )
  174.       (if _dim_auto
  175.         (progn (_@ld "dimadj") (setq elast (entlast)))
  176.       )
  177.       (command "ali" p1 p2 p0 "")
  178.       (dimlw2)
  179.       (foreach l2 (cdr l1)
  180.         (setq p1 (cdr l2))
  181.         (command "ali" p2 p1 p0 "")
  182.         (setq tf1 tf2
  183.               tf2 (car l2)
  184.               p2  p1
  185.         )
  186.         (dimlw2)
  187.       )
  188.       (command "res" "normal" "exit")
  189.       (if _dim_auto
  190.         (dimsort elast)
  191.       )
  192.       (foreach e le (redraw e))
  193.       (if tfz
  194.         (command ".zoom" "p")
  195.       )
  196.       (slb_sld)
  197.     )
  198.   )
  199.   (mkstr2)
  200. )
  201. (defun c:dimlwt () (dimlw T))
  202. (defun c:dimlwf () (dimlw nil))
  203.   [/FONT]

编译已经不出问题了,但是程序的功能不知道,自己加载试试运行吧!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-21 23:47:20 | 显示全部楼层

可以加载,但运行出错!

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*
功能就是天正3.0里尺寸标注里的沿直墙注,比如标注柱,点柱左右两点,自动以轴线分界标注两个尺寸且不打架。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-2-22 12:09:09 | 显示全部楼层
不要作无谓的努力了,这是系列软件的一部分,需要其他程序的支持,程序中不仅仅是“_pi2”(估计是全局变量),还有不少函数需要定义,如“_@ld”、“findshx”、“rdsld”、“sndtin”等等。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-24 21:59:50 | 显示全部楼层
赞同!别人的程序你可以研究,但最好自己写一个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-20 21:32 , Processed in 0.184870 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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