找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2654|回复: 15

[求助] [求助]:为什么标注还是在原来的图层上?

[复制链接]

已领礼包: 9个

财富等级: 恭喜发财

发表于 2003-5-1 00:50:57 | 显示全部楼层 |阅读模式

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

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

×
这是自定义的标注快捷命令,用xdrx_begin建立了一个dim层,可是标注还是在原来的图层上,why?望高手指点。
(defun c:d ()
  (xdrx_begin "dim" "3")
  (command "dimlinear")
  (xdrx_end)
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-5-1 00:54:22 | 显示全部楼层

Re: [求助]:为什么标注还是在原来的图层上?

最初由 hnfsf 发布
[B]这是自定义的标注快捷命令,用xdrx_begin建立了一个dim层,可是标注还是在原来的图层上,why?望高手指点。
(defun c:d ()
  (xdrx_begin "dim" "3")
  (command "dimlinear")
  (xdrx_end)
  (princ)
) [/B]


你看看单独用(xdrx_begin "dim" "3")
后,当前层显示的是什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-1 01:01:41 | 显示全部楼层
是dim呀,一句一句的运行是正确的,整个程序就不对了。谢谢xd深夜相伴。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-5-1 01:08:42 | 显示全部楼层
最初由 hnfsf 发布
[B]是dim呀,一句一句的运行是正确的,整个程序就不对了。谢谢xd深夜相伴。 [/B]


建议你不要让程序停下,使用交互命令,你自己程序取点后,用(command "dim1" "hor" .....)程序标注。

另外,如果你用XDRX_API,有更方便的函数:

(xdrx_dimension_makeAlign p1 p2 p3 "dimn")

p3是尺寸线位置,dimn 是标注样式,可以用你的,也可以省略这个参数,用当前的标注样式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-1 01:24:49 | 显示全部楼层
原来我是这么用,但是这样标注完后总是跑到dim层下,不方便了。
(defun c:d()
        (command "layer" "m" "dim" "c" "green" "dim" "lt" "continuous" "dim" nil)
        (command "dimlinear")(princ))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-5-1 01:31:59 | 显示全部楼层
最初由 hnfsf 发布
[B]原来我是这么用,但是这样标注完后总是跑到dim层下,不方便了。
(defun c:d()
        (command "layer" "m" "dim" "c" "green" "dim" "lt" "continuous" "dim" nil)
        (command "dimlinear")(princ)) [/B]


尽量不要用命令交互,交互后,就不是LISP控制了,你自己取点,比如:

  1. <normalfont>
  2. (if (and
  3.        (setq p1 (getpoint "\n第一点<退出>:"))
  4.        (setq p2 (getpoint p1 "\n第二点<退出>:"))
  5.        (setq p3 (getpoint "\n尺寸线位置<退出>:"))
  6.    )
  7.   (progn
  8.       (xdrx_begin "dim" "3")
  9.       (command "dim1" "hor" p1 p2 p3 "")
  10.      (xdrx_end)
  11.   )
  12. )
  13. </normalfont>


使用XDRX_API

  1. <normalfont>
  2. (if (and
  3.        (setq p1 (getpoint "\n第一点<退出>:"))
  4.        (setq p2 (getpoint p1 "\n第二点<退出>:"))
  5.        (setq p3 (getpoint "\n尺寸线位置<退出>:"))
  6.    )
  7.   (progn
  8.       (xdrx_begin "dim" "3")
  9.       (xdrx_srchdim "normal)
  10.       (xdrx_dimension_makeAlign p1 p2 p3 "dimn")
  11.      (xdrx_end)
  12.   )
  13. )
  14. </normalfont>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-1 01:41:24 | 显示全部楼层
就是,我也发现这个问题,不使用交互就好解决了,我再多多研究用XDRX_API,,谢谢。
今天看到一个程序是用交互的,它把问题解决了,贴上来给你看看。

  1. (defun c:hu (/ nu en ent a1 a2 #r #len arcdim1 arcdim2)
  2.   (defun arcdim1 (a1 a2 #r)
  3.     (setq #len (* #r (abs (- a2 a1))))
  4.   )                                       
  5.   (defun arcdim2 (a1 a2 #r / a)
  6.     (setq a (- (* 2 pi) a1))
  7.     (setq #len (* #r (abs (+ a2 a))))
  8.   )
  9. ; ___________________________________
  10.   (setq old_layer (getvar "clayer"))
  11.   (if (tblsearch "layer" "dim")
  12.     (setvar "clayer" "dim")
  13.     (progn
  14.       (command "layer" "m" "dim" "c" "green" "dim" "lt" "continuous" "dim"
  15.                nil
  16.       )
  17.     )
  18.   )
  19.   (if (= (tblsearch "dimstyle" "dim") nil)
  20.     (command "insert" "*c:/fsftools/fsfsys/_dim.dwg" "1" "1" "1" "")
  21.   )
  22.   (command "dimstyle" "r" "dim")      
  23.   (setq nu 2)
  24.   (setq en (entsel "\n 选择一段圆弧[arc]:.."))
  25.   (setq ed (entget (car en)))
  26.   (setq a1 (cdr (assoc 50 ed))
  27.         a2 (cdr (assoc 51 ed))
  28.         #r (cdr (assoc 40 ed))
  29.   )
  30.   (if (< a1 a2)
  31.     (setq #len (arcdim1 a1 a2 #r))
  32.     (setq #len (arcdim2 a1 a2 #r))
  33.   )
  34.   (setq ln (strcat "L=" (rtos #len 2 nu)))
  35.   (command "dim1" "ang" en pause ln pause)
  36.   (setvar "clayer" old_layer)
  37.   (princ)
  38. )

这句:(command "dim1" "ang" en pause ln pause)
中的两个PAUSE好像缺一不可的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-5-1 01:47:48 | 显示全部楼层
最初由 hnfsf 发布
[B]就是,我也发现这个问题,不使用交互就好解决了,我再多多研究用XDRX_API,,谢谢。
今天看到一个程序是用交互的,它把问题解决了,贴上来给你看看。
(defun c:hu (/ nu en ent a1 a2 #r #len arcdim1 arcdim2)
  ... [/B]


在COMMAND中用PAUSE,表示LISP接受交互的结果,至于是几个PAUSE,看单独使用命令时候需要几个参数,不希望用程序获得,希望用户去交互的地方,用PAUSE,交互完后,会回到LISP,程序继续作。

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

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-1 01:51:06 | 显示全部楼层
明白了,多谢老大指教,祝今夜好梦。
(if (and
       (setq p1 (getpoint "\n第一点<退出>:"))
       (setq p2 (getpoint p1 "\n第二点<退出>:"))
       (setq p3 (getpoint "\n尺寸线位置<退出>:"))
   )
  (progn
      (xdrx_begin "dim" "3")
      (command "dim1" "hor" p1 p2 p3 "")
     (xdrx_end)
  )
)

这样用就不能看到拖动尺寸时的动态效果了,不爽。
我觉得理正CAD上有很多动态的操作看起来很直观。
对了,老大如何在这个基础上做等距标注呢?就是在标注两三道尺寸线的时候用。
程序这样就可以用了,
(defun c:33 ()
  (if (and
       (setq p1 (getpoint "\n第一点<退出>:"))
       (setq p2 (getpoint p1 "\n第二点<退出>:"))
       ;(setq p3 (getpoint "\n尺寸线位置<退出>:"))
   )
  (progn
      (xdrx_begin "dim" "3")
      (command "dim1" "hor" p1 p2 pause "")
     (xdrx_end)
  )
)
   (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-2 01:52:50 | 显示全部楼层
(defun mk_dim ()
  (if (= (tblsearch "dimstyle" "dim") nil)
    (command "insert" "*c:/fsftools/fsfsys/_dim.dwg" "1" "1" "1" "")
  )
)  
(defun c:33 ()
(setvar "cmdecho" 0)
  (xdrx_ucsoff)(mk_dim)
  (xdrx_begin "dim" "3")
  (if (= (getvar "dimstyle") "STANDARD")(command "dimstyle" "r" "dim"))
  (if (/= (getvar "clayer") "dim")(setvar "clayer" "dim"))
  
  (if (setq p1 (getpoint "\n请点取需要标注的第一点<退出>:"))
      (progn
         (setq p2 (getpoint p1 "\n请点取需要标注的第二点<退出>:"))
         (command "dimlinear" p1 p2 pause)
      )
      (progn
         (if (setq en (car (entsel "\n请点取需要标注的物体<退出>:")))
             (command "dimlinear" "" en pause pause)
         )
      )
   )

  (xdrx_end)
  (xdrx_ucson)
  (setvar "cmdecho" 1)
  (princ)
)
其实这样更好用,但还有一个问题没有解决就是“提示点取第一点时”回车程序跳到
  (progn
         (if (setq en (car (entsel "\n请点取需要标注的物体<退出>:")))
             (command "dimlinear" "" en pause pause)
         )
      )
这里执行时提示要选取两次物体,不方便了,晓东再看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-5-2 01:59:05 | 显示全部楼层
最初由 hnfsf 发布
[B]明白了,多谢老大指教,祝今夜好梦。
(if (and
       (setq p1 (getpoint "\n第一点<退出>:"))
       (setq p2 (getpoint p1 "\n第二点<退出>:"))
       (setq p3 (getpoint "\n尺寸线位置<退出>:"))
   )
... [/B]


理正的尺寸拖动,不是你这样做的,而是使用了“拖动技术”,你看看晓东工具箱里面的“逐点标注”,也使用了AcGeJig 动态拖动技术,XDRX_API里面都有这样的函数的,你去看看晓东工具箱里面相关的LISP代码,体会下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-2 02:12:06 | 显示全部楼层
别的地方需要使用了AcGeJig 动态拖动技术,不过使用DIM1的时候可以偷下懒啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-5 21:21:31 | 显示全部楼层
最初由 hnfsf 发布
[B]原来我是这么用,但是这样标注完后总是跑到dim层下,不方便了。
(defun c:d()
        (command "layer" "m" "dim" "c" "green" "dim" "lt" "continuous" "dim" nil)
        (command "dimlinear")(princ)) [/B]

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

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

发表于 2003-5-6 10:31:20 | 显示全部楼层
(setq ed (entget (entlast)))  ;(entast)为刚生成的尺寸
(setq ed (sunst (cons 8 "DIM")(ASsoc 8 ed) ed))
(entmod ed)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-8 03:49:33 | 显示全部楼层
最初由 前生 发布
[B](setq ed (entget (entlast)))  ;(entast)为刚生成的尺寸
(setq ed (sunst (cons 8 "DIM")(ASsoc 8 ed) ed))
(entmod ed) [/B]


将刚生成的尺寸该层是一个办法。
但我想利用图层切换来处理。
谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 03:51 , Processed in 0.212135 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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