blueshake 发表于 2022-7-6 10:15:42

绘制动态文本和线条。

大家好
以下代码用于绘制动态文字和线条。
如图所示。
http://www.ikaca.sh.cn/attachment/201010/23/1745_1287803822VAzw.png
 
但错误总是发生。调试之后。
我发现这些代码中存在代码。
(setq text (vla-addtext mSpace fh (vlax-3d-point nextPt)))
 
 
整个计划。感谢您抽出时间阅读本文。
(defun c:tt(/)
        (vl-load-com)
(defun *error* (msg)
        (setvar "osmod" osmode_old)
)
(defun text_length (Text / textent ang sinrot cosrot t1 t2 p0 p1 p2 p3 p4)
        (setq         textent (entget (vlax-vla-object->ename Text)))
        (setq         p0(cdr (assoc 10 textent))
                        ang(cdr (assoc 50 textent))
                        sinrot (sin ang)
                        cosrot (cos ang)
                        t1(car (textbox textent))
                        t2(cadr (textbox textent))
                        p1(list (+ (car p0) (- (* (car t1) cosrot) (* (cadr t1) sinrot)))
                                (+ (cadr p0)
                                (+ (* (car t1) sinrot) (* (cadr t1) cosrot))
                                )
                                )
                        p2(list
                                (+ (car p0)
                                (- (* (car t2) cosrot) (* (cadr t1) sinrot))
                                )
                                (+ (cadr p0)
                                (+ (* (car t2) sinrot) (* (cadr t1) cosrot))
                                )
                                )
        )
                        (distance p1 p2)
)
(setq mSpace (vla-get-ModelSpace(vla-get-ActiveDocument (vlax-get-acad-object))))
        (setq entbak (ssadd))
        (setq osmode_old (getvar "osmode"))
        (setvar "osmode" 0)
        (setq pt (getpoint "\nget the center point."))
        (command "_.circle" pt)
        (princ (strcat "\ninput the radius of circle"))
        (command pause)
        (setq cir (vlax-ename->vla-object (entlast)))
        (ssadd (entlast) entbak)

        ;start to input the makr.
        (setq hasMore T)
        (while hasMore
        (setq nextPt (grread T 4 0)
                   readtype (car nextPt)
                     readvale (cadr nextPt)
        )

    (cond ((= readtype 5)
                                (setq nextPt (cadr nextPt))
                                (setq nextPt (trans nextPt 1 0))
                                (setq basePt (vlax-curve-getclosestpointto cir nextPt))
                                (if (not line)
                                        (progn
                                                (if (not fh)
                                                        (setq fh "A")
                                                )
                                                (setq text (vla-addtext mSpace fh (vlax-3d-point nextPt)))
                                                (ssadd (entlast) entbak)
                                                (setq txtlen (text_length text))
                                                (setq l2end (vla-addline mSpace (vlax-3d-point nextPt) (vlax-3d-point l2end)))
                                        )
                                        (progn
                                                (vla-put-startpoint line (vlax-3d-point basePt))
                                                (vla-put-endpoint line (vlax-3d-point nextPt))
                                                (vla-update line)
                                                (setq ptt (car nextPt))
                                                (if (> ptt pt)
                                                        (progn
                                                                (setq textleft (+ (car nextPt) (getvar "dimgap")))
                                                                (setq l2left (+ (car nextPt) txtlen (getvar "dimgap")))
                                                        )
                                                        (progn
                                                                (setq textleft (- (car nextPt) (getvar "dimgap") txtlen))
                                                                (setq l2left textleft)
                                                        )
                                                )
                                                (vla-put-insertionpoint text (vlax-3d-point list textleft (+ (cadr nextPt) (getvar "dimgap")) 0))
                                                (vla-update text)
                                                (vla-put-startpoint l2 (vlax-3d-point nextPt))
                                                (setq l2end (list l2left (cadr nextPt) 0))
                                                (vla-put-endpoint l2 (vlax-3d-point l2end))
                                                (vla-update l2)
                                        )
                                )       
                   )
                   ((= readtype 3)
                                (setq i nil)
                   )
                   ((or (= 25 readtype) (= 13 readtype))
                                ;(
                   )
        )
)
)

blueshake 发表于 2022-7-6 11:20:46

找出原因。应该是:
(setq text (vla-addtext mSpace fh (vlax-3d-point nextPt) (getvar "dimtxt")))
 
更新的代码:
(defun c:tt(/ line fh text)
        (vl-load-com)
(defun *error* (msg)
        (setvar "osmod" osmode_old)
)
(defun text_length (Text / textent ang sinrot cosrot t1 t2 p0 p1 p2 p3 p4)
        (setq         textent (entget (vlax-vla-object->ename Text)))
        (setq         p0(cdr (assoc 10 textent))
                        ang(cdr (assoc 50 textent))
                        sinrot (sin ang)
                        cosrot (cos ang)
                        t1(car (textbox textent))
                        t2(cadr (textbox textent))
                        p1(list (+ (car p0) (- (* (car t1) cosrot) (* (cadr t1) sinrot)))
                                (+ (cadr p0)
                                (+ (* (car t1) sinrot) (* (cadr t1) cosrot))
                                )
                                )
                        p2(list
                                (+ (car p0)
                                (- (* (car t2) cosrot) (* (cadr t1) sinrot))
                                )
                                (+ (cadr p0)
                                (+ (* (car t2) sinrot) (* (cadr t1) cosrot))
                                )
                                )
        )
                        (distance p1 p2)
)
(setq mSpace (vla-get-ModelSpace(vla-get-ActiveDocument (vlax-get-acad-object))))
        (setq entbak (ssadd))
        (setq osmode_old (getvar "osmode"))
        (setvar "osmode" 0)
        (setq pt (getpoint "\nget the center point."))
        (command "_.circle" pt)
        (princ (strcat "\ninput the radius of circle"))
        (command pause)
        (setq cir (vlax-ename->vla-object (entlast)))
        (ssadd (entlast) entbak)

        ;start to input the makr.
        (setq hasMore T)
        (while hasMore
        (setq nextPt (grread T 4 0)
                   readtype (car nextPt)
                     readvale (cadr nextPt)
        )

    (cond ((= readtype 5)
                                (setq nextPt (cadr nextPt))
                                (setq nextPt (trans nextPt 1 0))
                                (setq basePt (vlax-curve-getclosestpointto cir nextPt))
                                (if (not line)
                                        (progn
                                                (if (not fh)
                                                        (setq fh "A")
                                                )
                                                (setq text (vla-addtext mSpace fh (vlax-3d-point nextPt) (getvar "dimtxt")))
                                                (ssadd (entlast) entbak)
                                                ;(setq txtlen (text_length text))
                                                (setq line (vla-addline mSpace (vlax-3d-point basePt) (vlax-3d-point nextPt)))
                                                (ssadd (entlast) entbak)
                                                (setq txtlen (text_length text))
                                                (setq l2end (list (+ (car nextPt) txtlen) (cadr nextPt) 0))
                                                (setq l2 (vla-addline mspace (vlax-3d-point nextPt) (vlax-3d-point l2end)))
                                                (ssadd (entlast) entbak)
                                        )
                                        (progn
                                                (vla-put-startpoint line (vlax-3d-point basePt))
                                                (vla-put-endpoint line (vlax-3d-point nextPt))
                                                (vla-update line)
                                                (setq ptt (car nextPt))
                                                (setq ptx (car pt))
                                                (if (> ptt ptx)
                                                        (progn
                                                                (setq textleft (+ (car nextPt) (getvar "dimgap")))
                                                                (setq l2left (+ (car nextPt) txtlen (getvar "dimgap")))
                                                        )
                                                        (progn
                                                                (setq textleft (- (car nextPt) (getvar "dimgap") txtlen))
                                                                (setq l2left textleft)
                                                        )
                                                )
                                                (vla-put-insertionpoint text (vlax-3d-point (list textleft (+ (cadr nextPt) (getvar "dimgap")) 0)))
                                                (vla-update text)
                                                (vla-put-startpoint l2 (vlax-3d-point nextPt))
                                                (setq l2end (list l2left (cadr nextPt) 0))
                                                (vla-put-endpoint l2 (vlax-3d-point l2end))
                                                (vla-update l2)
                                        )
                                )       
                   )
                   ((= readtype 3)
                                (setq hasMore nil)
                   )
                   ((or (= 25 readtype) (= 13 readtype))
                                ;(
                   )
        )
)
)
页: [1]
查看完整版本: 绘制动态文本和线条。