乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: Jack_O'nei

[编程交流] 使用lisp或vba放置对象

[复制链接]

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 15:48:42 | 显示全部楼层
这就是问题所在。我在另一台机器上有一个2002年的版本,它在上面工作,但在2007年的版本上没有。
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 15:51:58 | 显示全部楼层
试试另一个
首先选择所有矩形或垂直线,
假设所有这些对象都位于
在层“0”上
然后选择水平线
仅在A2008eng上测试
Hth公司
  1. ;;hm.lsp
  2. (defun group-by-num (lst num / ls ret)
  3. (if (= (rem (length lst) num ) 0)
  4.    (progn
  5.      (setq ls nil)
  6.      (repeat (/ (length lst) num)
  7. (repeat num (setq ls
  8.             (cons (car lst) ls)
  9.       lst (cdr lst)))
  10. (setq ret (append ret (list (reverse ls)))
  11.       ls nil)))
  12.    )
  13. ret
  14. )
  15. ;;holes markers
  16. (defun C:hm (/ acsp adoc axss bpt cnt en ipt obj oline points ss wid)
  17. (or adoc
  18.      (setq adoc
  19.      (vla-get-activedocument
  20.        (vlax-get-acad-object)
  21.      )
  22.      )
  23. )
  24. (or acsp
  25.      (setq acsp
  26.      (vla-get-block
  27.        (vla-get-activelayout adoc)
  28.      )
  29.      )
  30. )
  31. (setq wid 6.5515)
  32. (if (and (setq ss (ssget '((0 . "LWPOLYLINE,LINE")(8 . "0"))));;select objects on layer "0"
  33.       (setq en (entsel "\nSelect Intersecting Line > ")))
  34.    (progn
  35.      (setq axss (vla-get-activeselectionset adoc)
  36.     oline (vlax-ename->vla-object (car en))
  37.     )
  38.      (vlax-for obj axss
  39. (if (not (vl-catch-all-error-p
  40.            (setq ipt (vl-catch-all-apply
  41.              (function (lambda()
  42.                 (vlax-invoke obj 'IntersectWith oline acextendnone))))))
  43.          )
  44.   (if (= (length ipt) 3)
  45.   (setq points (append (list ipt) points))
  46.   (setq points (append (group-by-num ipt 3) points))  
  47.     )))
  48.      (setq points (vl-sort points (function (lambda(a b)(< (car a)(car b))))))
  49.      (setq cnt 1)
  50.      (while (setq ipt (car points))
  51.      (if (= (rem cnt 2) 1)
  52.        (setq ipt (list (- (car ipt) wid)(cadr ipt)(caddr ipt)))
  53.        )
  54.        (setq bpt (cons ipt bpt))
  55.              (setq points (cdr points))
  56.               (setq cnt (1+ cnt))
  57. )
  58. (while (setq ipt (car bpt))
  59.    (vlax-invoke acsp 'InsertBlock ipt "3ANSYMB" 1 1 1 0)
  60.    (setq bpt (cdr bpt))
  61.    )
  62.      )
  63.    )
  64. (princ)
  65. )
  66. (vl-load-com)

 
~'J'~
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:53:20 | 显示全部楼层
啊,对-我不太清楚为什么它在07或08上不起作用,但你说它插入第一个矩形好吗?
回复

使用道具 举报

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 15:55:42 | 显示全部楼层
它并没有给出错误信息,它只是认为它已经完成了。
 
我用2002在另一台机器上试过,它在那里工作。这两个版本之间一定有些不同。
 
谢谢你的帮助。。。在正确的版本中,这正是我想要的。
 
我也要试试看那部电影。这将是一个很棒的训练工具。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:59:44 | 显示全部楼层
我现在很困惑,因为我在LISP中没有使用任何ACAD命令,所以命令提示的顺序不会有什么不同。但我看不出还能是什么
 
菲索,有什么想法吗?
回复

使用道具 举报

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 16:04:11 | 显示全部楼层
修复。。。您的版本适用于2007年。谢谢
回复

使用道具 举报

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 16:08:09 | 显示全部楼层
李,
 
是的,你的程序完美地把它放在左边的第一个矩形上,然后程序就好像正常完成一样结束了。没有错误消息,毫不犹豫。。。它认为它完成了。你的在2002年的机器上工作正常。。。。版本中一定有一些不同。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:10:41 | 显示全部楼层
也许Fixo可以提供一些见解-无论如何,很高兴你的问题现在得到解决-我打赌这会节省你一些时间!
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 16:11:52 | 显示全部楼层
嗨,伙计
对不起,我无法向你解释
因为我的穷
英语
我只是一个程序员,什么都不是
 
~'J'~
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:16:52 | 显示全部楼层
 
没问题,顺便说一句,代码不错
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 19:17 , Processed in 0.662186 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表