jimwithaj 发表于 2022-7-6 11:38:42

哇,这是一口,谢谢你的快速反应。我没想到会这么快得到答复。
不幸的是,我不知道如何激活它。

Lee Mac 发表于 2022-7-6 11:40:34

阅读以下内容:
http://www.cadtutor.net/forum/showthread.php?t=1390

alanjt 发表于 2022-7-6 11:43:00

这就是我担心的。虽然Lee的代码没有错,但您应该真正探索实际字段是如何创建的,而不是如何编码的。你说你对田地知之甚少。抓住这个机会,学会钓鱼。

Lee Mac 发表于 2022-7-6 11:46:36

JimwithAj,你最后成功了吗?

jimwithaj 发表于 2022-7-6 11:50:23

是的,谢谢。我对它做了一个小改动,让它完全按照我想要的方式工作,因为最初显示的值与我的“scale name”的值不对应,而不是1:#设置。
一、 e.如果我的视口比例名称为1:1000,并且使用Autocad的对象“比例名称”字段返回1:1000的值。使用lisp返回的值为1:0.5。类似地,1:200比例名称返回的值为1:0.1。
所以我所要做的就是把最后一个值乘以1000,然后所有的都是滴答声boo,所以我把你的lisp乘法值2改为0.002,效果很好。
再次感谢李,这正是我想要的。
 

(defun c:VPortField (/ *error* DOC ENT OBJ PT UFLAG)
(vl-load-com)
;; Lee Mac~25.02.10

(defun *error* (msg)
   (and UFlag (vla-EndUndoMark doc))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ))


(while
   (progn
   (setq ent (car (entsel "\nSelect Viewport to Retrieve Scale: ")))

   (cond ((eq 'ENAME (type ent))

            (if (eq "AcDbViewport"
                      (vla-get-Objectname
                        (setq Obj (vlax-ename->vla-object ent))))

                (if (setq pt (getpoint "\nSelect Point for Field: "))
                  (progn                     
                  (setq uFlag
                           (not (vla-StartUndomark
                                  (setq doc
                                       (vla-get-ActiveDocument
                                           (vlax-get-acad-object)))))

                        pt (trans pt 1 0))

                  (vla-AddMText

                      (if (zerop (vla-get-ActiveSpace doc))
                        
                        (if (eq :vlax-true
                              (vla-get-mspace doc))

                        (vla-get-ModelSpace doc)
                        (vla-get-PaperSpace doc))

                        (vla-get-ModelSpace doc))

                      (vlax-3D-point pt) 0.

                      (strcat "%<\\AcExpr %<\\AcObjProp Object(%<\\_ObjId "
                              
                              (itoa (vla-get-ObjectId obj))

                              ">%).CustomScale >% * 0.002 \\f \"1:%lu2%ct1%qf2816\">%"))

                  (setq uFlag (vla-EndUndomark doc))))
               
                (princ "\n** Object Must be a Viewport **"))))))
(princ))

Lee Mac 发表于 2022-7-6 11:54:26

太好了-很高兴这有帮助
 
PS>阅读此

jimwithaj 发表于 2022-7-6 11:55:48

李,你好,
 
我一直在肆无忌惮地使用你的lisp,不知道你是否可以为我稍微调整一下,让它允许我选择一个对象和一个视口。
 
提前感谢

woodman78 发表于 2022-7-6 11:59:13

我有一个字段设置,使用视口比例和打印比例在图形上显示比例。我有LISP,可以应用A3或A1中的打印设置,作为这些设置的一部分,它们会全部重新生成,因此图形上的比例会发生变化,因为打印比例会发生变化。我对pdf和dwf也做了同样的处理。
 
我还在标题刻度上设置了一个条,在A1上长度为100mm,但在A3上尺寸变为50mm。我认为它运行得很好。
 
我在这个论坛上得到了很多关于Lisp程序的帮助。

Lee Mac 发表于 2022-7-6 12:04:31

 
嗨,吉姆,
 
我不确定我是否完全理解您的请求,当前代码检索视口比例并将其放置在字段中,您希望从对象中检索什么?

jimwithaj 发表于 2022-7-6 12:07:33

李,你好,
如果我有一个不规则的视口,即它开始时是一个不规则的对象,我将其定义为一个对象,进入mview->object并选择该对象。现在,当我运行vportfield并选择此视口时,我得到一个错误,即**对象必须是视口**
为你的帮助干杯
页: 1 [2]
查看完整版本: 创建显示的字段