明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1536|回复: 6

[请教22]这个程序请问怎么改进?对于采用与未采用justify 的text在一起,就达不到目

[复制链接]
发表于 2003-10-29 19:52:00 | 显示全部楼层 |阅读模式
[请教22]这个程序请问怎么改进?对于采用与未采用justify 的text在一起,就达不到目的。谢谢[br]先多谢各位大侠,昨天的问题怪我没有说清楚。
我的意思是对于采用justify 的text如Bottom Center(缩放按照11)与缺省justify的textLeft(缩放按10),以及圆、块(缩放按照10)在一起,就达不到目的。
我采用Bottom Center是因为我的文字可以根据一点居中。然后缩放就按照这点来缩放。可是也有文字就是缺省的(left).组代码有10,11。其中11是0,0.
我发现利用捕捉设置里的“INSert"就可以达到找到我希望缩放的基准点。可是这个点怎样提取呢?多谢各位。
另外,我运行这个程序的时候,中途”ESC“,就出现这个信息,”; error: Function cancelled“,怎样才能做到AutoCAD那样可以随时应用ESC呢?
对于这个程序我运行完毕,我想”undo“回去,却发现只能一个个的”undo"回去,这是因为我用循环来多次执行命令,可是怎么样才能一步“undo"就能回到执行程序前的状态呢?
(defun c:ms (/ ss1 ssl n ii ename e1 pt1)
  (setvar "cmdecho" 0)
  (prompt "\n选择文字、图块、园或椭圆:")
  (setq sse (ssget '((0 . "text,insert,circle,ellipse"))))
  (setq ssl (sslength sse))
  (initget 7)
  (setq n (getreal "\n输入缩放的比例:"))
  (setq ii 0)
  (while (< ii ssl)
    (setq ename (ssname sse ii))
    (setq e1 (entget ename))
    (if        (and (= (cdr (assoc 0 e1)) "TEXT") (setq pt1 (assoc 11 e1)))
      (setq pt1 (cdr pt1))
      (setq pt1 (cdr (assoc 10 e1)))
    )
    (command "scale" ename "" pt1 n)
    (setq ii (1+ ii))
  )
  (setvar "cmdecho" 1)
  (princ)
)
发表于 2003-10-29 20:13:00 | 显示全部楼层
自己先看看吧,不明白的地方再问:

(defun err(msg)
  (if (or
        (= msg "Function cancelled")
        (= msg "quit / exit abort")
      )
    (princ)
    (princ (strcat "\nError: " msg))
  )
  (setq *error* errtmp)
)


(defun c:ms (/ ss1 ssl n ii ename e1 pt1)
  (command "_.undo" "be")
  (setvar "cmdecho" 0)
  (setq errtmp *error*
        *error* err)
  (prompt "\n选择文字、图块、园或椭圆:")
  (setq sse (ssget '((0 . "text,insert,circle,ellipse"))))
  (setq ssl (sslength sse))
  (initget 7)
  (setq n (getreal "\n输入缩放的比例:"))
  (setq ii 0)
  (while (< ii ssl)
    (setq ename (ssname sse ii))
    (setq e1 (entget ename))
    (if (and (= (cdr (assoc 0 e1)) "TEXT")
             (/= (assoc 72 e1) 0))
      (setq pt1 (cdr (assoc 11 e1)))
      (setq pt1 (cdr (assoc 10 e1)))
    )
    (command "scale" ename "" pt1 n)
    (setq ii (1+ ii))
  )
  (setvar "cmdecho" 1)
  (setq *error* errtmp)
  (command "_.undo" "e")
  (princ)
)
 楼主| 发表于 2003-11-2 14:27:00 | 显示全部楼层
请问如果在接的下来下一个命令如move中,想对上面MS程序中的sse选择集进行选择,该如何实现?
即:命令行:MOVE    物体选择方式P ,然后就找到上次MS 中的sse选择集?
有没有一个相关变量可以把sse赋给他呢?
 楼主| 发表于 2003-11-2 14:49:00 | 显示全部楼层
在上面的MS程序中,如何用(ssget)选择的时候不出现“Select objects:”,而代之以“选择文字、图块、园或椭圆:”这个提示信息呢?
发表于 2003-11-2 14:52:00 | 显示全部楼层
因为在程序中,SSE是全局变量,程序结束后也没有释放它,所以这个变量仍然有效,在MOVE命令中输入!sse就可以了
 楼主| 发表于 2003-11-2 15:01:00 | 显示全部楼层
怎样在命令行:MOVE    物体选择方式P ,然后就找到上次MS 中的sse选择集?
我想输入P就找到SSE,而不是!sse来找?又该如何实现呢?
因为这个程序给别人用,别人不一定知道用!sse啊。
另外:在上面的MS程序中,如何用(ssget)选择的时候不出现“Select objects:”,而代之以“选择文字、图块、园或椭圆:”这个提示信息呢?
发表于 2003-11-2 15:10:00 | 显示全部楼层
你在程序最后的(princ)前加一句(command "_.select" sse "")
另外建议将SSE也设置成局部变量。

这个提示不能改,不过你可以在SSGET前加一句
(prompt "选择文字、图块、圆或椭圆")
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 12:37 , Processed in 0.182721 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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