乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 90|回复: 6

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

[复制链接]

19

主题

46

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
122
发表于 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“,怎样才能做到那样可以随时应用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)
)
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 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)
)
回复

使用道具 举报

19

主题

46

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
122
发表于 2003-11-2 14:27:00 | 显示全部楼层
请问如果在接的下来下一个命令如move中,想对上面MS程序中的sse选择集进行选择,该如何实现?
即:命令行:MOVE    物体选择方式P ,然后就找到上次MS 中的sse选择集?
有没有一个相关变量可以把sse赋给他呢?
回复

使用道具 举报

19

主题

46

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
122
发表于 2003-11-2 14:49:00 | 显示全部楼层
在上面的MS程序中,如何用(ssget)选择的时候不出现“Select objects:”,而代之以“选择文字、图块、园或椭圆:”这个提示信息呢?
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-11-2 14:52:00 | 显示全部楼层
因为在程序中,SSE是全局变量,程序结束后也没有释放它,所以这个变量仍然有效,在MOVE命令中输入!sse就可以了
回复

使用道具 举报

19

主题

46

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
122
发表于 2003-11-2 15:01:00 | 显示全部楼层
怎样在命令行:MOVE    物体选择方式P ,然后就找到上次MS 中的sse选择集?
我想输入P就找到SSE,而不是!sse来找?又该如何实现呢?
因为这个程序给别人用,别人不一定知道用!sse啊。
另外:在上面的MS程序中,如何用(ssget)选择的时候不出现“Select objects:”,而代之以“选择文字、图块、园或椭圆:”这个提示信息呢?
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-11-2 15:10:00 | 显示全部楼层
你在程序最后的(princ)前加一句(command "_.select" sse "")
另外建议将SSE也设置成局部变量。
这个提示不能改,不过你可以在SSGET前加一句
(prompt "选择文字、图块、圆或椭圆")
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 13:25 , Processed in 0.612715 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表