本帖最后由 baiyier1112 于 2013-4-20 17:49 编辑
求个lisp程序:如图,将文字连续复制到指定位置,并让文字与实体平行。
注意:复制后原文字要保留
(下面的动画示意是x_s_s_1做的)
拷贝文字随线角度,有高手x_s_s_1帮忙解决了,在此对其表示感谢。
由于这个功能我个人用的比较多,想要实现文字复制并平行实体,
即让这个功能适用于其他图元,包括曲线,块中线条等等。
我从明经找到了一个物体对齐的程序,不知能不能借鉴一下,现将两个程序的源代码附上,希望高手帮实现一下。
补充一下,我实际想要达到的效果:复制指定文字(如果能是实体会更加好),到指定线(包括曲线,块中线条等等)上的一点,并与该线平行,该命令可以连续操作。
实际操作效果类似与上面的第二个图片(第二个程序没有复制的功能,希望能补充上复制的功能。即:将第二个程序增加连续复制的效果。)
期待!!!!(第一个图片是第一个程序的效果。第二个图片是第二个程序的效果)
- ;;;拷贝文字随线角度 by x_s_s_1@163.com
- (vl-load-com)
- (defun c:ctb (/ ent enl pt1 pt2 mid_pt ang)
- ;;;;;;;;;;;;;; ============================================================================
- (defun emk_t (layer pt1 pt2 text ang n72 n73 h w sty /)
- (entmake (list '(0 . "text")
- '(100 . "AcDbEntity")
- (cons 8 layer)
- '(100 . "AcDbText")
- (cons 10 pt1)
- (cons 1 text)
- (cons 40 h)
- (cons 41 w)
- (cons 7 sty)
- (cons 72 n72)
- (cons 11 pt2)
- (cons 50 ang)
- (cons 73 n73)
- )
- )
- )
- ;;;;;;;;;;;;;; ============================================================================
- (setq ent (car (entsel "\n选择文字:")))
- ;;;;;;;;;;;;;; ============================================================================
- (if (= "TEXT" (cdr (assoc 0 (entget ent))))
- (progn
- (while (setq enl (entsel "\n选择对齐线:"))
- (if (= "LINE" (cdr (assoc 0 (entget (car enl)))))
- (progn
- (setq pt1 (cdr (assoc 10 (entget (car enl))))
- pt2 (cdr (assoc 11 (entget (car enl))))
- mid_pt (vlax-curve-getClosestPointTo
- (vlax-ename->vla-object (car enl))
- (cadr enl)
- )
- ang (angle pt1 pt2)
- )
- (if (and (> ang (* 0.5 pi)) (<= ang (* pi 1.5)))
- (setq ang (- ang pi))
- )
- (emk_t (cdr (assoc 8 (entget ent)))
- '(0 0 0)
- (polar mid_pt (+ ang (* 0.5 pi)) 100)
- (cdr (assoc 1 (entget ent)))
- ang
- 1
- 0
- (cdr (assoc 40 (entget ent)))
- (cdr (assoc 41 (entget ent)))
- (cdr (assoc 7 (entget ent)))
- )
- )
- )
- )
- )
- )
- ;;;;;;;;;;;;;; ============================================================================
- (princ)
- )
|