- 积分
- 5037
- 明经币
- 个
- 注册时间
- 2005-1-4
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|

楼主 |
发表于 2011-4-1 22:20:00
|
显示全部楼层
本帖最后由 啵浪鼓 于 2011-4-1 22:28 编辑
这种方法做的程序,还有三个问题:
1, 用entmod生成的块,为什么块归0,而属性文字不旋转
2,角度怎样换算的呢? 3.14/1.57 如果先用rotate命令旋转将块和文字一并归0呢
3,为什么用entmod生成的东东,必须要用regen命令重新生成才行呢?
4,现在的程序用entmod将属性文字生成归0后,文字与块距离很远呢?
(defun c:q ()
(setvar "cmdecho" 0)
(setq os (getvar "osmode"))
(setq mt (getvar "mirrtext"))
(command "undo" "be")
(setvar "osmode" 0)
(defun *error*(msg)
(setvar "osmode" os)
(setvar "mirrtext" mt)
(command "undo" "e")
(setq *error* nil)
(princ)
)
(princ " Block块文字调整")
(setq ss (ssget '((0 . "INSERT"))))
(if ss
(progn
(setq i 0)
(repeat (sslength ss)
(setq si (ssname ss i))
(setq rh (entget si))
(setq zb (cdr (assoc 10 rh)))
(setq rt1 (cdr (assoc 41 rh)))
(setq rt2 (cdr (assoc 50 rh)))
****************************************************************
;此段只能将属性块旋转归0,为什么属性文字不能归0呢?
; (setq rh (subst '(50 . 0) (assoc 50 rh) rh))
; (entmod rh)
****************************************************************
;此段的角度值是怎么计算的?有没有变法得到角度值,然后rotate直接旋转至0度?
(if (and (> 1.75 rt2)(< 1.35 rt2))
(command "rotate" si "" zb "@10<270")
)
(if (and (> 3.35 rt2)(< 2.95 rt2))
(command "rotate" si "" zb "@10<180")
)
(if (and (> 4.9 rt2)(< 4.5 rt2))
(command "rotate" si "" zb "@10<90")
)
****************************************************************
(setq i (+ i 1))
)
(repeat (setq n (sslength ss))
(setq ent (ssname ss (setq n (1- n))))
(while (= (cdr (assoc 0 (setq lst (entget (setq ent (entnext ent)))))) "ATTRIB")
;;;处理 lst 表
(if (= 2 (cdr (assoc 71 lst)))
(progn
(setq lst (subst '(71 . 0) (assoc 71 lst) lst))
(entmod lst) ;需要regen重新生成后才能正确显示,而且生成的文字离块很远?
)
)
(if (/= 0 (cdr (assoc 50 lst)))
(progn
(setq lst (subst '(50 . 0) (assoc 50 lst) lst))
(entmod lst) ;需要regen重新生成后才能正确显示,而且生成的文字离块很远?
)
)
)
)
)
)
(*error* "")
)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|