buble上的高度
你好,我想自动将高度值放入块的文本字符串中
该高度值将是P1和P2的z值之间的差值。
所以这个lisp应该像这样工作:
第一次单击=块的基点
第二次点击=P1
第三次点击=P2
一个月的go Tharwat非常有帮助(再次感谢),为我写了这封信:
(defun c:spou(/ sp p)
;; Tharwat 15.Feb.2016 ;;
(setq sp
(vlax-get (vla-get-activelayout
(vla-get-ActiveDocument (vlax-get-acad-object)))
'Block)
)
(if (tblsearch "BLOCK" "spotu")
(while (setq p (getpoint "\nSpecify point :"))
(vla-put-textstring
(car (vlax-invoke
(vla-insertblock
sp
(vlax-3d-point p)
"spotu"
1.0
1.0
1.0
0.0)
'getattributes))
(rtos (/ (cadr p) 1000.) 2 2)
)
)
)
(princ)
)(vl-load-com)
也许这是一个很好的起点。
泡图纸
如果有人能帮我,我会很高兴的 确定要成为属性?
你能用文字吗?还是多行文字? 这里有相似之处。
http://www.cadtutor.net/forum/showthread.php?98683-自动创建块宏&p=672657#post672657
谢谢你的回复
我需要一些东西,把高度值(zP1-zP2)从2点击2点,把椭圆周围的数字。如果这是一个块,则属性块或mtex+椭圆将是相同的。
(defun C:test ( / e o p d )
(setvar 'errno 0)
(and
vlax-get-acad-object
(while (/= 52 (getvar 'errno))
(setq e (car (nentsel "\nSelect text to fill: ")))
(cond
((= 7 (getvar 'errno))
(princ "\nMissed, try again.") (setvar 'errno 0)
)
((and e (not (vlax-property-available-p (setq o (vlax-ename->vla-object e)) 'TextString)))
(princ "\nThis is not a text object.") (setq e nil)
)
((and o (eq (vla-get-Lock (vla-item (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-Layer o))) :vlax-true))
(princ "\nThis object is on a locked layer.") (setq e nil)
)
(e
(if
(and
(setq p (getpoint "\nSpecify first point: "))
(cadr (setq p (cons p (list (getpoint "\nSpecify second point: " p)))))
(setq d (rtos (abs (apply '- (mapcar 'last (mapcar '(lambda (x) (trans x 1 0)) p))))))
)
(cond
( (= "ATTDEF" (cdr (assoc 0 (entget e)))) (vla-put-TagString o d) )
( T (vla-put-TextString o d) )
)
)
(setvar 'errno 52)
)
(T nil)
)
)
)
(princ)
);| defun |; (or vlax-get-acad-object (vl-load-com)) (princ)
编辑:该死的,我没有注意到Tharwat的代码,你想在填充该属性之前插入块。 这很有效。当我选择块气泡时。dwg,此lisp更改值。非常感谢。你帮了我很大的忙。
我想问你是否可能:
1、第一次点击->插入块
2、在不使用单位的情况下,将精度限制在0.00
提前感谢 我建议您反转输入:
-首先指定距离的2个点
-然后插入块
(defun C:test ( / *error* p ar Atts a)
(defun *error* (m) (and ar (setvar 'attreq ar)) (print m) (princ))
(redraw)
(and
vlax-get-acad-object
(tblsearch "BLOCK" "spotu")
(last (setq p (list (getpoint "\nSpecify first point: "))))
(last (setq p (append p (list (getpoint "\nSpecify second point: " (car p))))))
(not (apply 'grdraw (append p (list 3 7))))
(last (setq p (append p (list (getpoint "\nSpecify insertion point :")))))
(or
(= 0 (getvar 'attreq))
(and (setq ar (getvar 'attreq)) (setvar 'attreq 0))
)
(setq Atts
(vlax-invoke
(vla-InsertBlock
(vlax-get (vla-get-activelayout (vla-get-ActiveDocument (vlax-get-acad-object))) 'Block)
(vlax-3D-point (last p))
"spotu"
1.0
1.0
1.0
0.0
)
'GetAttributes
)
)
(setvar 'attreq (if ar ar 0))
(vl-some '(lambda (x) (and (= (vla-get-TagString x) "22.22") (setq a x))) Atts)
(vla-put-TextString
a
(rtos
(apply '- (mapcar 'last (mapcar '(lambda (x) (trans x 1 0)) (cdr (reverse p)))))
2 2
)
)
)
(redraw)
(princ)
);| defun |; (or vlax-get-acad-object (vl-load-com)) (princ)
所以你不会留下未填充的属性。 这是我想要的工作。
非常感谢你。
我能以米为单位得到结果吗?现在和我通常的工作单位一样是毫微米级的。
在上一个lisp中,转换字符串是
(/ 1000.)。
只需更改此行:
(rtos
(apply '- (mapcar 'last (mapcar '(lambda (x) (trans x 1 0)) (cdr (reverse p)))))
2 2
)
收件人:
(rtos
(/ (apply '- (mapcar 'last (mapcar '(lambda (x) (trans x 1 0)) (cdr (reverse p))))) 1000.)
2 2
)
页:
[1]
2