Ohnoto 发表于 2022-7-6 09:27:42

在选定对象之间插入块

我有一些代码来自一个曾经为我们工作的人,在那里它插入了一个块,其距离值位于两点之间的中点。我希望能够将其调整到默认情况下做相同的事情,但它将块放在基于定位值的分组选择的每个极块之间,类似于此线程,它根据这些值调整数字。。。
 
http://www.cadtutor.net/forum/showthread.php?58422-属性重新编号&p=395948&viewfull=1#post395948
 
... 用户不必点击每个极点上的点。
 
随附的是LISP和DWG块。
EXADO。图纸
EXADO_Main-0001。lsp

Ohnoto 发表于 2022-7-6 09:33:23

有人能帮忙吗?

Ohnoto 发表于 2022-7-6 09:35:57

我试着用这个做一些事情,虽然在某些方面是错误的。
 

(defun c:STADO(/ adoc i SelSet StrValidate AttVal StaList)
(vl-load-com)
(setq adoc (vla-get-activedocument (vlax-get-acad-object))
   i    0)
(if (ssget ":L" '((0 . "INSERT")(2 . "`*U*,POLE-STA")))
   (cond (
   (vlax-for Sta(setq SelSet (vla-get-activeselectionset adoc))
(if (and (equal (vla-get-effectivename sta) "pole-sta")
       (/= (setq StrValidate (vla-get-textstring (car (setq AttVal
                  (vlax-invoke
                      Sta
                      'GetAttributes))))) ""))
         (setq StaList
            (cons
            (list StrValidate (nth 26 AttVal))
            StaList))
               )
      )

   (foreach
         Blk(vl-sort
                StaList
                (function (lambda (p1 p2) (< (car p1) (car p2)))))
    (setq p1 (vlax-get p1 'insertionpoint))
    (setq p2 (vlax-get p2 'insertionpoint))
      (setq adodist (distance p1 p2))
    (setq adodist (rtos adodist 2 0))
    (setq adomid (mapcar '+ p1 (mapcar '/ (mapcar '- p2 p1) '(2.0 2.0 2.0))))
    (setq adoang (angle p1 p2))   
    (command "-insert" "aerial distance -dyn" adomid "" (angtos adoang) adodist "")
    (cadr Blk) (itoa (setq i (1+ i))))
   )
    )
   (vla-delete SelSet)
)
(princ)
)
 
我得到错误“错误的参数类型:VLA-OBJECT nil”。我相信这是在lambda和p1/p2变量编码的底部。

pBe 发表于 2022-7-6 09:41:53


(defun c:STADO(/ AddOffset adoc SelSet StrValidate AttVal StaList p1 p2 dblk)
(vl-load-com)
(defun AddOffset(lst)
   (list (+ (car lst) 11.25) (- (cadr lst) 11.0135) 0.0))      
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(if (ssget ":L" '((0 . "INSERT")(2 . "`*U*,POLE-STA")))
(cond (
(vlax-for
      Sta
         (setq SelSet (vla-get-activeselectionset adoc))
   (if (and (equal (vla-get-effectivename sta) "pole-sta")
            (/= (setq StrValidate
                           (vla-get-textstring
                                 (car (setq AttVal
                                                   (vlax-invoke
                                                         Sta
                                                         'GetAttributes)))))
                  ""))
         (setq StaList
                      (cons
                            (list StrValidate (nth 26 AttVal))
                            StaList))
         )
   )
(setq StaList
          (vl-sort
                StaList
                (function (lambda (p1 p2) (< (car p1) (car p2))))))
(while (and (setq p1 (car StaList))
         (setq p2 (cadr Stalist)))
   (setq p1   (AddOffset (vlax-get (cadr p1) 'insertionpoint))
         p2   (AddOffset (vlax-get (cadr p2) 'insertionpoint))
         adodist (distance p1 p2)
         adodist (rtos adodist 2 0)
         adomid(mapcar (function (lambda (a b) (/ (+ a b) 2.)))
                           p1
                           p2)
         adoang(angle p1 p2))
(setq dblk (vlax-invoke
                      (vlax-get (vla-get-ActiveLayout adoc) 'Block)
                      'insertblock
                      adomid
                      "aerial distance -dyn"
                      1
                      1
                      1
                      adoang)
         )
    (vla-put-textstring
         (car (vlax-invoke dblk 'Getattributes))
         adodist)
   (setq Stalist (cdr StaList))
   )
)
)
(vla-delete Selset)
)
(princ)
)

Ohnoto 发表于 2022-7-6 09:43:51

谢谢pBe!
 
这是一个发生小错误的图像。
 

 
我绕着方块旋转,用一条不直的磁极线进行测试。中间派曾经以错误的角度和价值出现。下面绿色的是正确的。
 
然后,我在末端重新插入最后一根杆子,它以正确的角度进入,但输入的值为26’,两者之间的距离为25.0000。
 
代码似乎取自原始插入点,而不是当前插入点。

pBe 发表于 2022-7-6 09:49:27

奶酪和米饭
 
... 这一定是我的浏览器,甚至看不到你两个帖子中的图片,这件事是从一个月前it人员屏蔽这个网站开始的。现在我找到了一种方法来解决这个问题。
但是这个网页并不像以前那样。真倒霉

Ohnoto 发表于 2022-7-6 09:53:19

它可能阻塞了photobucket。我听说有些地方这样做。

Ohnoto 发表于 2022-7-6 09:54:10

好的,我认为这只是文件有点问题,插入和角度在一个新的图纸上工作,很好,按照计划和要求。但是,当我在页面选项卡的视口中运行程序时,它会在图纸空间而不是模型空间中插入块。

SLW210 发表于 2022-7-6 10:00:24

 
尝试直接在这个网站上发布图片,很多人都有自己的工作区网站,比如photobucket。这减少了其他人可以提供的帮助。只需“Go Advanced”“Manage Attachments”“Browse”“Upload”。

Ohnoto 发表于 2022-7-6 10:04:03

 
我本来是这样做的,但得到了错误
 
“出现以下错误:
对齐文本。bmp:无效文件“
 
可以通过网站上传的图像的大小限制是多少?
页: [1] 2
查看完整版本: 在选定对象之间插入块