明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2150|回复: 9

[求助]修改弧长标注lisp程序

[复制链接]
发表于 2003-1-7 08:49:00 | 显示全部楼层 |阅读模式
问题:以下程序在执行时最后提示“输入尺寸线位置”要做两遍,我希望只要做一次就可以。不知怎么改?(可能和原程序的运行方式:  "dim" "angular" 的执行方式有关?)

(defun dtr (x)
        (* pi (/ x 180.00))
        )

        (defun rtd (y)
        (/ (* 180 y) pi)
        )

       (defun right ()
         (setq ang1 (angle ep cen)
              ang2 (angle ep1 cen)
              ang (- ang1 ang2)
              arclen (abs(* rad ang))
         )
        )

        (defun left ()
        (setq ang (- a1 a2))
        (setq arclen (abs(* rad ang)))
        )

        (defun C:arcdim (/ ang1 ang2 ang arclen rad pick_pt pick_ang
        cen pick_pt extpt1 extpt2 extpt3 extpt4 ep a1 a2 ep1 e6 e7 ent4 temp_pt1
        temp_pt2 temp_pt3 temp_pt4 e1 e2 e3 e4 text_ang th txt1 txt e5 ep1a epa
        ep1a1 epa1 search )
        (setvar "cmdecho" 0)
        (setvar "blipmode" 0)
        (setq cn (entsel "\n选择要标注的弧: "))
        (setq dn (car cn))
        (setq aw (entget dn))
        (setq ty (cdr (assoc 0 aw)))
     (if (= ty "ARC")
          (progn
        (setq a1 (cdr (assoc 50 aw)))
        (setq a2 (cdr (assoc 51 aw)))
        (setq cen (cdr (assoc 10 aw))
              rad (cdr (assoc 40 aw)))
        (setq ep (polar cen (cdr (assoc 50 aw)) rad)
              ep1 (polar cen (cdr (assoc 51 aw)) rad))
                  (if (< a1 a2) (left)
                      (right)
                   )
        (prompt "\n输入尺寸线的位置:")
        (command "dim" "angular" "" cen ep ep1 pause (rtos arclen) pause "exit")
            )
        (prompt "\n所选实体不是弧")
    )
    (setvar "clayer" "0")
    (setvar "cmdecho" 1)
    (setvar "blipmode" 0)
                         (princ)
)
        (prompt "\n键入ARCDIM唤起命令: ")

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2003-1-7 10:38:00 | 显示全部楼层

[建议]

将(command "dim" "angular" "" cen ep ep1 pause (rtos arclen) pause "exit")改为
(command "dim" "angular" "" cen ep ep1 pause (rtos arclen) "" "exit")即可,但有一个问题,用"dim" "angular"时,并非提示相同的两次,第一次提示尺寸线的位置,第二次提示文字的位置,若第二次提示时采用默认值,则文字标注在尺寸线的中间位置。
 楼主| 发表于 2003-1-7 11:39:00 | 显示全部楼层

不行!

谢谢你的热情,只是好像没有达到目的。你可能没亲自做一下,体会体会这样的标注是什么感觉。虽然系统提示第一次提示尺寸线的位置,第二次提示文字的位置,但其实第一次是无效的,第二次仍可改变尺寸线位置,并同时可手动放置文字位置。而你的方案中添加了一个回车,实际执行结果是多了个重复执行上一命令。
发表于 2003-1-7 11:55:00 | 显示全部楼层

我将你的程序在CAD2002中试过。。。

没问题,我的方案中不是添加了一个回车,而是将第二个PAUSE改为回车的,你在试试。
发表于 2003-1-7 13:15:00 | 显示全部楼层

It works now...

(defun dtr (x)
        (* pi (/ x 180.00))
        )

        (defun rtd (y)
        (/ (* 180 y) pi)
        )

       (defun right ()
         (setq ang1 (angle ep cen)
              ang2 (angle ep1 cen)
              ang (- ang1 ang2)
              arclen (abs(* rad ang))
         )
        )

        (defun left ()
        (setq ang (- a1 a2))
        (setq arclen (abs(* rad ang)))
        )

        (defun C:arcdim (/ ang1 ang2 ang arclen rad pick_pt pick_ang
        cen pick_pt extpt1 extpt2 extpt3 extpt4 ep a1 a2 ep1 e6 e7 ent4 temp_pt1
        temp_pt2 temp_pt3 temp_pt4 e1 e2 e3 e4 text_ang th txt1 txt e5 ep1a epa
        ep1a1 epa1 search )
        (setvar "cmdecho" 0)
        (setvar "blipmode" 0)
        (setq cn (entsel "\nSelect an arc: "))
        (setq dn (car cn))
        (setq aw (entget dn))
        (setq ty (cdr (assoc 0 aw)))
     (if (= ty "ARC")
          (progn
        (setq a1 (cdr (assoc 50 aw)))
        (setq a2 (cdr (assoc 51 aw)))
        (setq cen (cdr (assoc 10 aw))
              rad (cdr (assoc 40 aw)))
        (setq ep (polar cen (cdr (assoc 50 aw)) rad)
              ep1 (polar cen (cdr (assoc 51 aw)) rad))
                  (if (< a1 a2) (left)
                      (right)
                   )
        (prompt "\nLocation of dimesion line:")
        (command "_dimangular" "" cen ep ep1 pause)
        (setq arcdimobj (vlax-ename->vla-object (entlast)))
        (if (vlax-property-available-p arcdimobj 'Textoverride)
            (vla-put-Textoverride arcdimobj (rtos arclen))
        )
          )
        (prompt "\nIt's not an arc")
    )
    (setvar "clayer" "0")
    (setvar "cmdecho" 1)
    (setvar "blipmode" 0)
                         (princ)
)
        (prompt "\nType 'ARCDIM' to invoke the command: ")
 楼主| 发表于 2003-1-7 14:16:00 | 显示全部楼层

不错,多谢了!

 楼主| 发表于 2003-1-7 14:19:00 | 显示全部楼层

多谢,也能成,只是有一点小问题

执行完后有一个错误提示。
错误: no function definition: VLAX-ENAME->VLA-OBJECT
发表于 2003-1-15 00:58:00 | 显示全部楼层

这里有你要的弧长标注程序,简单方便

这里有你要的弧长标注程序,简单方便,命令zxda
http://www.xdcad.net/forum/showthread.php?s=&threadid=24873
发表于 2011-12-10 23:24:15 | 显示全部楼层
收藏了 感谢分享
发表于 2011-12-10 23:24:49 | 显示全部楼层
收藏了 感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-23 12:03 , Processed in 0.203381 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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