明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1963|回复: 8

[求助]引用对齐标注的问题!

[复制链接]
发表于 2009-5-30 13:08:00 | 显示全部楼层 |阅读模式

请求各位大虾出手帮我一个问题!

如下,我的目的是调用对齐标注命令,完成标注后获取这个标注的图元名,然后做其他操作。如果我只在屏幕上用鼠标取点则程序正常,但是,如果我选择标注中出现的选项,也就是 [多行文字(M)/文字(T)/角度(A)]中的文字,输入t后不起作用。

(defun c:mylc()
(command "DIMALIGNED" )
(while(>(getvar "cmdactive") 0)
(command pause))
(setq data (entlast))
)
请问我如何才能实现不管用户输不输文字t都能正常执行? 等待答复,急!

发表于 2009-5-31 10:53:00 | 显示全部楼层
试试这个
  1. (defun c:tt()
  2. (command "DIMALIGNED" pause pause)
  3. (setq data (entlast))
  4. )
 楼主| 发表于 2009-5-31 23:43:00 | 显示全部楼层

多谢coolpoom大虾解答我的问题.

(defun c:tt()
(command "DIMALIGNED" pause pause)
(setq data (entlast))
)

这个代码如果是只用鼠标在屏幕取点的话确实是可以的,但是,如果我[多行文字(M)/文字(T)/角度(A)]中的t选项,程序就不对了。

现在我想程序实现这样的功能,不管你怎么输都正常,就像用户直接用DIMALIGNED标注一样。

请大虾教我!

发表于 2009-6-1 10:15:00 | 显示全部楼层

 

是不是像图片这样?这是用以上程序截的图!!!!

本帖子中包含更多资源

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

x
 楼主| 发表于 2009-6-1 22:07:00 | 显示全部楼层

coolpoom大虾,我想要的就是那样的,标注完成后在获取图元名,标注时用户可以自由选择[多行文字(M)/文字(T)/角度(A)]。今天我已经想出来一个解决的方案了,代码如下:

(defun c:tt()
  (setvar "cmdecho" 1)
  (setq oldteval (getvar "texteval")) 
  (setvar "texteval" 1)
  (command "DIMALIGNED" )
  (while (> (getvar "cmdactive") 0)
   (command pause)
  )
(setq data (entlast))
(setvar "texteval" oldteval)
)

command函数中的PAUSE表示此时的AUTOCAD命令参数需要用户输入,不从函数参数表中获得。如果一个命令请求输入文本字符串或属性值时遇到 PAUSE 符号,则只有当系统变量 TEXTEVAL 的值为非零时,AutoCAD 才会暂停,以使用户输入文本字符串或属性值。否则,AutoCAD 不会暂停而直接使用 PAUSE 符号的文本值(单个反斜杠字符)。当 command 函数暂停下来让用户输入时,command 函数仍是激活的,所以用户不能输入其他要进行求值的 AutoLISP 表达式。

(我在明经的一个题目为

[请教]关于command函数     http://bbs.mjtd.com/forum.php?mod=viewthread&tid=53474

的贴子中看到的。摘过来一部分。

coolpoom大虾,请问你是怎么做到的?

发表于 2009-6-2 15:19:00 | 显示全部楼层
本帖最后由 作者 于 2009-6-2 22:04:18 编辑

哦!你不说我都不知道是这种情况。

(defun c:tt()  
(setvar "TEXTeval" 1)
(command"dimaligned")
(while (/= 0 (getvar"cmdactive"))
(command pause))
(setq data (entlast))
)
 楼主| 发表于 2009-6-2 18:19:00 | 显示全部楼层

coolpoom大虾,你不要生气。程序我绝对是都试过的,一直都为解决这个问题而努力。请看2楼程序的执行情况。我是新建一个autocad加载运行的。文件保存的名字为新建 文本文档.lsp。

命令: ap APPLOAD 已成功加载 新建 文本文档.lsp。


命令:
命令:
命令: tt DIMALIGNED
指定第一条尺寸界线原点或 <选择对象>:
指定第二条尺寸界线原点:
创建了无关联的标注。
指定尺寸线位置或
[多行文字(M)/文字(T)/角度(A)]: nil

指定尺寸线位置或
[多行文字(M)/文字(T)/角度(A)]:
标注文字 = 37.8885

命令: !data        ///////查看data变量时发现为nil,有异常
nil

/////下面我接着又试了一次

命令: tt DIMALIGNED
指定第一条尺寸界线原点或 <选择对象>:
指定第二条尺寸界线原点:
创建了无关联的标注。
指定尺寸线位置或
[多行文字(M)/文字(T)/角度(A)]: <图元名: 7efb7430>

指定尺寸线位置或
[多行文字(M)/文字(T)/角度(A)]:
标注文字 = 39.3508
命令: !data <图元名: 7efb7430> 
////这次获取了图元名,正常

接着清空data,试验有文字替代的情况:

命令: (setq data nil)
nil

命令: tt DIMALIGNED
指定第一条尺寸界线原点或 <选择对象>:
指定第二条尺寸界线原点:
创建了无关联的标注。
指定尺寸线位置或
[多行文字(M)/文字(T)/角度(A)]: <图元名: 7efb74a8>

指定尺寸线位置或
[多行文字(M)/文字(T)/角度(A)]: t
输入标注文字 <37.4207>: 300

指定尺寸线位置或
[多行文字(M)/文字(T)/角度(A)]:
标注文字 = 37.4207
命令: !data
<图元名: 7efb74a8>   
//////这次正常获取了。

以上就是2楼程序的调试结果。我发现每次新建一个autocad加载运行都是不正常的,以后就能正常获取data。

我思考了下原因,发现每次获得的data实际上是上一次生成的标注!这是为什么?不可理解。

我用的是autocad2008.

我第一次试程序的时候第一步没有得到结果就放弃了,没有深入,这是我的错误。衷心感谢coolpoom大侠的帮助


发表于 2009-6-2 22:00:00 | 显示全部楼层

这里要感谢无敌大哥

发表于 2009-6-5 22:01:00 | 显示全部楼层
學習一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-24 23:26 , Processed in 0.193764 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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