旋轉但最終文字的角度不會因為旋轉而解變.
關於這個問題的程序我做的差不多了請大家來看看. 是這樣的我的程序在 ROTATE中意思是說在旋轉但最終文字的角度不會因為旋轉而解變.現在還有MTEXT的還沒有做成功. 大俠你們幫手攻下MTEXT的好嗎?非常不错的代码,谢谢楼主分享錒 我是一个菜鸟,放到哪个文件里呀?
谢谢了 用 APPLOAD 命令進行加載, 以后就能自動加載了.
不行呀?是怎么回事没加载好吗? 程序中运行前取出每个文字的角度,旋转后,修改这些文字的角度为原来的角度。
用entmod,组码50 樓上應全面考慮,用戶在旋轉時可能選的是有很多個中文字. 那程序要增加一系列的變量來存下這麼多文字的角度等旋轉后再去更新那些文字. 思路我也這麼想過. 但我目前的功力還沒有達到啊. 旋转?
这种程序不要用(command "rotate")
你要作的是计算文本基点在旋转后的坐标,把这个文本移动到那里就行了。
这不是功力问题了,是选择模型问题。
伪码:
pt0<---旋转中心
th<----旋转角度
for i=0 to 选择集元素数-1
pt1<---第i个元素基点
pt2<---pt1相对于pt0旋转th后
把第i个元素从pt1移动到pt2
next i
看看,多省事,什么多文本、多变量。 樓上說了這麼多還是不如放個程序上來看看的好. 呵呵. 我真的覺得有些麻煩. 我想參考參考你的做法. 謝謝 根据kaixinmao的思路,结合BDYCAD 的程序,编了一个,能解决独立的文字实体旋转后保持角度不变,但对块中的文字需用其他办法。(defun zd (jidian zdian jiaodu / dx mbzd) ;求文字旋转后的基点
(command "line" jidian zdian "")
(setq dx (entlast))
(command "_rotate" dx "" jidian jiaodu)
(setq end (entget dx))
(setq mbzd (cdr (assoc '11 end)))
(command "_erase" dx "")
(setq mbzd mbzd)
) ;求文字旋转后的基点
(defun c:test (/ ss pt rang textss n sslen wt text lentextss jd mbd)
(setq ss (ssget))
(setq pt (getpoint "\n选择基点:"))
(setq rang (getreal "\n输入旋转角度:"))
(setq textss (ssadd)) ;构造文字文字集合以及非文字实体集合
(setq n 0)
(if ss
(progn
(setq sslen (sslength ss))
(while (< n sslen)
(setq wt (ssname ss n))
(setq text (cdr (assoc 0 (entget wt))))
(if (or (= text "TEXT")
(= text "MTEXT")
)
(progn
(ssadd wt textss)
(ssdel wt ss)
(setq sslen (- sslen 1))
)
(setq n (1+ n))
)
) ;构造文字文字集合以及非文字实体集合
(command "rotate" ss "" pt rang) ;旋转非文字实体
(setq n 0);旋转文字实体
(setq lentextss (sslength textss))
(while (< n lentextss)
(setq wt (ssname textss n))
(setq jd (cdr (assoc 10 (entget wt))))
(setq mbd (zd pt jd rang))
(command "move" wt "" jd mbd)
(setq n (1+ n))
);旋转文字实体
)
)
)
何须这么麻烦!先写个初级版本
;|旋转选集,保留文字角度v1.0-------------无痕.2004.1.1
v0.1 未考虑坐标系转换.对"TEXT" "MTEXT"有效.
|;
(defun c:rt-txt ()
(vl-cmdf ".undo" "be")
(princ "\n 选择实体:")
(setq ss (ssget)
pt (getpoint "\n基点:")
ang (getangle "\n旋转角度:")
i 0)
(repeat (sslength ss)
(setq e (ssname ss i)
i (1+ i)
el (entget e)
en (cdr(assoc 0 el))
txtang (if (member en '("TEXT" "MTEXT")) (assoc 50 el) nil))
(vl-cmdf ".rotate" e "" pt (angtos ang 0 4))
(if txtang
(progn (setq el2 (entget e))
(entmod (subst txtang (assoc 50 el2) el2))
)))
(vl-cmdf ".undo" "e")(princ)
)
页:
[1]
2