assumbi3 发表于 2022-7-6 21:58:03

选择图纸上的圆并p

大家好,
 
我是VBA新手,我需要你的帮助为我的项目编写代码。在我的画里有很多不同直径和不同位置的圆。我需要他们把Excel表格。
 
现在我只是使用坐标lisp,手动将坐标和半径放到Excel中。
 
提前谢谢你,非常感谢你的帮助。

BIGAL 发表于 2022-7-6 22:07:28

第一步去VLISP你会得到更多的帮助VBA是官方不支持的,但仍然有效,下载GETEXCEL。lsp这有所有的代码示例,你需要从excel进出。使用dumpit并选择一个圆等,您将看到您可以简单获得的所有值。
 

;;; Dump all methods and properties for selected objects            ;
;;;===================================================================;
;;; DumpIt                                                            ;
;;;-------------------------------------------------------------------;
;;;===================================================================;
(defun C:DumpIt ( / ent)
(while (setq ent (entsel))
   (vlax-Dump-Object
   (vlax-Ename->Vla-Object (car ent)) T
   )
)
(princ)
)

一个例子

(setq obj (vlax-Ename->Vla-Object (car (entsel "pick circle"))))
(setq cenpt (vlax-safearray->list (vlax-variant-value (vla-get-center obj))))
(alert (strcat "Area= " (rtos (vla-get-area obj) 2 1)
"\nCentre point X=" (rtos (nth 0 cenpt) 2 2) " Y=" (rtos (nth 1 cenpt) 2 2) " Z=" (rtos (nth 2 cenpt))
"\nDiameter " (rtos (vla-get-diameter obj) 2 2)
))

assumbi3 发表于 2022-7-6 22:10:07

比加尔,
 
先生,谢谢您的快速回复。。。实际上我从来没有在LISP上写过代码,我只使用VBA,但我试着运行你给出的第一个代码,很好。。。但是第二个代码,我不知道怎么做,我试着在第一个代码之后放一个结果有错误。。。无论如何,我会尽我所能学习更多关于这个口齿不清。。。你能给我一些好的参考书的名字吗。
 
关于GETEXCEL。lsp你们说过,我会复制那个代码并学习,因为它和VBA代码完全不同。
 
谢谢

BIGAL 发表于 2022-7-6 22:17:26

将代码复制到记事本,并将其另存为say Circdetail。lsp然后保存并使用Appload加载它。DUMPIT也一样。lsp唯一的区别是它是一个defun,所以在appload之后,您需要键入dumpit来运行。我已经更改了帖子,所以圆圈细节也是一个defun,但你从圆圈程序的另一部分调用它。
 
(defun circdetail ( / obj n cenpt)
(setq ss (ssget "X" (list (cons 0 "Circle"))))
(setq n (sslength ss))
(setq x n)
(repeat n
(setq en1 (ssname ss (setq x (- x 1))))
(setq obj (vlax-Ename->Vla-Object en1))
(setq cenpt (vlax-safearray->list (vlax-variant-value (vla-get-center obj))))
; this where you would save all the answers so write to excel or return back to master program
   (alert (strcat "Area= " (rtos (vla-get-area obj) 2 1)
   "\nCentre point X=" (rtos (nth 0 cenpt) 2 2) " Y=" (rtos (nth 1 cenpt) 2 2) " Z=" (rtos (nth 2 cenpt))
   "\nDiameter " (rtos (vla-get-diameter obj) 2 2)
   ))
)
)
(circdetail); needed so it will run

assumbi3 发表于 2022-7-6 22:20:08

先生,这太棒了。谢谢你…我星期一会在办公室试试这个,然后回来找你。
 
非常感谢。。。

assumbi3 发表于 2022-7-6 22:23:50

先生,我试了一下你给的LISP,一开始它不起作用,因为这幅画是3D物体,但我设法通过分解、展平和过度杀死这幅画来解决它。以下所附链接为图纸样本(仅供参考)。
 
https://www.dropbox.com/s/4n4ecegjglioup5/SidePanel.dwg?dl=0
 
非常感谢您的大力支持。

BIGAL 发表于 2022-7-6 22:29:25

如果你在做圆的时候使用了一些x,y和rad的字段,也许可以看看你开始零件的方式。当你挤出圆的时候,这些字段可能在不同的层上,文本会保留下来。然后很容易找到这个文本,这是你所有圆细节的列表,你仍然有一个3d零件。

RICVBA 发表于 2022-7-6 22:33:27

@阿松比3
 
如果您不能成功使用lisp方式,我可以尝试帮助您使用VBA。在这种情况下,我需要更多的细节开始:
-一个现成的dwg文件示例-不要分解、展平等等
-excel文件示例

BIGAL 发表于 2022-7-6 22:41:16

RICVBA的问题是如何获得三维对象的属性,从简单的矩形拉伸开始,用1个圆孔减去需要、中心点和孔半径。实际上,问题不是VBA或lisp,而是可以使用哪些方法来计算实体的属性。帮助文件将为我使用的大多数vl提供等效VBA。希望有人知道如何分离3d物体。

RICVBA 发表于 2022-7-6 22:46:24

 
我同意
这就是为什么我只能从“现成的dwg文件”开始提供帮助
阿松比的第一篇帖子描述似乎可以保证这一点。
至少就我所知,管理3D对象是一项相当艰巨的工作。我认为必须允许你做出假设(只处理圆柱体,所有圆柱体都有适当的方向,…)为了开始思考一个有用的例程
 
我相信网络可以在这个问题上提供更多的控制,但我现在还不确定。
页: [1] 2
查看完整版本: 选择图纸上的圆并p