乐筑天下

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

[编程交流] 三维点和二维多段线

[复制链接]

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 22:20:41 | 显示全部楼层 |阅读模式
忘了提一下,这是在VB中。网
 
 
我需要在两个选定点之间绘制一条多段线(然后对其进行一些处理)。我最好的前进方式是什么?我正在“学习”的书(你从错误中吸取了教训,不是吗)向我展示了如何操作二维多段线和如何选择三维点。我不能做的是将我的3d点转换成2d点。我错过了什么?
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 22:32:42 | 显示全部楼层
你是说要绘制二维多段线,但要捕捉到三维点并忽略Z高程?
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 22:37:32 | 显示全部楼层
太快了!
我也刚刚意识到我错过了我在VB中编码的要点。网(对不起)
 
我只需要一条二维(z=0)多段线。
  1. [font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]Dim[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2] myPline [/size][/font][/size][/font][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]As[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]New[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af]Polyline[/color][/size][/font]
  2. [/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2]myPline.AddVertexAt(0, [/size][/font][/size][/font][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]New[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af]Point2d[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2](0, 0), 0, 0, 0) [/size][/font][/size][/font][font=Consolas][size=2][color=#008000][font=Consolas][size=2][color=#008000][font=Consolas][size=2][color=#008000]' myStartPoint[/color][/size][/font]
  3. [/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2]myPline.AddVertexAt(1, [/size][/font][/size][/font][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]New[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af]Point2d[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2](10, 10), 0, 0, 0) [/size][/font][/size][/font][font=Consolas][size=2][color=#008000][font=Consolas][size=2][color=#008000][font=Consolas][size=2][color=#008000]'myNextPoint[/color][/size][/font]
  4. [/color][/size][/font][/color][/size][/font]

 
我(目前)知道的唯一命令是获取3d点。。。。
 
  1. [font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]Dim[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2] my3dStartPoint [/size][/font][/size][/font][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]As[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af]Point3d[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2] = DocumentManager.MdiActiveDocument.Editor.GetPoint([/size][/font][/size][/font][font=Consolas][size=2][color=#a31515][font=Consolas][size=2][color=#a31515][font=Consolas][size=2][color=#a31515]"start "[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2]).Value[/size][/font]
  2. [/size][/font][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]Dim[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2] my2dStartPoint [/size][/font][/size][/font][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff][font=Consolas][size=2][color=#0000ff]As[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af][font=Consolas][size=2][color=#2b91af]Point2d[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2] = DocumentManager.MdiActiveDocument.Editor.GetPoint([/size][/font][/size][/font][font=Consolas][size=2][color=#a31515][font=Consolas][size=2][color=#a31515][font=Consolas][size=2][color=#a31515]"start "[/color][/size][/font][/color][/size][/font][/color][/size][/font][font=Consolas][size=2][font=Consolas][size=2]).Value[/size][/font][/size][/font]

 
第一个有效,第二个无效。我不确定我是否错过了一个简单的转换,或者我是否使用了错误的组件,或者只是错过了一点语法。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:38:48 | 显示全部楼层
戴夫,
 
EditorInput的Value属性。PromptResult。。。这是编辑器返回的内容。GetPoint()。。。返回Point3d,这就是为什么转换为Point2d失败的原因。
 
要从点3D获得单个点2D,请考虑使用点3D的X和Y值来创建新的点2D。
 
如果你有列表并且想转换为列表,托尼在这里提供了一些好的建议。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:44:46 | 显示全部楼层
这里有一个简单的扩展方法供您使用,它允许您立即从任何Point3d类型中提取Point2d(甚至从EditorInput.PromptResult.Value中),如下所示:
 
  1. namespace Autodesk.AutoCAD.Geometry
  2. {
  3.    public static class Point3dExtensionMethods
  4.    {
  5.        public static Point2d GetPoint2d(this Point3d pt)
  6.        {
  7.            return new Point2d(pt.X, pt.Y);
  8.        }
  9.    }
  10. }

 
... 下面是一个使用它的快速示例:
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.EditorInput;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.Runtime;
  5. [color="blue"]using Autodesk.AutoCAD.Geometry.Point3dExtensionMethods;[/color]
  6. namespace CADTutor.Sample.PointUtilities
  7. {
  8.    class Foo
  9.    {
  10.        [CommandMethod("FOO")]
  11.        void FOO()
  12.        {
  13.            Document doc =
  14.                    Application.DocumentManager.MdiActiveDocument;
  15.            Editor ed = doc.Editor;
  16.            PromptPointOptions opts = new PromptPointOptions("");
  17.            opts.Message = "\nSpecify a point: ";
  18.            PromptPointResult ppr = ed.GetPoint(opts);
  19.            if (ppr.Status == PromptStatus.OK)
  20.            {
  21.                Point3d pt = ppr.Value;
  22.                ed.WriteMessage(
  23.                    "\n** [Point3d] = {0}, [Point2d] = {1} ** ",
  24.                    pt.ToString(),
  25.                    pt.[color="blue"]GetPoint2d()[/color].ToString()
  26.                );
  27.            }
  28.        }
  29.    }
  30. }
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:53:31 | 显示全部楼层
您可能还会发现这篇ADNDevBlog文章很有用:
 
AutoCAD 2013中的扩展方法
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 23:02:27 | 显示全部楼层
嗨,Dave,请参阅附件中的简单代码,
这是一首老歌,但它对我有用
 
loop_点。txt文件
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 23:03:29 | 显示全部楼层
谢谢你们,我明天回去工作的时候会好好看看的。
 
再一次,我没有寻找简单的解决方案,只删除一个3d点的z分量!
 
在回家的路上,我突然想到,我还必须想出如何“宣布”普林线应该关闭——看起来fixo的代码中已经包含了这一点。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:13:29 | 显示全部楼层
 
..........
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 23:15:41 | 显示全部楼层
我明白了,你是在评论fixo对Convert2d()的使用。我看这需要一点时间。。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:39 , Processed in 0.477814 second(s), 72 queries .

© 2020-2025 乐筑天下

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