我之前写过这段代码。在尺寸字符串上插入直径符号作为前缀。但不是%%c,而是一个正方形符号,带有一条模拟直径符号的线
- (defun c:test (/ aDoc selset e str data p1 )
- (defun MtexInfo ( mt / db dl ds );;LM snippet
- (if
- (and
- (wcmatch (cdr (assoc 0 (setq dl (entget mt)))) "*DIMENSION")
- (setq db (tblobjname "BLOCK" (cdr (assoc 2 dl))))
- )
- (while (and (setq db (entnext db)) (not ds))
- (if (eq "MTEXT" (cdr (assoc 0 (setq dl (entget db)))))
- (setq ds (mapcar '(lambda (j)
- (cdr (assoc j dl))) '(42 43 50 7 10))))
- )
- ) ds
- )
- (setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
- (if (setq selset (ssget '((0 . "DIMENSION"))))
- (repeat (sslength selset)
- (setq e (vlax-ename->vla-object (ssname selset 0))
- )
- (vla-put-Textprefix e
- "{\\Fgdt|c0;\\H0.75x;o} "
- )
- (setq data (mtexinfo (ssname selset 0)))
- (entmakex
- (list (cons 0 "LINE")
- (cons 10 (setq p1
- (polar (polar
- (last data)
- (+ pi (caddr data))
- (-
- (/ (car data) 2.0)
- (*
- (/ (cadr data) 2.0)
- (* (cdr
- (assoc 41 (tblsearch "STYLE" (nth 3 data)))
- )
- 0.75
- )
- )
- )
- )
- (+ (* pi 1.5) (caddr data))
- (/ (cadr data) 2.0)
- )
- )
- )
- (cons 11 (polar p1 (+ (/ pi 2.0) (caddr data)) (cadr data)))
- )
- )
- (ssdel (ssname selset 0) selset)
- )
- )
- (princ)
- )
问题是,如何将线(|)与维度联系起来?我对reactor有点生疏,在我确定通过object reactor是最好(或唯一)的方法之前,我不愿意继续编码。
有什么想法吗? |