乐筑天下

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

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

[复制链接]

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 15:14:32 | 显示全部楼层 |阅读模式
嘿,伙计们。
 
你们有没有一个lisp或vba可以执行以下操作:
 
请容忍我,这需要一些描述。想象一下,如果你想要一个2.5英寸宽、50英寸高的矩形。现在想象一下,在同一水平平原上有10个这样的物体,但间隔不规则(如栅栏柱)。现在想象一个小菱形符号(菱形,对于喜欢技术术语的人来说),高4英寸,宽2英寸。我需要做的是复制这些小符号并将其放置在矩形旁边。我想象这个lisp或vba所做的就是这样。我已经把矩形放好了。一旦我确定需要这些符号离矩形底部有多远,我就在所有这些符号上画一条简单的线。然后我启动这个小程序,选择符号,然后选择线,它将钻石放在矩形的外侧,钻石的角接触到线和矩形的交点。换句话说,如果你看附件,我会从第一组开始,到第二组结束。如果它也能抹去这条线,那就太好了,但不是必要的。
 
垂直矩形的位置将在水平方向上发生变化,菱形的垂直位置也会发生变化。
 
有人能做这件事吗?
 
谢谢大家。
161438llsnb4y4w4n4o4y0.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:18:29 | 显示全部楼层
菱形/矩形是块还是多段线?
 
如果您可以发布我们必须处理的对象的样例图形(2000格式),可能会更容易
回复

使用道具 举报

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 15:23:27 | 显示全部楼层
菱形是块,矩形是闭合多段线。嗯,大多数时候。有时它们可能是单独的线,但它们应该是闭合的多段线。我们还有其他一些软件可以为我们的数控锯提取这些东西的长度,它只在“0”层上寻找闭合的多段线(我知道,但我没有写)。菱形是钻机操作员的指示器。他的软件提取出这个东西的位置,然后钻孔机根据这个小方块的位置放入各种各样的孔或槽。当矩形均匀分布时,我只排列块,但当它们不规则分布时,这有点困难。
 
已包含示例对象。
 
谢谢
图纸1.dwg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:24:41 | 显示全部楼层
试驾一下:
 
  1. ; Diamond ~ by Lee McDonnel [25.01.2009]
  2. ; Places a Diamond Block at the Intersection of a LWPolyline
  3. ; [Assumes Diamond Block Definition is in Drawing]
  4. (defun c:diamond (/ ss lEnt eLst sLin eLin pvert i int intLst)
  5. (vl-load-com)
  6. (if (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
  7.       (setq lEnt (car (entsel "\nSelect Intersecting Line > ")))
  8.       (eq (cdr (assoc 0 (entget lEnt))) "LINE"))
  9.    (progn
  10.      (setq eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  11.        sLin (cdr (assoc 10 (entget lEnt)))
  12.        eLin (cdr (assoc 11 (entget lEnt))))
  13.      (foreach ent eLst
  14.    (setq pVert (mapcar 'cdr (vl-remove-if '(lambda (x) (/= 10 (car x))) (entget ent))))
  15.    (if (eq (setq i (length pVert)) 4)
  16.      (progn
  17.        (while (not (zerop (setq i (1- i))))
  18.          (if (setq int (inters sLin eLin (nth i pVert) (nth (1- i) pVert)))
  19.        (setq intLst (cons int intLst))))
  20.        (setq intLst (vl-sort intLst '(lambda (x1 x2) (< (car x1) (car x2)))))
  21.        (SetBlkTF "3ANSYMB")
  22.        (entmake (list (cons 0 "INSERT") (cons 2 "3ANSYMB") (cons 10 (cadr intLst))))
  23.        (entmake (list (cons 0 "INSERT") (cons 2 "3ANSYMB") (cons 10 (cons (- (caar intLst) 6.5515) (cdar intLst)))))))))
  24.    (princ "\n<!> No Line Selected, or this isn't a Line! <!>"))
  25. (princ))
  26. (defun SetBlkTF    (n)
  27.    (cond ((not (snvalid n))
  28.       (princ "\nInvalid Block Name - " n)
  29.       (exit))
  30.      ((tblsearch "BLOCK" n))
  31.      ((findfile (strcat n ".DWG"))
  32.       (command "_.INSERT" n)
  33.       (command))
  34.      (T ; If all else fails....
  35.       (entmake (list (cons 0 "BLOCK") (cons 2 n) (cons 10 (list 0 0 0)) (cons 70 0)))
  36.       (entmake (list (cons 0 "TEXT")
  37.              (cons 1 (strcat "BLOCK PLACECARD - " n))
  38.              (cons 7 (cdr (assoc 2 (tblnext "STYLE" T))))
  39.              (cons 8 "0")
  40.              (cons 10 (list 0 0 0))
  41.              (cons 11 (list 0 0 0))
  42.              (cons 40 (max 1 (getvar "TEXTSIZE")))
  43.              (cons 72 4)))
  44.       (entmake (list (cons 0 "ENDBLK") (cons 8 "0")))))n)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:30:06 | 显示全部楼层
以上内容应按照您发布的示例图形进行操作。
 
但是,由于钻石的基点在一侧,钻石的放置必须根据钻石的宽度(6.5515)进行调整,因此,上述代码不适用于所有通用“钻石”形状。
回复

使用道具 举报

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 15:31:09 | 显示全部楼层
李,这太令人印象深刻了!非常感谢你!
 
不过我有一个问题。可能是我做得不对。出于测试目的,我在绘图中放置了4个垂直矩形,并在它们之间画了一条线。加载代码并启动它。以下是命令行历史记录:
 
命令:菱形
 
选择对象:指定对角点:4
 
选择对象:
 
选择相交线>
命令:
 
但它只把钻石放在左边的第一个。他们在正确的地方,但它并没有做到这四点。我选错了吗?我用了一个十字路口。
 
再次感谢你的帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:35:14 | 显示全部楼层
嗯。。。不确定。。。
 
请参阅视频:
金刚石拉链
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:37:29 | 显示全部楼层
删除该行的更新版本:
 
  1. ; Diamond ~ by Lee McDonnel [25.01.2009]
  2. ; Places a Diamond Block at the Intersection of a LWPolyline
  3. ; [Assumes Diamond Block Definition is in Drawing]
  4. ; [updated to remove intersecting line]
  5. (defun c:diamond (/ ss lEnt eLst sLin eLin pvert i int intLst)
  6. (vl-load-com)
  7. (if (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
  8.       (setq lEnt (car (entsel "\nSelect Intersecting Line > ")))
  9.       (eq (cdr (assoc 0 (entget lEnt))) "LINE"))
  10.    (progn
  11.      (setq eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  12.        sLin (cdr (assoc 10 (entget lEnt)))
  13.        eLin (cdr (assoc 11 (entget lEnt))))
  14.      (foreach ent eLst
  15.    (setq pVert (mapcar 'cdr (vl-remove-if '(lambda (x) (/= 10 (car x))) (entget ent))))
  16.    (if (eq (setq i (length pVert)) 4)
  17.      (progn
  18.        (while (not (zerop (setq i (1- i))))
  19.          (if (setq int (inters sLin eLin (nth i pVert) (nth (1- i) pVert)))
  20.        (setq intLst (cons int intLst))))
  21.        (setq intLst (vl-sort intLst '(lambda (x1 x2) (< (car x1) (car x2)))))
  22.        (SetBlkTF "3ANSYMB")
  23.        (entmake (list (cons 0 "INSERT") (cons 2 "3ANSYMB") (cons 10 (cadr intLst))))
  24.        (entmake (list (cons 0 "INSERT") (cons 2 "3ANSYMB") (cons 10 (cons (- (caar intLst) 6.5515) (cdar intLst))))))))
  25.      (entdel lEnt))
  26.    (princ "\n<!> No Line Selected, or this isn't a Line! <!>"))
  27. (princ))
  28. (defun SetBlkTF    (n)
  29.    (cond ((not (snvalid n))
  30.       (princ "\nInvalid Block Name - " n)
  31.       (exit))
  32.      ((tblsearch "BLOCK" n))
  33.      ((findfile (strcat n ".DWG"))
  34.       (command "_.INSERT" n)
  35.       (command))
  36.      (T ; If all else fails....
  37.       (entmake (list (cons 0 "BLOCK") (cons 2 n) (cons 10 (list 0 0 0)) (cons 70 0)))
  38.       (entmake (list (cons 0 "TEXT")
  39.              (cons 1 (strcat "BLOCK PLACECARD - " n))
  40.              (cons 7 (cdr (assoc 2 (tblnext "STYLE" T))))
  41.              (cons 8 "0")
  42.              (cons 10 (list 0 0 0))
  43.              (cons 11 (list 0 0 0))
  44.              (cons 40 (max 1 (getvar "TEXTSIZE")))
  45.              (cons 72 4)))
  46.       (entmake (list (cons 0 "ENDBLK") (cons 8 "0")))))n)
回复

使用道具 举报

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 15:42:29 | 显示全部楼层
那部小电影很酷。。。你是怎么做到的?
 
不管怎样,我知道其中可能有什么。。。你用的是2004年,我用的是2007年和2008年。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:44:07 | 显示全部楼层
版本之间不应该有太大的差异-是否发生了错误?
 
至于视频:
 
http://www.microsoft.com/windows/windowsmedia/forpros/encoder/default.mspx
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 18:03 , Processed in 0.505584 second(s), 75 queries .

© 2020-2025 乐筑天下

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