乐筑天下

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

[编程交流] VB。net getclosestpoint问题

[复制链接]

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 14:44:55 | 显示全部楼层 |阅读模式
im使用以下代码沿给定向量获取曲线上的最近点
 
  1. [size=2]
  2. EndPt1 = Curve1.GetClosestPointTo(StartPt1, vector1perp, [/size][size=2][color=#0000ff]False[/color][/size][size=2])
  3. [/size]

 
但是,如果该向量与曲线有多个相交,则无法获得曲线上的最近点。代码似乎只是沿着向量扩展,直到到达curve1和vector1Perp的最后一个交点
 
我认为这个代码中的“False”是为了阻止扩展。
 
我如何解决这个问题?
我快疯了
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 14:53:49 | 显示全部楼层
你正在使用
曲线GetClosestPointTo方法(Point3d,Vector3d,[MarshalAs(UnmanagedType.U1)]bool)?
 
如果是这样,则该向量用于创建投影“曲线”的平面。然后对投影的几何体进行处理,以找到其接近“Point3d”的点。
 
 
我认为找到数据库驻留曲线(DBCurve)和非驻留有界向量之间最近点的最佳选择是:
 
1.创建Autodesk。AutoCAD。几何学基于DBCurve的Curve3d*
 
2.创建Autodesk。AutoCAD。几何学LineSegment3d使用所需的向量属性。
 
3.然后使用Curve3d。GetClosestPointTo方法(Curve3d),其中LineSegment3d作为传入参数。返回的数组PointOnCurve3d[]将包含一个或多个对象,可以根据原始DBCurve查询这些对象的点位置。
 
*我在这个线程的Post#22上发布了DBCurve到Geometry Curve类的开始(有一些曲线类型尚未实现)。
 
http://www.cadtutor.net/forum/showthread.php?t=33523
 
它似乎工作得很好,但仍需要大量测试。
回复

使用道具 举报

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 15:00:38 | 显示全部楼层
谢谢你的快速回复肖特-我一直在努力做你告诉我的事情,但我一直无法使它工作。
 
这是我写的测试代码,你能看一下并给我一些提示吗。
 
这将是非常感谢-因为正如你们所知,我只是最近新的vb。net,我试图利用有限的可用资源进行学习。
 
 
 
  1. [size=2][color=#008000]
  2. [size=2][color=#008000]'[/color][/size]
  3. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Option[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Explicit[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]On[/color][/size]
  4. [/color][/size][size=2][color=#008000][size=2][color=#008000]'Microsoft Namespaces[/color][/size]
  5. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] System.Runtime.InteropServices[/size]
  6. [size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] System.Runtime.InteropServices.Marshal[/size]
  7. [size=2][color=#008000][size=2][color=#008000]'AutoCad Namespaces - pure NET based[/color][/size]
  8. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] AcadNet = Autodesk.AutoCAD[/size]
  9. [size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] AcadNetRuntime = Autodesk.AutoCAD.Runtime[/size]
  10. [size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] AcadNetAppServices = Autodesk.AutoCAD.ApplicationServices[/size]
  11. [size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] AcadNetDbServices = Autodesk.AutoCAD.DatabaseServices[/size]
  12. [size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] AcadNetDBTransman = Autodesk.AutoCAD.DatabaseServices.TransactionManager[/size]
  13. [size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] AcadNetGeometry = Autodesk.AutoCAD.Geometry[/size]
  14. [size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] AcadNetEditorInput = Autodesk.AutoCAD.EditorInput[/size]
  15. [size=2][color=#008000][size=2][color=#008000]'Civil 3D (related) Namespaces - COM based[/color][/size]
  16. [size=2][color=#008000]'Imports AcadCom = Autodesk.AutoCAD.interop[/color][/size]
  17. [size=2][color=#008000]'Imports AcadComCommon = autodesk.AutoCAD.interop.common[/color][/size]
  18. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] Civil3DCom = Autodesk.AECC.Interop.Land[/size]
  19. [size=2][color=#0000ff][size=2][color=#0000ff]Imports[/color][/size][/color][/size][size=2] Civil3DComUI = Autodesk.AECC.Interop.UiLand[/size]
  20. [size=2][color=#0000ff][size=2][color=#0000ff]Public[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Class[/color][/size][/color][/size][size=2] NewClass[/size]
  21. [size=2]<acadnetruntime.CommandMethodAttribute([/size][size=2][color=#a31515][size=2][color=#a31515]"test"[/color][/size][/color][/size][size=2])> _[/size]
  22. [size=2][color=#0000ff][size=2][color=#0000ff]Public[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size][/color][/size][size=2] test()[/size]
  23. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] DB [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.Database = AcadNetDbServices.HostApplicationServices.WorkingDatabase[/size]
  24. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] ED [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetEditorInput.Editor = AcadNetAppServices.Application.DocumentManager.MdiActiveDocument.Editor[/size]
  25. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] ActiveDoc [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetAppServices.Document = AcadNetAppServices.Application.DocumentManager.MdiActiveDocument[/size]
  26. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] Trans2 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.Transaction = DB.TransactionManager.StartTransaction()[/size]
  27. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] TopCurve [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.Curve[/size]
  28. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] BottomCurve [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.Curve[/size]
  29. [size=2][color=#0000ff][size=2][color=#0000ff]Try[/color][/size]
  30. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] PDO [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptDoubleOptions = [/size][size=2][color=#0000ff][size=2][color=#0000ff]New[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptDoubleOptions(vbCr & [/size][size=2][color=#a31515][size=2][color=#a31515]"Specify distance between lines: "[/color][/size][/color][/size][size=2])[/size]
  31. [size=2]PDO.AllowNegative = [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size]
  32. [/color][/size][size=2]PDO.AllowZero = [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size]
  33. [/color][/size][size=2]PDO.AllowArbitraryInput = [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size]
  34. [/color][/size][size=2]PDO.AllowNone = [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size]
  35. [/color][/size][size=2]PDO.DefaultValue = 5[/size]
  36. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] PDR [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptDoubleResult = ED.GetDouble(PDO)[/size]
  37. [size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] PDR.Status <> AcadNetEditorInput.PromptStatus.OK [/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Exit[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size]
  38. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] PEO1 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptEntityOptions = [/size][size=2][color=#0000ff][size=2][color=#0000ff]New[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptEntityOptions(vbCr & [/size][size=2][color=#a31515][size=2][color=#a31515]"Select top Curve: "[/color][/size][/color][/size][size=2])[/size]
  39. [size=2]PEO1.SetRejectMessage([/size][size=2][color=#a31515][size=2][color=#a31515]" Invalid entity! Select LWPoly, 2DPoly, 3DPoly, Line, Arc, Circle or Spline only!"[/color][/size][/color][/size][size=2])[/size]
  40. [size=2]PEO1.AddAllowedClass([/size][size=2][color=#0000ff][size=2][color=#0000ff]GetType[/color][/size][/color][/size][size=2](AcadNetDbServices.Curve), [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size][/color][/size][size=2])[/size]
  41. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] PER1 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptEntityResult = ED.GetEntity(PEO1)[/size]
  42. [size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] PER1.Status <> AcadNetEditorInput.PromptStatus.OK [/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Exit[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size]
  43. [/color][/size][size=2]TopCurve = Trans2.GetObject(PER1.ObjectId, AcadNetDbServices.OpenMode.ForRead)[/size]
  44. [size=2][/size]

 
 
 
正如您将看到的那样,如果您测试代码,直线不会得到曲线上最近的交点。你能告诉我你在编码方面的意思吗??
 
非常感谢你
回复

使用道具 举报

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 15:05:30 | 显示全部楼层
上面代码的第二部分
 
  1. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] PEO2 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptEntityOptions = [/size][size=2][color=#0000ff][size=2][color=#0000ff]New[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptEntityOptions(vbCr & [/size][size=2][color=#a31515][size=2][color=#a31515]"Select bottom Curve: "[/color][/size][/color][/size][size=2])[/size]
  2. [size=2]PEO2.SetRejectMessage([/size][size=2][color=#a31515][size=2][color=#a31515]" Invalid entity! Select LWPoly, 2DPoly, 3DPoly, Line, Arc, Circle or Spline only!"[/color][/size][/color][/size][size=2])[/size]
  3. [size=2]PEO2.AddAllowedClass([/size][size=2][color=#0000ff][size=2][color=#0000ff]GetType[/color][/size][/color][/size][size=2](AcadNetDbServices.Curve), [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size][/color][/size][size=2])[/size]
  4. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] PER2 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetEditorInput.PromptEntityResult = ED.GetEntity(PEO2)[/size]
  5. [size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] PER2.Status <> AcadNetEditorInput.PromptStatus.OK [/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Exit[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size]
  6. [/color][/size][size=2]BottomCurve = Trans2.GetObject(PER2.ObjectId, AcadNetDbServices.OpenMode.ForRead)[/size]
  7. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] TopCurveLen [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Double[/color][/size][/color][/size][size=2] = TopCurve.GetDistanceAtParameter(TopCurve.EndParam)[/size]
  8. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] DistBetween [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Double[/color][/size][/color][/size][size=2] = PDR.Value[/size]
  9. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] Divstep [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Double[/color][/size][/color][/size][size=2] = PDR.Value[/size]
  10. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] StepLength1 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Double[/color][/size][/color][/size][size=2] = 0[/size]
  11. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] Toolong1 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Boolean[/color][/size][/color][/size][size=2] = [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size]
  12. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]While[/color][/size][/color][/size][size=2] Toolong1 = [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size]
  13. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] Trans3 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.Transaction = DB.TransactionManager.StartTransaction()[/size]
  14. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] AcadBT [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.BlockTable[/size]
  15. [size=2]AcadBT = Trans3.GetObject(DB.BlockTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead)[/size]
  16. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] BTRSpace [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.BlockTableRecord = Trans3.GetObject(DB.CurrentSpaceId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite)[/size]
  17. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] AcadBTR [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.BlockTableRecord[/size]
  18. [size=2][color=#008000][size=2][color=#008000]''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''[/color][/size]
  19. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] StepLength1 <= TopCurveLen [/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size]
  20. [/color][/size][size=2][color=#008000][size=2][color=#008000]''''''''''''''''''''''''''''''''''''''''''''''''''''''''''[/color][/size]
  21. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] StartPt1 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetGeometry.Point3d = TopCurve.GetPointAtDist(StepLength1)[/size]
  22. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] Vector1 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetGeometry.Vector3d = TopCurve.GetFirstDerivative(StartPt1)[/size]
  23. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] Vector1Perp [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetGeometry.Vector3d = Vector1.GetPerpendicularVector()[/size]
  24. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] Vector1PerpNeg [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetGeometry.Vector3d = Vector1Perp.Negate()[/size]
  25. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] EndPt1 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetGeometry.Point3d = BottomCurve.GetClosestPointTo(StartPt1, Vector1Perp, [/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size][/color][/size][size=2])[/size]
  26. [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] Line1 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AcadNetDbServices.Line = [/size][size=2][color=#0000ff][size=2][color=#0000ff]New[/color][/size][/color][/size][size=2] AcadNetDbServices.Line()[/size]
  27. [size=2]Line1.StartPoint = StartPt1[/size]
  28. [size=2]Line1.EndPoint = EndPt1[/size]
  29. [size=2]BTRSpace.AppendEntity(Line1)[/size]
  30. [size=2]Trans3.AddNewlyCreatedDBObject(Line1, [/size][size=2][color=#0000ff][size=2][color=#0000ff]True[/color][/size][/color][/size][size=2])[/size]
  31. [size=2]StepLength1 = StepLength1 + Divstep[/size]
  32. [size=2]Line1.Dispose()[/size]
  33. [size=2][color=#0000ff][size=2][color=#0000ff]Else[/color][/size]
  34. [/color][/size][size=2]Toolong1 = [/size][size=2][color=#0000ff][size=2][color=#0000ff]True[/color][/size]
  35. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size]
  36. [/color][/size][size=2]Trans3.Commit()[/size]
  37. [size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]While[/color][/size]
  38. [/color][/size][size=2]Trans2.Commit()[/size]
  39. [size=2][color=#0000ff][size=2][color=#0000ff]Catch[/color][/size][/color][/size][size=2] ex [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] Autodesk.AutoCAD.Runtime.Exception[/size]
  40. [size=2]MsgBox([/size][size=2][color=#a31515][size=2][color=#a31515]"error"[/color][/size][/color][/size][size=2])[/size]
  41. [size=2][/size][size=2]MsgBox([/size][size=2][color=#a31515][size=2][color=#a31515]"Error during execution! "[/color][/size][/color][/size][size=2] & ex.Message)[/size]
  42. [size=2][color=#0000ff][size=2][color=#0000ff]Finally[/color][/size]
  43. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Try[/color][/size]
  44. [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size]
  45. [size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Class[/color][/size]
  46. [/color][/size]
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:11:12 | 显示全部楼层
“未来用户友好性”很棒。
这真的很好。谢谢。
 
获得最近的perp点无疑是一项常见任务在那之后我欠你一些啤酒哈哈
 
不需要对代码进行注释-我一眼就知道你做了什么,但我会进一步检查,如果我卡住了,我会大喊一声
 
一旦我完成了,我也会把我完成的代码转发给你,所以如果你觉得它出于任何原因都有用,我会感觉更好
 
好的课堂——我认为应该是一个标准的课堂——但我想这就是了。
 
谢谢
回复

使用道具 举报

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 15:19:21 | 显示全部楼层
我很高兴这有帮助。是的,请上传完整的代码。由于相对稀缺。NET的例子,这个新闻组和我将感谢每一个我们可以得到的。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:23:00 | 显示全部楼层
回复

使用道具 举报

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 15:30:04 | 显示全部楼层
No enjoy your weekend mate - im in no rush with this - its just something that i want to get done eventually.
 
When ever you can.
 
Cheers
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:35:24 | 显示全部楼层
Here is an example routine that draws a line perpendicular to a “Top Curve” from the closest point on a “Bottom Curve”.  
 
The need to find an intersection of two curves, closest to a particular point, seemed common enough to warrant an extended “Code Reuse” effort.  Consequently, I made a ClosestIntersToPt class to make the process more user friendly.  This “future user friendliness” does add a bit of complexity to the code as it stands.  Let me know if some additional code commenting would make the code more decipherable.
 
Incidentally, the class still needs to implement a “Projected Intersection” method to stay in line with the current Entity.IntersectWith method.
 
Importing:
 
Imports Autodesk.AutoCAD.Runtime
Imports AcadNetAppServices = Autodesk.AutoCAD.ApplicationServices
Imports AcadNetDbServices = Autodesk.AutoCAD.DatabaseServices
Imports AcadNetDBTransman = Autodesk.AutoCAD.DatabaseServices.TransactionManager
Imports AcadNetGeometry = Autodesk.AutoCAD.Geometry
Imports AcadNetEditorInput = Autodesk.AutoCAD.EditorInput
Imports System.Collections.Generic
 
  1.      _      Public Sub Perp2Curve()       Dim DB As AcadNetDbServices.Database = AcadNetDbServices.HostApplicationServices.WorkingDatabase       Dim ED As AcadNetEditorInput.Editor = AcadNetAppServices.Application.DocumentManager.MdiActiveDocument.Editor       Dim ActiveDoc As AcadNetAppServices.Document = AcadNetAppServices.Application.DocumentManager.MdiActiveDocument       Dim Trans2 As AcadNetDbServices.Transaction = DB.TransactionManager.StartTransaction()       Dim TopCurve As AcadNetDbServices.Curve       Dim VectZ As AcadNetGeometry.Vector3d = New AcadNetGeometry.Vector3d(0.0, 0.0, 1.0)       Dim pln As AcadNetGeometry.Plane = New AcadNetGeometry.Plane()       Dim lnList As List(Of AcadNetDbServices.Line) = New List(Of AcadNetDbServices.Line)       Dim Line1 As AcadNetDbServices.Line = New AcadNetDbServices.Line()       Try           Dim PDO As AcadNetEditorInput.PromptDoubleOptions = New AcadNetEditorInput.PromptDoubleOptions(vbCr & "Specify distance between lines: ")           PDO.AllowNegative = False           PDO.AllowZero = False           PDO.AllowArbitraryInput = False           PDO.AllowNone = False           PDO.DefaultValue = 5           Dim PDR As AcadNetEditorInput.PromptDoubleResult = ED.GetDouble(PDO)           If PDR.Status  AcadNetEditorInput.PromptStatus.OK Then Exit Sub           Dim PEO1 As AcadNetEditorInput.PromptEntityOptions = New AcadNetEditorInput.PromptEntityOptions(vbCr & "Select top Curve: ")           PEO1.SetRejectMessage(" Invalid entity! Select LWPoly, 2DPoly, 3DPoly, Line, Arc, Circle or Spline only!")           PEO1.AddAllowedClass(GetType(AcadNetDbServices.Curve), False)           Dim PER1 As AcadNetEditorInput.PromptEntityResult = ED.GetEntity(PEO1)           If PER1.Status  AcadNetEditorInput.PromptStatus.OK Then Exit Sub           TopCurve = Trans2.GetObject(PER1.ObjectId, AcadNetDbServices.OpenMode.ForRead)           PEO1.Message = vbCr & "Select bottom curve: "           PER1 = ED.GetEntity(PEO1)           If PER1.Status  AcadNetEditorInput.PromptStatus.OK Then Exit Sub           Dim objCloseInt As ClosestIntersToPt = New ClosestIntersToPt()           objCloseInt.ArgumentCurve = CType(Trans2.GetObject(PER1.ObjectId, AcadNetDbServices.OpenMode.ForRead), AcadNetDbServices.Curve)           Dim TopCurveLen As Double = TopCurve.GetDistanceAtParameter(TopCurve.EndParam)           Dim DistBetween As Double = PDR.Value           Dim Divstep As Double = PDR.Value           Dim StepLength1 As Double = 0           Dim StartPt1 As AcadNetGeometry.Point3d           Dim Vector1 As AcadNetGeometry.Vector3d           While StepLength1  0 Then           lstPt = p3dc(0)           Dim minLen As Double = p3dc(0).DistanceTo(BasePoint)           Dim tempLen As Double           ClosestPt = p3dc(0)           If Ubound > 1 Then               For i = 1 To p3dc.Count - 1                   tempLen = p3dc(i).DistanceTo(BasePoint)                   If tempLen < minLen Then                       ClosestPt = p3dc(i)                       minLen = tempLen                   End If               Next           End If           Intersects = True       Else           Intersects = False       End If   End Sub
回复

使用道具 举报

28

主题

130

帖子

126

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 15:44:53 | 显示全部楼层
'future user friendliness' is great.
That actually works perfect thank you.
 
It is definatly a common task to get the closest perp point.- i owe you some beers after that one haha
 
No need for the commenting for the code - i do understand what you have done basically at a glance but i will go over it further and if i get stuck i will give you a yell
 
I'll also forward on my completed code to you once i finish so if you find it useful for any reason what so ever i'll feel better
 
Good class - should have been a standard class really i think - but here it is i suppose.
 
Thanks
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 22:05 , Processed in 0.472532 second(s), 72 queries .

© 2020-2025 乐筑天下

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