Jack_O'nei 发表于 2022-7-6 15:48:42

这就是问题所在。我在另一台机器上有一个2002年的版本,它在上面工作,但在2007年的版本上没有。

fixo 发表于 2022-7-6 15:51:58

试试另一个
首先选择所有矩形或垂直线,
假设所有这些对象都位于
在层“0”上
然后选择水平线
仅在A2008eng上测试
Hth公司


;;hm.lsp
(defun group-by-num (lst num / ls ret)
(if (= (rem (length lst) num ) 0)
   (progn
   (setq ls nil)
   (repeat (/ (length lst) num)
(repeat num (setq ls
          (cons (car lst) ls)
      lst (cdr lst)))
(setq ret (append ret (list (reverse ls)))
      ls nil)))
   )
ret
)
;;holes markers
(defun C:hm (/ acsp adoc axss bpt cnt en ipt obj oline points ss wid)
(or adoc
   (setq adoc
   (vla-get-activedocument
       (vlax-get-acad-object)
   )
   )
)

(or acsp
   (setq acsp
   (vla-get-block
       (vla-get-activelayout adoc)
   )
   )
)
(setq wid 6.5515)
(if (and (setq ss (ssget '((0 . "LWPOLYLINE,LINE")(8 . "0"))));;select objects on layer "0"
      (setq en (entsel "\nSelect Intersecting Line > ")))
   (progn
   (setq axss (vla-get-activeselectionset adoc)
    oline (vlax-ename->vla-object (car en))
    )
   (vlax-for obj axss
(if (not (vl-catch-all-error-p
           (setq ipt (vl-catch-all-apply
             (function (lambda()
                (vlax-invoke obj 'IntersectWith oline acextendnone))))))
       )
(if (= (length ipt) 3)
(setq points (append (list ipt) points))
(setq points (append (group-by-num ipt 3) points))
    )))
   (setq points (vl-sort points (function (lambda(a b)(< (car a)(car b))))))
   (setq cnt 1)
   (while (setq ipt (car points))
   (if (= (rem cnt 2) 1)
       (setq ipt (list (- (car ipt) wid)(cadr ipt)(caddr ipt)))
       )
       (setq bpt (cons ipt bpt))
             (setq points (cdr points))
              (setq cnt (1+ cnt))
)
(while (setq ipt (car bpt))
   (vlax-invoke acsp 'InsertBlock ipt "3ANSYMB" 1 1 1 0)
   (setq bpt (cdr bpt))
   )
   )
   )
(princ)
)
(vl-load-com)

 
~'J'~

Lee Mac 发表于 2022-7-6 15:53:20

啊,对-我不太清楚为什么它在07或08上不起作用,但你说它插入第一个矩形好吗?

Jack_O'nei 发表于 2022-7-6 15:55:42

它并没有给出错误信息,它只是认为它已经完成了。
 
我用2002在另一台机器上试过,它在那里工作。这两个版本之间一定有些不同。
 
谢谢你的帮助。。。在正确的版本中,这正是我想要的。
 
我也要试试看那部电影。这将是一个很棒的训练工具。

Lee Mac 发表于 2022-7-6 15:59:44

我现在很困惑,因为我在LISP中没有使用任何ACAD命令,所以命令提示的顺序不会有什么不同。但我看不出还能是什么
 
菲索,有什么想法吗?

Jack_O'nei 发表于 2022-7-6 16:04:11

修复。。。您的版本适用于2007年。谢谢

Jack_O'nei 发表于 2022-7-6 16:08:09

李,
 
是的,你的程序完美地把它放在左边的第一个矩形上,然后程序就好像正常完成一样结束了。没有错误消息,毫不犹豫。。。它认为它完成了。你的在2002年的机器上工作正常。。。。版本中一定有一些不同。

Lee Mac 发表于 2022-7-6 16:10:41

也许Fixo可以提供一些见解-无论如何,很高兴你的问题现在得到解决-我打赌这会节省你一些时间!

fixo 发表于 2022-7-6 16:11:52

嗨,伙计
对不起,我无法向你解释
因为我的穷
英语
我只是一个程序员,什么都不是
 
~'J'~

Lee Mac 发表于 2022-7-6 16:16:52

 
没问题,顺便说一句,代码不错
页: 1 [2]
查看完整版本: 使用lisp或vba放置对象