乐筑天下

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

[编程交流] 将中心对准tw

[复制链接]

1

主题

9

帖子

8

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:25:37 | 显示全部楼层 |阅读模式
大家好。
我目前正在使用AutoCAD2014。
我正在尝试使用AutoLISP编写程序。
 
我有一些孔三维实体。
我想得到圆孔的中心和矩形孔的(长宽)。输出数据必须在autoCAD的命令提示符下打印作为输出。
这一切只需单击对象即可完成。
我在这里也提供了我的物体的图像。
求求你,谁来帮帮我。
192539osjiv00lmsv7rf8d.jpg
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:30:57 | 显示全部楼层
也许将物体复制到某处爆炸两次,你可以找到圆,但矩形变为直线一点智能编码将揭示LxW使用三维实体的边界框进行限制,并复制已知数量,以便你可以计算出物体的中心点等。使用(ssget(assoc 0“圆,线”))
 
李·麦克发布了一个可能的解决方案http://www.cadtutor.net/forum/showthread.php?35506-如何获取区域坐标/第2页
回复

使用道具 举报

1

主题

9

帖子

8

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:32:57 | 显示全部楼层
谢谢你的帮助,但是,我不知道它不起作用的原因是什么。让我把这个问题简化一下。我最初将在这个组件的2D中工作。如果此2D组件被阻止为一个。
然后,如果我想要圆心和矩形(长宽),可以做什么?
 
请帮帮我。
192540b7k978uv0r0kjs8b.jpg
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:37:32 | 显示全部楼层
也许你可以试着按照Marko的建议转换成block
命令:flatshot
回复

使用道具 举报

1

主题

9

帖子

8

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:39:18 | 显示全部楼层
先生,关于这件事,你能给我一些程序提示吗。因为,我对这种编码是新手,这给进一步的工作带来了困难。请帮帮我,先生。。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:43:13 | 显示全部楼层
这个例子只是一个起点
从实体中获取圆坐标。
Alan先生(BIGAL)在2号岗位上提出的方法
 
更新v1.1
amili@post#15要求的额外出口csv
7/02/15
  1. (vl-load-com)
  2. (defun c:test (/ i e p1 p2 ss lst q var[color="red"] f fn dat dat1[/color])
  3. ;hanhphuc 2014
  4. (set 'var (getvar 'cmdecho ))
  5. (setvar 'cmdecho 0)
  6. (if (and (setq e (entsel "\nPlease select solid.. ")) (setq e (car e)) (= (cdr (assoc 0 (entget e))) "3DSOLID"))
  7.    (progn (vla-GetBoundingBox (setq obj (vlax-ename->vla-object e)) 'p1 'p2)
  8.    (mapcar ''((a b) (set a (vlax-safearray->list b))) '(p1 p2) (list p1 p2))
  9.    (command "_explode" e)
  10.    (setq i   0
  11.          ss  (ssget "C" p1 p2)
  12.          lst (mapcar '(lambda(x)
  13.                         (setq q nil)
  14.                         (if
  15.                          (= (cdr (assoc 0 (entget x))) "REGION")
  16.                          (setq q (cons (LM:reg x) q))
  17.                          (setq q (cons (vlax-ename->vla-object x) q))
  18.                          )
  19.                         (if
  20.                          (listp q)
  21.                          (LM:flatten q)
  22.                          q
  23.                          )
  24.                         )
  25.                      (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  26.                      ) ;_ end of mapcar
  27.          ) ;_ end of setq
  28.      
  29.    (foreach o (vl-remove-if-not ''((x) (= (vla-get-ObjectName x) "AcDbCircle")) (LM:flatten lst))
  30.      
  31.      (setq dat(cons (princ (strcat [color="red"]"\nCIRCLE_"[/color] (itoa (setq i (1+ i))) [color="red"]" "[/color]
  32.              (vl-princ-to-string
  33.                  (mapcar ''((x)(vlax-get o x)) '(Radius Center))
  34.                )))
  35.                      dat))
  36.       
  37.      ) ;_ end of foreach
  38.    (command "_.U")
  39. [color="red"](setq fn (strcat (getvar "dwgprefix") "hole dat.csv") f (open fn "w"))
  40. [color="blue"] ; If you don't want to override file ,to append use (open fn "a") as suggested by Marko @ post#14[/color]
  41. (foreach $
  42. (foreach x dat
  43. (setq        dat1 (cons (vl-string-translate
  44.              " "
  45.              ","
  46.              (vl-list->string
  47.                (vl-remove-if ''((a) (or (= a 10) (= a 40) (= a 41))) (vl-string->list x))
  48.                ) ;_ end of vl-list->string
  49.              ) ;_ end of vl-string-translate
  50.            dat1
  51.            ) ;_ end of cons
  52. ) ;_ end of setq
  53. ) ;_ end of foreach
  54. (write-line $ f))
  55. (write-line " " f)
  56. (if f (close f))
  57. (startapp "notepad" fn)[/color]     [color="blue"];<--remove this line if you don't want it to pop-up everytime[/color]
  58.    ) ;_ end of progn
  59.    ) ;_ end of if
  60. (setvar 'cmdecho var)
  61. (princ)
  62. ) ;_ end of defun

 
*可以使用x、y坐标(2D)过滤重叠圆
回复

使用道具 举报

1

主题

9

帖子

8

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:47:26 | 显示全部楼层
hanhphuc先生,它将错误显示为“错误:无函数定义:VLAX-ENAME->VLA-OBJECT”。还有一件事我想问你们,你们能给我一个完整的单程序吗,通过它我可以精确地确定两个圆的中心。?
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:49:41 | 显示全部楼层
将此添加到顶部
  1. ;;;http://www.cadtutor.net/forum/showthread.php?35506-How-to-get-Region-coordinates/page2
  2. ;;;adopted as sub-function
  3. (defun LM:reg (reg / RetObj)
  4. (setq Reg (vlax-ename->vla-object reg))
  5. (if (vlax-method-applicable-p reg 'explode)
  6. (progn
  7. (setq RetObj (vlax-safearray->list (vlax-variant-value (vla-explode Reg))))
  8. (repeat (length RetObj)
  9.    (if        (eq "AcDbRegion" (vla-get-ObjectName (car RetObj)))
  10.      (setq RetObj (append RetObj (vlax-safearray->list (vlax-variant-value (vla-explode (car RetObj))))))
  11.      (setq RetObj (append RetObj (list (car RetObj))))
  12.      ) ;_ end of if
  13.    (setq RetObj (cdr RetObj))
  14.    ) ;_ end of repeat
  15. )
  16.    )
  17. retobj
  18. ) ;_ end of defun
  19. ;; Flatten List  -  Lee Mac
  20. ;; Transforms a nested list into a non-nested list
  21. ;; http://www.lee-mac.com/flatten.html
  22. (defun LM:flatten ( l )
  23.    (if (atom l)
  24.        (list l)
  25.        (append (LM:flatten (car l)) (if (cdr l) (LM:flatten (cdr l))))
  26.    )
  27. )

由于其三维实体,每个位置将有2个圆(上下),z值不同
ie:2 x 2=4个圆形
回复

使用道具 举报

1

主题

9

帖子

8

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:53:06 | 显示全部楼层
非常感谢你的帮助。它实际上起作用了。先生,有可能也得到这些圆的半径吗。?
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:55:27 | 显示全部楼层
很高兴能提供帮助,这归功于比格尔的想法以及李·麦克的子功能。
 
是的,可以添加半径
第#6页更新
 
输出示例,半径为红色:
  1. [color="red"](vl-load-com)[/color][color="gray"]
  2. (defun c:test (/ i e p1 p2 ss lst q)
  3. ...
  4. ...
  5. ...[/color]
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:54 , Processed in 0.837586 second(s), 75 queries .

© 2020-2025 乐筑天下

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