找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1303|回复: 4

[LISP程序]:请高手帮忙诊断一下这个程序,老出问题.

[复制链接]
发表于 2007-10-2 22:19:29 | 显示全部楼层 |阅读模式

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

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

×
请高手帮忙诊断一下这个程序,老出问题.本人学lsp不深,请大虾们多多指点.(注明:此程序借鉴了网上资料,出处不详了,如原作者见到,还望指点).

  1.   [FONT=courier new]
  2. ;;主要思路:将pl图层上的多条pline线每条最长的一段两端加钩,其余的删除。
  3. (defun c:BZG ()
  4.    (SSBDJ)
  5.    (BZGz)
  6.   (prin1)
  7. )
  8.                
  9. (defun xdd1(/ eobj i leng pt0 pt1)
  10.   ((setq eobj (vlax-ename->vla-object ssn))
  11.         i    -1
  12.     Leng-max 0
  13.   )  
  14.   (while (setq pt0 (vlax-curve-getPointAtParam eobj (setq i (1+ i))))
  15.     (if    (setq pt1 (vlax-curve-getPointAtParam eobj (setq k (1+ i))))
  16.       (progn
  17.     (setq Leng (distance pt0 pt1))
  18.     (if (> leng leng-max)
  19.        (setq    ptmax0 pt0
  20.         ptmax1 pt1
  21.         leng-max leng
  22.       )   
  23.     )
  24.       )
  25.     )
  26.   )
  27. )


  28. (defun SSBDJ(/ old_wid wid width ssbdj)  
  29.   (setvar "cmdecho" 0)
  30.   (setq old_wid (getvar "PLINEWID")) ;线宽度(默认为图中默认PLINEWID值)
  31.   (setq wid (strcat "\n 请输入线宽度<" (rtos old_wid 2) ">: "))
  32.   (setq width (getdist wid))
  33.   (if (null width) (setq width old_wid))
  34.   (prompt "\n\t选择加钩的pline线<退出> : ")
  35.   (setq ssgj (ssget '((8 . "pl" )) )) ;图层为pl的线才加
  36. )

  37. (defun BZGz ()
  38.   (setq n 0)
  39.   (while (< n (sslength ssgj))
  40.       
  41.       (setq ssn (ssname ssgj  n))
  42.       (setq ssdata (entget ssn))      
  43.       (setq sstyp (cdr (assoc 0 ssdata)))
  44.       (if (= sstyp "LWPOLYLINE")
  45.         (progn
  46.           (xdd1)
  47.       (setq ang (angle ptmax0 ptmax1))
  48.       (setq pp1 (polar ptmax0 ( + (* pi 0.25) ang) 150))
  49.       (setq pp2 (polar ptmax1 ( + (* pi 0.75) ang) 150))
  50.         
  51.       (command "pline" pp1 "w" width width ptmax0 ptmax1 pp2"")
  52.       (command "erase" (car ssn) "" )   ;将选中的pline删除
  53.         )
  54.       )
  55.   (setq n (1+ n))
  56.   );end while
  57.   (prin1)
  58.   
  59. )  
  60.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-10-3 00:06:55 | 显示全部楼层
应该这样写

  1. (defun c:tt (/ old_wid width ss        ssl i e        el pts pdl ptl p1 p2 p3        p4 an
  2.              lay)
  3.   (setq        old_wid        (getvar "PLINEWID")
  4.         width        (getdist (strcat "\n 请输入线宽度<" (rtos old_wid 2) ">: "))
  5.   )
  6.   (if (null width)
  7.     (setq width old_wid)
  8.   )
  9.   (prompt "\n\t选择加钩的pline线<退出> : ")
  10.   (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  11.     (progn
  12.       (setq ssl        (sslength ss)
  13.             i        -1
  14.       )
  15.       (repeat ssl
  16.         (setq e          (ssname ss (setq i (1+ i)))
  17.               el  (entget e)
  18.               pts (mapcar 'cdr
  19.                           (vl-remove-if-not '(lambda (x) (= (car x) 10)) el)
  20.                   )
  21.               ptl (mapcar
  22.                     '(lambda (x) (list (car x) (cadr x)))
  23.                     (cdar (vl-sort
  24.                             (mapcar '(lambda (a b) (list (distance a b) a b))
  25.                                     pts
  26.                                     (cdr pts)
  27.                             )
  28.                             '(lambda (e1 e2) (> (car e1) (car e2)))
  29.                           )
  30.                     )
  31.                   )
  32.               p2  (car ptl)
  33.               p3  (cadr ptl)
  34.               an  (angle p2 p3)
  35.               p1  (polar p2 (+ (* pi 0.25) an) 150)
  36.               p4  (polar p3 (+ (* pi 0.75) an) 150)
  37.               lay (assoc 8 el)
  38.         )
  39.         (entmake (append '((0 . "LWPOLYLINE")
  40.                            (100 . "AcDbEntity")
  41.                            (100 . "AcDbPolyline")
  42.                            (90 . 4)
  43.                            (70 . 0)
  44.                           )
  45.                          (list (cons 43 width) lay)
  46.                          (list (cons 10 p1)
  47.                                (cons 10 p2)
  48.                                (cons 10 p3)
  49.                                (cons 10 p4)
  50.                          )
  51.                  )
  52.         )
  53.         (entdel e)
  54.       )
  55.     )
  56.   )
  57.   (princ)
  58. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-3 09:34:37 | 显示全部楼层
多谢Free-Lancer 指点,你的代码是通过修改pline线的顶点实现的,如果要在两端加弧形的pline,不知道要怎么样实现?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2007-10-3 11:29:01 | 显示全部楼层
谢谢Free-Lancer热心解答.已经解决.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 00:20 , Processed in 0.443369 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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