Butch 发表于 2022-7-8 10:42:53

距离值->文本

大家好!
我需要一些帮助。
我发现自己每天都在测量从一个基点到其他点的距离,然后在几何图下方的文本形式中输入距离值。
有没有什么方法可以测量距离,立即得到一个文本及其值,并将其定位在您想要的位置。
 
我用dimesnions做了一些事情,使用基线选项,然后爆炸,但造成了很多混乱,你最终清理,这导致了大量的时间损失。
 
这是一个示例。
文字值表示红线与绿线的距离。
 

eldon 发表于 2022-7-8 10:51:33

 
谢谢Butch
 
 
你可以通过点击空格来旋转文本,或者你在这里要求不同的东西?
 
 
这应该不会太难合并。

Patrick Hughes 发表于 2022-7-8 10:54:43

试试这个:
 
我为例程增加了更多的安全性,并加入了“基础提升”选项。
 
你能澄清一下你的其他要求吗。

Lee Mac 发表于 2022-7-8 11:00:31

李-麦克这东西很有魅力!:-)
我的意思是,你的第一次点击是距离测量的基点。指定基点后,只需单击要测量的其他点,以确保与基点之间的距离。。。看这幅画。
有没有可能你只需要2个文本位置,就像图片上的那样?
一个更伟大的人!;-)
谢谢你这么做!
http://img196.imageshack.us/img196/1995/afdl.th.jpg

Butch 发表于 2022-7-8 11:02:23

这样地?
 

;; Distance Plotter by Lee McDonnell (Lee Mac)
;; 16.06.2009

(defun c:dist2 (/ *error* doc spc tmp pt1 pt2 tObj gr)
(vl-load-com)

(defun *error* (msg)
   (if (not (wcmatch (strcase msg) "*CANCEL*,*EXIT*"))
   (princ (strcat "\n<< Error: " msg " >>")))
   (princ))

(if (eq 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar "CLAYER"))))))
   (progn
   (princ "\n<< Current Layer Locked >>") (exit)))

(or *Mac$Rot* (setq *Mac$Rot* 0.0))
(or *Mac$Def* (setq *Mac$Def* 0.0))
(setq doc (vla-get-ActiveDocument
             (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
               (vla-get-modelspace doc)
               (vla-get-paperspace doc))
             (vla-get-modelspace doc)))

(setq tmp (getreal
             (strcat "\nSpecify Base Elevation <" (rtos *Mac$Def*) ">: ")))
(or (not tmp) (setq *Mac$Def* tmp))
(if (setq pt1 (getpoint "\nSelect Base Point: "))
   (while (setq pt2 (getpoint "\nSelect Second Point: " pt1))
   (vla-put-Alignment
       (setq tObj
         (vla-addText spc
         (rtos
             (+ (distance pt1 pt2) *Mac$Def*))
               (vlax-3D-point '(0 0 0))
               (getvar "TEXTSIZE"))) acAlignmentMiddleCenter)
   (while
       (or
         (and (setq gr (grread t 15 0))
            (eq 5 (car gr)))
         (and (eq 2 (car gr))
            (eq 32 (cadr gr))))
       (cond ((and (eq 5 (car gr)) (listp (cadr gr)))
            (vla-move tObj
                        (vla-get-TextAlignmentPoint tObj)
                        (vlax-3D-point (cadr gr))))
             ((and (eq 2 (car gr)) (eq 32 (cadr gr)))
            (vla-put-Rotation tObj
                (setq *Mac$Rot* (- (/ pi 2.) *Mac$Rot*))))))))
(princ))

fuccaro 发表于 2022-7-8 11:08:29

李,抱歉耽搁了!
它工作得很好,但可以更快。你能做以下事情吗。。。与测量距基点的总距离不同,您是否可以仅测量距基点的δx或δy值?对不起,我太挑剔了:-(
看这张照片,你就会明白了。
http://img197.imageshack.us/img197/2513/asdgf.th.jpg

Butch 发表于 2022-7-8 11:12:21

试试这个:
 

;; Distance Plotter by Lee McDonnell (Lee Mac)
;; 16.06.2009

(defun c:dist2 (/ *error* doc spc tmp tmp2 pt1 pt2 tObj gr)
(vl-load-com)

(defun *error* (msg)
   (if (not (wcmatch (strcase msg) "*CANCEL*,*EXIT*"))
   (princ (strcat "\n<< Error: " msg " >>")))
   (princ))

(if (eq 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar "CLAYER"))))))
   (progn
   (princ "\n<< Current Layer Locked >>") (exit)))

(or *Mac$Rot* (setq *Mac$Rot* 0.0))
(or *Mac$Def* (setq *Mac$Def* 0.0))
(or *Mac$Dir* (setq *Mac$Dir* "Y"))
(setq doc (vla-get-ActiveDocument
             (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
               (vla-get-modelspace doc)
               (vla-get-paperspace doc))
             (vla-get-modelspace doc)))

(setq tmp (getreal
             (strcat "\nSpecify Base Elevation <" (rtos *Mac$Def*) ">: ")))
(or (not tmp) (setq *Mac$Def* tmp))
(initget "X Y")
(setq tmp2 (getkword
            (strcat "\nSpecify Axis to Measure <" *Mac$Dir* ">: ")))
(or (not tmp2) (setq *Mac$Dir* tmp2))
(if (setq pt1 (getpoint "\nSelect Base Point: "))
   (while (setq pt2 (getpoint "\nSelect Second Point: " pt1))
   (vla-put-Alignment
       (setq tObj
         (vla-addText spc
         (rtos
             (+ (- ((if (eq *Mac$Dir* "X") car cadr) pt2)
                   ((if (eq *Mac$Dir* "X") car cadr) pt1)) *Mac$Def*))
               (vlax-3D-point '(0 0 0))
               (getvar "TEXTSIZE"))) acAlignmentMiddleCenter)
   (while
       (or
         (and (setq gr (grread t 15 0))
            (eq 5 (car gr)))
         (and (eq 2 (car gr))
            (eq 32 (cadr gr))))
       (cond ((and (eq 5 (car gr)) (listp (cadr gr)))
            (vla-move tObj
                        (vla-get-TextAlignmentPoint tObj)
                        (vlax-3D-point (cadr gr))))
             ((and (eq 2 (car gr)) (eq 32 (cadr gr)))
            (vla-put-Rotation tObj
                (setq *Mac$Rot* (- (/ pi 2.) *Mac$Rot*))))))))
(princ))

Lee Mac 发表于 2022-7-8 11:18:04

李,你现在可能想杀了我…:-)
根据测量值的方向,这件事在逻辑上运行良好,可以获得-或+值。
问题是,即使在距离基点左侧的点是否定的,我也必须总是把它们写成肯定的。。。是的,我知道这很糟糕:-(
你有没有可能让他们转向Abslout值,这样他们总是积极的?(你现在可能经常提到我母亲;-)
http://img197.imageshack.us/img197/5163/gtrs.th.jpg

Lee Mac 发表于 2022-7-8 11:21:08

这不是问题-只需要一个小的改变:
 
3

Butch 发表于 2022-7-8 11:27:32

李·麦克!
我们仍然有一个问题。。。我们必须让你成为百万富翁;-)
这是一些很棒的东西,它将为我节省大量时间和无聊的编辑!
但是我有一个小问题。我定义了一个我想在你的工具中使用的文本样式(格式->文本样式->新建->并将其高度设置为0.4个单位和Arial字体。问题是,当我使用你的工具时,我的字体样式处于活动状态,我得到的是Arial字体样式,但无论我做什么,字体高度始终为0.2(在本例中,将其设置为0.4)。你能帮忙吗?
页: [1] 2
查看完整版本: 距离值->文本