挑战:将高程转换为等高线
嘿,沼泽者,我之前发布了关于根据等高线为块分配高程的帖子。有一些好主意,但不幸的是,我太忙了,无法写这个东西。所以我想我会把它贴在这里,并开源结果。我得到我想要的代码,有人得到报酬,未来的程序员可以使用结果。对每个人来说,胜利,更不用说这可能是相当有趣的。事后我决定包含LISP代码,因此,如果需要将这篇文章移动到不同的地方,管理员可以这样做。
问题:
第一个问题是确定哪些对象用于高程模型,以及在哪里使用。如果可能的话,我想避免用户在此处进行交互,但可能是需要提示用户输入某些高程图层或其他内容。如果解决方案需要用户交互,则解决方案必须包含执行此操作的接口。
第二个问题是从高程模型中插值高程值并将这些值分配给块。如果点落在建议坡度的范围内,则应从建议的坡度分配高程。如果没有,则应从现有成绩中分配它们。
挑战图形文件在这里。
代码:
代码必须是 .NET C# 或 LISP。试着好好评论它。不要发布编译好的代码,我不会运行它(其他人也不应该)。在文件顶部的注释中包含您的用户名。所有发布的代码都将属于公共领域。每个用户一个条目。
.NET:发布一个完整的sln文件,我可以在VS2019中打开并编译,我将编译好的dll netload到vanilla AutoCAD 2021中。
LISP:发布未编译的 LISP 文件。
抽奖和挑战
符合条件。DWG:创建命令“RACE”。它将提示用户为现有轮廓和建议的轮廓选择图层/或对象。使用这些等值线,计算并设置 Qualifer.dwg中试块的高程。所有块的仰角都应该在我在那里显示的.25'以内(毕竟,我的数学可能是错误的)请注意,外部参照中的基本文件是扭曲的,而不是0,0等。有时CAD猴子会做一些奇怪的事情,我们必须适应这一点。
比赛。DWG:如果你的代码符合条件,我会在我的机器上对这个绘图运行3次,并平均时间。我将使用 AutoCAD 2021 进行测试。此图形中有一个包含所有轮廓的外部参照。产生与其他参赛作品不一致(在.25'以内)的提升的代码将没有资格获得奖品。在项目中包括计时器。从用户完成图层选择时开始计时器。命令完成后,将经过的时间打印到命令行。
截止日期:2021年10月22日下午5点。MST。
奖品:
以PayPal支付,加密,但是我可以把它给你。
最快的.NET解决方案:$ 400
最快的LISP解决方案$ 400
第二快(要么):$ 100
捐赠给沼泽:$ 200
如果需要问题/澄清,我会尽我所能在截止日期之前清除它们。我应该在下周有结果。
祝你好运!
**** Hidden Message ***** 非常感谢您考虑向TheSwamp捐款!任何捐款,尤其是这种规模的捐款,都会帮助我保持这个地方的开放和运行。
祝大家好运。 我认为您的方法是错误的,是的,您可以使用Z高程的plines/lines来创建TIN表面。一旦有了TIN,就有了一个三角形的3d面网络。因此,可以正确计算三维面上任何一点的z值,这不是火箭科学,而是免费赠送的。
在YMG的Cadtutor三角测量中,TriangV0.5.9.LSP可能会有所帮助。
CIV3D已经为内置点计算出Z,包括使用线。
现在,3dface代码的要点在哪里?https://forums . Autodesk . com/t5/visual-lisp-AutoLISP-and-general/choose-point-on-3d face/TD-p/1601829
我赢了吗?或者我刚刚救了你$$$$将尝试找到时间在3dface上按链接编码pt。
好的,如果您查看帮助并查看CAL函数,您会发现这一个ilp(p1,p2,p3,p4,p5 ),因此p1是平面Z中的xyz可以是0,p2是相同的xy,但是是3d面上方的虚拟Z,p3,p4,p5是3d面的3个点。
另一种方法是使用UCS 3点和trans函数计算z。
在我的老式电脑上,花了半个小时才完成比赛。dwg
我认为LISP不是一个好选择(即使在速度更快的PC上)
我不确定这样的数据集需要处理什么。我期待着找到答案
就LISP和.NET而言,我真的不知道。我知道RJP的LISP代码始终围绕我的.NET代码运行
是的,我几乎可以肯定我的方法可以改进。这就是挑战的原因。
澄清一下:我知道我已经超出了我的能力范围,如果您看到比我建议的更好的从图纸中提取数据的方法,请编写代码并展示给我们大家。如果有一些更有效的特殊方法可以在普通CAD中使用,那就是我正在努力寻找的。也许是锡表面,也许是巴克明斯特变换点乘以一个独角兽矩阵,我真的不知道。我希望大多数/所有的条目会比我做的更有效率。见鬼,我甚至不确定我的数学是否正确,这就是为什么我在海拔答案上给了0.25的模糊系数。
我很期待了解社区中的巫师是如何做到这一点的。 提供的DWG看起来像是来自CIV3D或类似产品,因此获得一个TIN也会让生活变得更轻松。除非转换为三角网,否则仅使用等高线并不是一个好主意,尽管不如原始三角网好
这是CIV3D帮助中的一个页面https://knowledge.autodesk.com/support/civil-3d/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/Civil3D-UserGuide/files/GUID-FDBDB4BD-86C1-4A01-9EC3-FEAEF7DF0A97-htm.html
好的,(命令“cal”和“ilp(p1,p2,p3,p4,p5)”将返回3dface,p3,p3,p5与线p1,p2相交的点XYZ,p1将表示z=0,p2 z=10000。
因此我将取一个点,使用一个范围在其周围进行ssget 3Dfaces,dwg可能有10000个三角形,因此可能仅获得20个3DFacess,并在没有代码的情况下进行ilp。如果不查看所有的3dfaces,速度会非常快。
一些测试代码,但在我继续之前需要您的dwg和3DFacess。
(defun c:test ( )
(while (setq p1 (getpoint "\npick point"))
(setq p2 (mapcar '+ p1 (list 0.0 0.0 10000.0)))
(setq 3d (entget (car (entsel "\npick 3dface"))))
(setq p3 (cdr (assoc 10 3d)))
(setq p4 (cdr (assoc 11 3d)))
(setq p5 (cdr (assoc 12 3d)))
(setqzpt(cal "ilp(p1,p2,p3,p4,p5)"))
(if (= zpt nil)
(princ "\nPoint not on 3dface")
(alert (strcat "\nPoint is X= " (rtos (car zpt) 2 3)" Y= "(rtos (cadr zpt) 2 3) " Z= " (rtos (caddr zpt) 2 3)))
)
(setq zpt nil)
)
(princ)
)
(c:test)
我希望在普通AutoCAD/BricsCAD的应用程序中使用此代码。我没有Civil3D,但我们总是从客户那里得到这样的图纸。该应用程序需要在没有Civil3D的情况下工作。 该死!没有接受者
我如何组织此活动以吸引更多的人?欢迎提出建议。 嗯,就我个人而言,我不理解查伦斯。您需要一个函数,该函数需要两组轮廓线,但您需要该函数同时在一组轮廓线上运行
还有读取外部参照和ucs内容的资格,您实际上想要什么?这是一个完整的应用程序,只具有该功能还是处理流程的代码?在后一种情况下,最好将重点放在如何处理特征线、带曲线的轮廓、交叉轮廓、给定或计算的边界等问题上。
我确实有一些代码可用于创建一系列点的三角剖分,并且像Bigal也建议的那样,计算三角形内点的位置并不困难。但我不想花太多时间编写所有其他代码,但这是我个人的感受。
页:
[1]
2