乐筑天下

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

有关TEXT命令的问题,请帮忙!

[复制链接]

7

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-11-9 22:15:00 | 显示全部楼层 |阅读模式
为线(直线或多段线的一段)加上标注,遍了一段程序,如下:
(defun C:ADDNOTE (/ osvar start end middle rotate insert text)
  (setq osvar (getvar "osmode"))
  (setvar "osmode" 1)
  (setq start (getpoint "\n选取第1个点,"))
  (setq end (getpoint start " 选取第2个点"))
  (setq middle (list (+ (car start) (/ (- (car end) (car start)) 2))
                     (+ (cadr start) (/ (- (cadr end) (cadr start)) 2))
                     0
               )
  )
  (setq rotate (angle start end))
  (setq insert (polar middle (+ rotate (angtof "90")) 5))
  (setvar "osmode" 0)
  (command "text" insert 5 (angtos rotate) "note")
  (setq text (entget (entlast)))
  (setq text (subst (cons 72 1) (assoc 72 text) text))
  (setq text (subst (cons 73 1) (assoc 73 text) text))
  (entmod text)
  (setvar "osmode" osvar)
)
可是,标注“note”字符串跑到坐标系原点去了,是程序出错?还是什么问题?在2000、2004都试过,没辙了,请高手帮忙看看!
回复

使用道具 举报

8

主题

59

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
91
发表于 2003-11-10 08:16:00 | 显示全部楼层
我改了但是不知道对不对
(defun C:ADDNOTE (/ osvar start end middle rotate insert text)
  (setq osvar (getvar "osmode"))
  (setvar "osmode" 1)
  (setq start (getpoint "\n选取第1个点,"))
  (setq end (getpoint start " 选取第2个点"))
  (setq middle (list (+ (car start) (/ (- (car end) (car start)) 2))
                     (+ (cadr start) (/ (- (cadr end) (cadr start)) 2))
                     0
               )
  )
  (setq rotate (* (/ (angle start end) pi) 180))
  (setq insert (polar middle (+ (angle start end) pi) 5))
  (setvar "osmode" 0)
  (command "text" insert "5" (* (/ (angle start end) pi) 180) "note")
  (setvar "osmode" osvar)
)
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-11-10 08:23:00 | 显示全部楼层
你的程序好象沒有出錯. 但可能在
(setq text (subst (cons 72 1) (assoc 72 text) text))
  (setq text (subst (cons 73 1) (assoc 73 text) text))
  (entmod text)
這三句的問題吧. 請教樓主這三句是用來做什麼作用的?
回复

使用道具 举报

7

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-11-10 09:34:00 | 显示全部楼层
谢谢各位!
TO BDYCAD:
  (setq text (subst (cons 72 1) (assoc 72 text) text)) ; 水平居中
  (setq text (subst (cons 73 1) (assoc 73 text) text)) ; 垂直居中
  (entmod text)                                                     ; 更新TEXT的DEFINITION TABLE
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-11-10 09:41:00 | 显示全部楼层
那這三句不要可以的, 呵呵 : )
回复

使用道具 举报

7

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-11-10 11:18:00 | 显示全部楼层
要那三句是为了改变标注字符串的对齐方式。
也确实是那三句出了问题,但语法上没问题。
联想起我曾经报告过的用VBA做“OFFSET”会使原多段线跑到坐标系原点,推断可能也是出了BUG。
现在没办法,只好先绕过去,办法如下:
(defun C:ADDNOTE (/ osvar start end middle rotate insert text)
  (setq osvar (getvar "osmode"))
  (setvar "osmode" 1)
  (setq start (getpoint "\n选取第1个点,"))
  (setq end (getpoint start " 选取第2个点"))
  (setq middle (list (+ (car start) (/ (- (car end) (car start)) 2))
                     (+ (cadr start) (/ (- (cadr end) (cadr start)) 2))
                     0
               )
  )
  (setq rotate (angle start end))
  (setq insert (polar middle (+ rotate (angtof "90")) 5))
  (setvar "osmode" 0)
  (command "TEXT" "J" "BC" insert 5 (angtos rotate) "note")
  (setvar "osmode" osvar)
)
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-11-10 11:49:00 | 显示全部楼层
你用了对齐方式,却没有设置对二对齐点,这样试试:
  1. (defun C:ADDNOTE (/ osvar start end middle rotate insert text pt pte)
  2.   (setq osvar (getvar "osmode"))
  3.   (setvar "osmode" 1)
  4.   (setq start (getpoint "\n选取第1个点,"))
  5.   (setq end (getpoint start " 选取第2个点"))
  6.   (setq middle (list (+ (car start) (/ (- (car end) (car start)) 2))
  7.                      (+ (cadr start) (/ (- (cadr end) (cadr start)) 2))
  8.                      0
  9.                )
  10.   )
  11.   (setq rotate (angle start end))
  12.   (setq insert (polar middle (+ rotate (angtof "90")) 5))
  13.   (setvar "osmode" 0)
  14.   (command "text" insert 5 (angtos rotate) "note")
  15.   (setq text (entget (entlast)))
  16.   (setq pt (cdr (assoc 10 text)))
  17.   (setq pte (polar pt rotate (cdr (assoc 41 text))))
  18.   (setq text (subst (cons 11 pte) (assoc 11 text) text))
  19.   (setq text (subst (cons 72 1) (assoc 72 text) text))
  20.   (setq text (subst (cons 73 1) (assoc 73 text) text))
  21.   (entmod text)
  22.   (setvar "osmode" osvar)
  23.   (princ)
  24. )
回复

使用道具 举报

7

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-11-10 11:57:00 | 显示全部楼层
我也怀疑是因为没设置“对齐点”,可是对“对齐点”不了解,也试了,没成功,所以想到绕过去,不过绕过去的办法也很简单哦,至少省了7条语句!
谢谢meflying!
结论是:不出错,学不到基本的东西!不交流,学不到真正的东西!
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-11-10 12:10:00 | 显示全部楼层
其实可以用entmake建立TEXT对象,那样比较好些:
  1. (defun C:ADDNOTE (/ start end middle rotate insert)
  2.   (setq start (getpoint "\n选取第1个点,"))
  3.   (setq end (getpoint start " 选取第2个点"))
  4.   (setq middle (list (+ (car start) (/ (- (car end) (car start)) 2))
  5.                      (+ (cadr start) (/ (- (cadr end) (cadr start)) 2))
  6.                      0
  7.                )
  8.   )
  9.   (setq rotate (angle start end))
  10.   (setq insert (polar middle (+ rotate (angtof "90")) 5))
  11.   (entmake (list '(0 . "TEXT") '(100 . "AcDbEntity")
  12.                  '(67 . 0) '(410 . "Model") '(100 . "AcDbText")
  13.                  (cons 10 insert)
  14.                  '(40 . 5.0)
  15.                  '(1 . "note")
  16.                  (cons 50 rotate)
  17.                  '(41 . 1.0) '(51 . 0.0) '(71 . 0) '(72 . 1)
  18.                  (cons 11 (polar Insert rotate 5)) '(210 0.0 0.0 1.0) '(100 . "AcDbText") '(73 . 1))
  19.   )
  20.   (princ)
  21. )
回复

使用道具 举报

7

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-11-10 17:58:00 | 显示全部楼层
非常感谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-6 21:29 , Processed in 0.416097 second(s), 72 queries .

© 2020-2025 乐筑天下

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