找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 872|回复: 3

[LISP程序]:这个程序错在那

[复制链接]
发表于 2006-3-31 14:28:54 | 显示全部楼层 |阅读模式

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

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

×
请版主看下面的程序

;;;程序tel用于在直线中插入文字

(defun c:tel(/ ss s ang_ln ang_ln_tp ang_tx ang_mov os_mode tx_size tmp pt_ln_sta pt_ln_end pt_tx pt_tx_tp wid_br pt_bk_a pt_bk_b ln_find)

;;选择直线
(prompt "Please select a line!!!")
(setq ss (ssget '((0 . "LINE"))))
(if (/= ss nil)
        (progn
                (setq s (ssname ss 0))

;;计算直线的角度
                (setq pt_ln_sta (cdr (assoc 10 (entget s))))
                (setq pt_ln_end (cdr (assoc 11 (entget s))))
                (setq ang_ln (angle pt_ln_sta pt_ln_end))
                (setq ang_tx ang_ln)
                (if (and (> ang_ln (angtof "100")) (<= ang_ln (angtof "180")))
                         (setq ang_tx (+ ang_ln (angtof "180")))
                         (if (and (> ang_ln (angtof "180")) (<= ang_ln (angtof "280")))
                                (setq ang_tx (- ang_ln (angtof "180")))
                           )
                );endif                             
                (setq ang_mov (+ ang_ln (angtof "90")))

;;初始化比例、字高
                (if (= high_tel nil)
                        (progn
                                (setq sca_ft nil)
                                (load "high_tel")
                        )
                );endif
                (setq tx_size (getvar "textsize"))

;;确定文字值
                (if (= tx_val_il nil) (setq tx_val_il "F"))
                (setq tmp (strcat "Please input the symbol to be insert:<" tx_val_il ">"))
                (prompt tmp)
                (setq tmp (getstring))
                (if (/= tmp "") (setq tx_val_il tmp))

;;计算直线打断宽度
                (setvar "textsize" high_tel)
                (command "text" "j" "m" "0,0" "" "" tx_val_il)
                (setq wid_br (textbox (list (assoc 1 (entget (entlast))))))
                (setq pt_bk_a (car wid_br) pt_bk_b (cadr wid_br))
                (setq wid_br (/ (- (car pt_bk_b) (car pt_bk_a)) 2))
                (setq wid_br (+ wid_br (* 0.8 sca_ft)))
                (setvar "textsize" tx_size)
                (command "erase" (entlast) "")

;;指定文字近似插入点
                (setq os_mode (getvar "osmode"))
                (setvar "osmode" 0)
                (setq pt_tx_tp (getpoint "\nPlease choose the text position!!!"))

;;循环开始
                (while (/= pt_tx_tp nil)
                        (progn
;计算文字插入点(精确)
                                (setq pt_tx (polar pt_tx_tp ang_mov 10))
                                (setq pt_tx (inters pt_ln_sta
                                                    pt_ln_end
                                                    pt_tx_tp
                                                    pt_tx
                                                    nil
                                             )
                                );endsetq

;根据插入点选直线
                                (setq ss (ssget "c" pt_tx pt_tx '((0 . "LINE"))))
                                (if (/= ss nil)
                                        (progn
                                                (setq pt_bk_b (sslength ss))
                                                (setq pt_bk_a 0)
                                                (setq ln_find 0)
                                                (while (and (= ln_find 0) (< pt_bk_a pt_bk_b))
                                                        (progn
                                                                (setq s (ssname ss pt_bk_a))
                                                                (setq ang_ln_tp (angle (cdr (assoc 10 (entget s)))
                                                                                       (cdr (assoc 11 (entget s)))
                                                                              );endangle
                                                                );endsetq
                                                                (setq pt_bk_a (1+ pt_bk_a))
                                                                (if (= (angtos ang_ln_tp) (angtos ang_ln));;直线找到
                                                                        (progn
                                                                                (setq ln_find 1)
;写
                                                                                (setvar "textsize" high_tel)
                                                                                (command "text" "j" "m" pt_tx "" (angtos ang_tx) tx_val_il)
                                                                                (setvar "textsize" tx_size)
;确定直线打断点
                                                                                (setq pt_bk_a (polar pt_tx ang_ln wid_br))
                                                                                (setq pt_bk_b (polar pt_tx (+ Pi ang_ln) wid_br))
;打断直线
                                                                                (command "break" s pt_bk_a pt_bk_b)
                                                                        );endprogn
                                                                );endif
                                                        );endprogn
                                                );endwhile
                                        );endprogn
                                );endif
;指定文字近似插入点
                                (setq pt_tx_tp (getpoint "\nPlease choose the next position!!!"))
;重复
                        );endprogn
                );endwhile
                (setvar "osmode" os_mode)
        );endprogn
);endif

;;结束
(princ)
)

加载后,
_appload 已成功加载 290136_tel.lsp。
命令: tel
Please select a line!!!
选择对象: 找到 1 个
选择对象:  错误 : LOAD 失败: "high_tel"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-3-31 16:26:47 | 显示全部楼层
  1. [FONT=courier new];;;程序tel用于在直线中插入文字
  2. (defun c:tel ()
  3.   (prompt "Please select a line!!!")
  4.   (setq ss (ssget '((0 . "LINE"))))
  5.   (if (/= ss nil)
  6.     (progn
  7.       ;;计算直线的角度
  8.       (setq s              (ssname ss 0)
  9.             pt_ln_sta (cdr (assoc 10 (entget s)))
  10.             pt_ln_end (cdr (assoc 11 (entget s)))
  11.             ang_ln    (angle pt_ln_sta pt_ln_end)
  12.             ang_tx    ang_ln
  13.       )
  14.       (if (and (> ang_ln (angtof "100")) (<= ang_ln (angtof "180")))
  15.         (setq ang_tx (+ ang_ln (angtof "180")))
  16.         (if (and (> ang_ln (angtof "180")) (<= ang_ln (angtof "280")))
  17.           (setq ang_tx (- ang_ln (angtof "180")))
  18.         )
  19.       )
  20.       ;;初始化比例、字高
  21.       (setq ang_mov (+ ang_ln (angtof "90")))
  22.       (if (= high_tel nil)
  23.         (progn
  24.           (setq sca_ft 1)
  25.           (setq high_tel 300)
  26.         )
  27.         (setq sca_ft 1)
  28.       )
  29.       (setq tx_size (getvar "textsize"))
  30.       ;;确定文字值
  31.       (if (= tx_val_il nil)
  32.         (setq tx_val_il "F")
  33.       )
  34.       (prompt (strcat "Please input the symbol to be insert:<"
  35.                       tx_val_il
  36.                       ">"
  37.               )
  38.       )
  39.       (setq tmp (getstring "\n输入字符: "))
  40.       (if (/= tmp "")
  41.         (setq tx_val_il tmp)
  42.       )
  43.       ;;计算直线打断宽度
  44.       (setvar "textsize" high_tel)
  45.       (command "text" "j" "m" "0,0" "" "" tx_val_il)
  46.       (setq wid_br  (textbox (list (assoc 1 (entget (entlast)))))
  47.             pt_bk_a (car wid_br)
  48.             pt_bk_b (cadr wid_br)
  49.             wid_br  (/ (- (car pt_bk_b) (car pt_bk_a)) 2)
  50.             wid_br  (+ wid_br (* 0.8 sca_ft))
  51.       )
  52.       (setvar "textsize" tx_size)
  53.       (command "erase" (entlast) "")
  54.       ;;指定文字近似插入点
  55.       (setq os_mode (getvar "osmode"))
  56.       (setvar "osmode" 0)
  57.       (setq pt_tx_tp (getpoint "\nPlease choose the text position!!!"))
  58.       ;;循环开始
  59.       (while (/= pt_tx_tp nil)                ;计算文字插入点(精确)
  60.         (setq pt_tx (polar pt_tx_tp ang_mov 10)
  61.               pt_tx (inters pt_ln_sta pt_ln_end pt_tx_tp pt_tx nil)
  62.               ss    (ssget "c" pt_tx pt_tx '((0 . "LINE")))
  63.         )
  64.         (if (/= ss nil)
  65.           (progn
  66.             (setq pt_bk_b (sslength ss)
  67.                   pt_bk_a 0
  68.                   ln_find 0
  69.             )
  70.             (while (and (= ln_find 0) (< pt_bk_a pt_bk_b))
  71.               (setq s              (ssname ss pt_bk_a)
  72.                     ang_ln_tp (angle (cdr (assoc 10 (entget s)))
  73.                                      (cdr (assoc 11 (entget s)))
  74.                               )
  75.                     pt_bk_a   (1+ pt_bk_a)
  76.               )
  77.               (if (= (angtos ang_ln_tp) (angtos ang_ln)) ;直线找到
  78.                 (progn
  79.                   (setq ln_find 1)
  80.                   (setvar "textsize" high_tel) ;写
  81.                   (command "text" "j" "m" pt_tx "" (angtos ang_tx) tx_val_il)
  82.                   (setvar "textsize" tx_size)
  83.                   (setq        pt_bk_a        (polar pt_tx ang_ln wid_br)
  84.                         pt_bk_b        (polar pt_tx (+ Pi ang_ln) wid_br)
  85.                   )                        ;确定直线打断点
  86.                   (command "break" s pt_bk_a pt_bk_b) ;打断直线
  87.                 )
  88.               )
  89.             )
  90.           )
  91.         )
  92.         (setq pt_tx_tp (getpoint "\nPlease choose the next position!!!"))
  93.       )
  94.       (setvar "osmode" os_mode)
  95.     )
  96.   )
  97.   (princ)
  98. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-3 08:20:25 | 显示全部楼层
XYP你好,程序可用了.但就是输入字符后,选择插入点时,原来的对象捕捉点怎么都消失了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-4 15:41:21 | 显示全部楼层
XYP的程序我一执行怎么出现"DXF 组不正确: nil"这么个提示啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 05:32 , Processed in 0.410800 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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