broncos15 发表于 2022-7-6 21:54:05

管网检查

我以前从未输入过代码。net之前,但我认为我可能需要冒险进入它的东西,我试图实现。我希望能够有一个命令来检查管网,如果在不相等的地方,反转为空结构(我可能还会添加另一个结构),则将它们放在另一层。我尝试使用LISP实现这一点的原因是,我无法从vlax转储中找到任何提供此信息的信息,因此我认为这是不可能的。要做到这一点,最好的语言是什么?VBA。网络,还是其他什么?还有,什么是一个好的起点?

BlackBox 发表于 2022-7-6 22:03:55

.网络开发不是一个人通常可以学会的东西,如果没有大量的时间来编码,做大量的阅读,更多的编码,当你陷入困境时访问论坛(你会),当然还有更多的编码。。。除非你已经精通另一门高级语言。
 
是什么减缓了最新AutoCAD的速度。NET开发人员认为,您已经知道的关于LISP/VBA的知识在某种程度上是适用的,而它在很大程度上是不适用的(除了常识逻辑,它应该适用于任何API)。。。有。NET开发,然后是AutoCAD。NET开发,Civil 3D在此平台上拥有自己的后续竞技场。。。如果你想为自己节省一些时间,首先要学会。NET开发,然后在学习了基础知识后再回来。
 
一旦你建立了基础,回来就像学习一个对象模型及其固有的对象、属性、方法和事件一样简单(例如,学习第二种浪漫语言的词汇)。
 
 
 
这里有一个旧的线索,可以帮助你开始。净值一般:
 
http://www.cadtutor.net/forum/showthread.php?69646-从哪里开始-。网
 
 
... 当您准备好更具体地使用Civil 3D时,请访问我的朋友Jeff的网站,在那里您可以找到一些示例源代码来学习:
 
http://www.quuxsoft.com/
 
 
说到SincPac,您在上面的原始请求,听起来很像SincPac的PIPEELEVATIONEDITOR命令。
 
 
 
 
免责声明:我和Quux在NDA下工作,所以我完全有偏见。
 
 
 
干杯

broncos15 发表于 2022-7-6 22:06:03

感谢BlackBox提供的提示和建议!我知道我需要开始学习。NET,因为我主要为Civil 3D编写代码。其他线程中的那些资源非常有用,感谢您的发布!我以前在Excel中做过VBA编程,所以我希望至少有一些逻辑/语法与vb类似。网

broncos15 发表于 2022-7-6 22:12:04

Blackbox,我很好奇您是否知道是否有方法通过LISP访问连接管道的反转高程。我知道AutoCAD有一些隐藏的函数和属性不是从vlax转储中显示的,但我不确定这是否是其中之一(还有,你知道这些隐藏函数的好来源吗?)

Hippe013 发表于 2022-7-6 22:16:45

我意识到这个帖子有点过时了,也许你已经找到了答案。
 
要获得管道的起点和终点,需要使用以下工具:
 
让“obj”成为管道对象。

(setq startpoint (vlax-safearray->list (vlax-variant-value (vlax-get-property obj 'PointAtParam 0)))) 'CenterPoint of Start of Pipe
(setq endpoint (vlax-safearray->list (vlax-variant-value (vlax-get-property obj 'PointAtParam 1)))) 'CenterPoint of End of Pipe

broncos15 发表于 2022-7-6 22:19:47

希普,非常感谢你的帮助。这是一个代码,我一直在敲我的头有一段时间。到目前为止,我遇到的问题是1)在我有了起点和终点之后,我不知道该做什么。我该如何测试哪一个是结构中的一个?2) 理想情况下,我希望进一步扩展此代码,以便提示用户选择结构类型并输入所需的下拉列表。然后,代码将测试所有人孔,例如,看看它们是否有0.2英尺的落差。这似乎会让代码变得更复杂,我最终感觉迷失在重复循环中了,哈哈;;;Finding the startpoint and endpoint of the pipes was written by Hippe013
(defun c:invertdroptester (/ ss cnt obj pipename)
(if (setq ss (ssget "_X" '((0 . "AECC_STRUCTURE"))))
   (progn
   (setq cnt 0)
   (repeat (sslength ss)
       (setq structureobj (vlax-ename->vla-object (ssname ss cnt)))
       (if (and (> (vlax-get-property structureobj 'connectedpipescount) 0)
                (= (vla-get-description structureobj) "Null Structure")
         (progn
         (setq pipename (vlax-get-property structureobj 'connectedpipenames))
         (setq ss1 (ssget "_X" '((0 . "AECC_STRUCTURE")))
               cnt1 0)
         (repeat (sslength ss1)
             (setq pipeobj (vlax-ename->vla-object (ssname ss1 cnt1)))
             (if (= (vlax-get-property pipeobj 'displayname) pipename)
               (progn
               ;;;Starting of code written by Hippe013
               (setq startpoint (vlax-safearray->list (vlax-variant-value (vlax-get-property pipeobj 'PointAtParam 0)))) ;CenterPoint of Start of Pipe
               (setq endpoint (vlax-safearray->list (vlax-variant-value (vlax-get-property pipeobj 'PointAtParam 1)))) ;CenterPoint of End of Pipe

Hippe013 发表于 2022-7-6 22:26:46

Bronco15,
 
这很有趣,因为我已经写了一段代码来实现您的要求。不过要回答你的问题:
 
1) 一旦你有了起点和终点,你可以测试看哪个点更接近结构的中心。我只会用XY来做这个。
 
2) 这可能有点复杂,因为你需要知道哪一个保持不变,哪一个得到调整。假设该结构只有两个连接管道(输入和输出)。您是握住最低的内底并在另一个上调整另一个0.2,还是握住进水管并向下调整另一个0.2。
 
我有一些子程序,我愿意与大家分享。请注意,它们是在LISP中,而不是在vb中。网
 
如果你感兴趣,请告诉我。
 
当做
 

broncos15 发表于 2022-7-6 22:29:44

本,非常感谢你愿意帮忙。如果你能分享你的代码,我将不胜感激。由于信息是如何给出的,我很难找到像结构插入点这样的基本信息。因此,该代码的目标至少是不实际更改任何管道的内底,而只是检查所有内底是否满足所需的落差。

Hippe013 发表于 2022-7-6 22:36:28

你所做的看起来相当合理。我将在周末编写一个测试代码。

broncos15 发表于 2022-7-6 22:42:54

哇,谢谢!我希望有一些管网的示例代码,特别是作为未来代码的良好起点。
页: [1] 2
查看完整版本: 管网检查