找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 792|回复: 3

[求助] [求助]:新手求教:代码里奇怪问题

[复制链接]
发表于 2006-12-2 11:16:35 | 显示全部楼层 |阅读模式

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

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

×

  1.   [FONT=courier new]

  2. (defun c:xs (/ n ss m k)
  3.   (initget "2 4 5 6 7 8")               
  4.   (setq        n
  5.          (getkword
  6.            "\n请输入需标注线数:2 4 5 6 7 8 <2>:"
  7.          )
  8.   )
  9.   (if (= n nil)
  10.     (setq n "2")
  11.   )
  12.   (prompt "\n请选择需标注的线:")
  13.   (setq ss (ssget))
  14.   (setq        m 0
  15.         k 0
  16.   )

  17.   (if (= (sslength ss) 1)
  18.     (oneline_draw)
  19.   )

  20.   (multiline_draw)


  21.   (princ (strcat "\n共有<" (itoa k) ">根线标注了"))
  22.   (prin1)
  23. )



  24. (defun oneline_draw
  25.                     (/            po           en          en_data        en_type
  26.                      pt1    pt2           px1          px2         py1        py2    ang_line
  27.                      ang_ptA           ptA          ptB         ptT
  28.                     )

  29.   (setq en (ssname ss m))
  30.   (setq en_data (entget en))
  31.   (setq en_type (cdr (assoc 0 en_data)))
  32.   (if (= en_type "LINE")               
  33.     (progn (                               
  34.             (setq pt1 (cdr (assoc 10 en_data)))
  35.              (setq px1 (car pt1))
  36.              (setq py1 (cadr pt1))
  37.              (setq pt2 (cdr (assoc 11 en_data)))
  38.              (setq px2 (car pt2))
  39.              (setq py2 (cadr pt2))
  40.              (setq ang_line (atan (/ (- py1 py2) (- px1 px2))))                                       
  41.              (setq ang_ptA (+ ang_line (/ pi 3)))
  42.              (setq po (getpoint))
  43.              (setq ptA (polar po ang_ptA 100))
  44.              (setq ptB (Polar ptA (+ pi ang_ptA) 200))
  45.              (command "line" ptA ptB "")
  46.              (setq k (1+ k))
  47.              (setq ptT (polar ptA (/ (* 2 pi) 3) 50))
  48.              (command "text" ptT "" "" n "")
  49.              (prin1)
  50.            )
  51.     )
  52.   )
  53. )


  54. (defun multiline_draw
  55.                       (/      po     en            en_data          en_type
  56.                        pt1    pt2    px1    px2           py1          py2
  57.                        ang_line             ang_ptA           ptA          ptB         ptT
  58.                        pox    poy
  59.                       )
  60.   (repeat (sslength ss)
  61.     (setq en (ssname ss m))
  62.     (setq en_data (entget en))
  63.     (setq en_type (cdr (assoc 0 en_data)))
  64.     (if        (= en_type "LINE")               

  65.       (progn (                               
  66.               (setq pt1 (cdr (assoc 10 en_data)))
  67.                (setq px1 (car pt1))
  68.                (setq py1 (cadr pt1))
  69.                (setq pt2 (cdr (assoc 11 en_data)))                                       
  70.                (setq px2 (car pt2))
  71.                (setq py2 (cadr pt2))
  72.                (setq ang_line (atan (/ (- py1 py2) (- px1 px2))))                               
  73.                (setq ang_ptA (+ ang_line (/ pi 3)))
  74.                (setq pox (/ (+ px1 px2) 2))
  75.                (setq poy (/ (+ px1 px2) 2))
  76.                (setq po (list pox poy 0))
  77.                (setq ptA (polar po ang_ptA 100))
  78.                (setq ptB (Polar ptA (+ pi ang_ptA) 200))
  79.                (command "line" ptA ptB "")
  80.                (setq k (1+ k))
  81.                (setq ptT (polar ptA (/ (* 2 pi) 3) 50))
  82.                (command "text" ptT "" "" n "")
  83.              )
  84.       )
  85.     )
  86.   )
  87.   (setq m (1+ m))

  88.   (prin1)
  89. )

  90.   [/FONT]


加载运行后,对于单线,提示:“numberp: nil”
然后调试,在 oneline_draw 的了程序里设断点:
断点设在 “ (setq ang_line (atan (/ (- py1 py2) (- px1 px2))))  ”之前查看
pt1 值有,px1 px2  py1 py2 均为 nil 。
断点设在一直往上移,最后移到 “ setq pt1 (cdr (assoc 10 en_data)))  ”之前,然后 F8 逐步向下调试,奇怪的是,px1 px2  py1 py2 的值都能显示出来了!!然后撤去断点,再运行,仍旧提示:“numberp: nil”,把我撤底搞糊涂了。。。

在调试 “multiline_draw”也同样遇到上述问题。
在完成同上述的逐步调后,REPEAT第二条直线时,出现了问题。

我刚学LISP,是新手,对于LISP的兴趣很高,希望能在这儿认识些高手,好好学习学习。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 10493个

财富等级: 富甲天下

发表于 2006-12-2 17:16:23 | 显示全部楼层
两个错,
1、“(PROGN (” 后的左括弧去掉。要去一对。
2、最后的(SETQ M (1+ M))前移一行。
另:子程序未尾的(PRIN1)可以不要。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-12-3 08:54:58 | 显示全部楼层
  1. [FONT=courier new](defun c:test (/ n ss m)
  2.   (initget "2 4 5 6 7 8")
  3.   (setq n (getkword "\n请输入需标注线数:2 4 5 6 7 8 <2>:"))
  4.   (if (= n nil)
  5.     (setq n "2")
  6.   )
  7.   (prompt "\n请选择需标注的线: ")
  8.   (setq        ss (ssget)
  9.         m  -1
  10.         k  0
  11.   )
  12.   (multiline_draw)
  13.   (princ (strcat "\n共有<" (itoa k) ">根线标注了"))
  14.   (prin1)
  15. )
  16. (defun multiline_draw (/ edata etype pt1 pt2 px1 px2 py1 py2 ang po ptA
  17.                        ptB ptT)
  18.   (while (setq s1 (ssname ss (setq m (1+ m))))
  19.     (setq edata        (entget s1)
  20.           etype        (cdr (assoc 0 edata))
  21.     )
  22.     (if        (= etype "LINE")
  23.       (progn (setq pt1 (cdr (assoc 10 edata))
  24.                    px1 (car pt1)
  25.                    py1 (cadr pt1)
  26.                    pt2 (cdr (assoc 11 edata))
  27.                    px2 (car pt2)
  28.                    py2 (cadr pt2)
  29.                    ang (+ (atan (/ (- py1 py2) (- px1 px2))) (/ pi 3))
  30.                    po  (list (/ (+ px1 px2) 2) (/ (+ py1 py2) 2) 0)
  31.                    ptA (polar po ang 100)
  32.                    ptB (Polar ptA (+ pi ang) 200)
  33.                    ptT (polar ptA (/ (* 2 pi) 3) 50)
  34.                    k   (1+ k)
  35.              )
  36.              (command "line" ptA ptB "")
  37.              (command "text" ptT "" "" n)
  38.       )
  39.     )
  40.   )
  41. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-5 20:46:27 | 显示全部楼层
谢谢各位。
前几天看了二楼,我改了一下,但又出现怪问题了。
一会儿是短线角度转不出来,跟需标注线平行;一会儿是文字没有了;一会儿是连短线都没有了,只是一个点,虽然我有监视里明明看到ptA与ptB的坐标不一样,但就是画不出短线,都不知道为什么。
版主最后的 (command "text" ptT "" "" n) 出不来文字,改成(command "text" ptT ""  n "" ) 就出来文字了...,又蛮怪的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-19 01:42 , Processed in 0.416486 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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