Lisp用于将文本旋转为当前格式
大家好,我想知道是否有人对我在3D绘制建筑立面时遇到的问题有什么好主意。
我使用三维多段线在现场测量立面。回到办公室后,我得到了一条三维多段线的输出,在每个测量点上都有一个点和节点。该点与三维*俯视*视图对齐。然后旋转当前视图,使其与所需的建筑立面对齐。
我的问题有两个:
1) 是否有方法旋转点以查看当前视图中的点样式?
2) 当我的点信息在3D中绘制为点、点编号和高程时,是否有lisp例程围绕点的中心旋转点编号文本和标高文本,以在当前视图中显示为“正确”?
我不期待奇迹或编写LISP例程,但如果能提供一些指针,我会非常感激。
低音符 你好
(trans’(0.0.1.)2 0 T)返回当前视图平面的法向量。
您可以使用该向量修改210 DXF代码(或“正常”vla属性),并使用trans函数转换文本插入点。
这里有一个小示例,用于将选定的点和文本与当前视图平面对齐(您可能需要根据文本对齐方式处理11个DXF代码)
(defun c:RotateToView (/ n ss ent elst)
(if (setq norm (trans '(0. 0. 1.) 2 0 T)
n -1
ss (ssget '((0 . "POINT,TEXT")))
)
(while (setq ent (ssname ss (setq n (1+ n))))
(setq elst (entget ent)
ins (assoc 10 elst)
)
(if (= (cdr (assoc 0 elst)) "TEXT")
(entmod (subst (cons 10 (trans (cdr ins) ent norm))
ins
(subst (cons 210 norm) (assoc 210 elst) elst)
)
)
(entmod (subst (cons 210 norm) (assoc 210 elst) elst))
)
)
)
(princ)
) 嗨,吉尔,
谢谢你的Lisp程序。它工作得很好,可以让我得到我需要的东西。
LISP的文本元素是如何工作的?我可以旋转点以查看,但水平文字(位于点旁边)会飞离屏幕。目前,我正在选择所有要旋转的元素(点和文本),当我点击输入时,点旋转,文本显示。我犯了一个简单的错误吗?
再次感谢你的Lisp程序!
低音符 在进一步修改之后,我明白了文本插入点的含义。文本自身与当前视图正确对齐,但使用奇数基点从该点“重新插入”文本。
如何重新指定文字基点以围绕该点旋转?
亲切的问候
低音符 尝试以下轻微修改:
(defun c:RotateToView ( / n ss ent elst )
;; Gile, mod by Lee Mac
(if (setq norm (trans '(0. 0. 1.) 2 0 T) n -1
ss (ssget '((0 . "POINT,TEXT"))))
(while (setq ent (ssname ss (setq n (1+ n))))
(setq elst (entget ent))
(setq ins
(assoc
(if (eq '(0 0) (mapcar 'dxf '(72 73) (list elst elst)))
10 11
)
elst
)
)
(if (eq (dxf 0 elst) "TEXT")
(entmod
(subst
(cons (car ins) (trans (cdr ins) ent norm))
ins
(subst (cons 210 norm) (assoc 210 elst) elst)
)
)
(entmod (subst (cons 210 norm) (assoc 210 elst) elst))
)
)
)
(princ)
)
(defun dxf ( code lst ) (cdr (assoc code lst)))
谢谢李的修改。我正在欺骗代码的工作方式。有些部分可能是我正在阅读的LISP书中的几章。我将在周一发布一条关于成功的回复。
再次感谢
低音符 “trans”和坐标系有时需要一点时间才能理解和掌握,但你能很好地掌握Gile——我也从他那里学到了很多。 嗨LeeMac
我今天试了Lisp程序,取得了很大的成功。非常感谢-这将使提升变得非常容易!
当做
低音符
你很受欢迎Lownote-虽然Gile应该承担责任 谢谢很有魅力
页:
[1]
2