明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 20640|回复: 32

[几何] 几何类使用相关

    [复制链接]
发表于 2010-6-11 19:29:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2010-6-12 6:53:40 编辑

        //使用Ge曲线的简单例子
        //对直线和圆求交点,并返回交点分隔的部分
        [CommandMethod("t9")]
        public static void Test9()
        {
            //Ge直线
            Line2d l2d = new Line2d(Point2d.Origin, Vector2d.XAxis);
            //Ge圆
            CircularArc2d ca2d = new CircularArc2d(new Point2d(5, 5), 15);

            //交点集合
            List<oint2d> pnts = new List<oint2d>();

            //交点处的参数集合
            List<double> pars1 = new List<double>();
            List<double> pars2 = new List<double>();

            //求交
            using (var cci2d = new CurveCurveIntersector2d(l2d, ca2d))
            {
                for (int i = 0; i < cci2d.NumberOfIntersectionPoints; i++)
                {
                    pnts.Add(cci2d.GetIntersectionPoint(i));
                    var k = cci2d.GetIntersectionParameters(i);
                    pars1.Add(k[0]);
                    pars2.Add(k[1]);
                }
            }

            var db = HostApplicationServices.WorkingDatabase;
            var doc = Application.DocumentManager.GetDocument(db);
            var ed = doc.Editor;
 
            int j = 0;
            pnts.ForEach(p => ed.WriteMessage("\n第{0}个交点为:{1}", ++j, p));

            //转换结果为Db曲线
            using (var tr = db.TransactionManager.StartTransaction())
            {

                var btr = db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;

                pars1.Sort();
                LineSegment2d ls2d = new LineSegment2d(l2d.EvaluatePoint(pars1[0]), l2d.EvaluatePoint(pars1[1]));
                var line = ls2d.ToCurve(Matrix3d.Identity);
                btr.AppendEntity(line);
                tr.AddNewlyCreatedDBObject(line, true);

                pars2.Sort();
                ca2d.SetInterval(new Interval(pars2[0], pars2[1], 0));
                var arc = ca2d.ToCurve(Matrix3d.Identity);
                btr.AppendEntity(arc);
                tr.AddNewlyCreatedDBObject(arc, true);

                tr.Commit();

            }
        }

 

代码效果:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1威望 +1 明经币 +3 金钱 +20 贡献 +5 激情 +5 收起 理由
lzx838 + 1 + 3 + 20 + 5 + 5 【精华】好程序

查看全部评分

发表于 2021-8-18 13:23:03 | 显示全部楼层
大佬们有2个问题请教一下:Ge曲线和db曲线有什么不同,LineSegment2d这类和实际的line有啥区别
发表于 2022-4-12 18:48:40 | 显示全部楼层
学习了,有个疑问,Ge对象是不是不能直接读取其属性值
发表于 2018-9-28 21:50:55 | 显示全部楼层
顶起,完美的代码,赞一个
发表于 2010-6-11 20:43:00 | 显示全部楼层
学习了。
发表于 2010-6-12 12:10:00 | 显示全部楼层
lzh741206发的,我直接收藏.
发表于 2010-6-13 15:14:00 | 显示全部楼层
学习,顶!!!!!
 楼主| 发表于 2010-6-14 15:00:00 | 显示全部楼层

点到直线的垂足

 

        [CommandMethod("t11")]
        public static void Test11()
        {
            var db = HostApplicationServices.WorkingDatabase;
            var doc = Application.DocumentManager.GetDocument(db);
            var ed = doc.Editor;

            var resEnt = ed.GetEntity("\n请选择一条直线:");
            if (resEnt.Status != PromptStatus.OK)
                return;

            var resPnt = ed.GetPoint("\n请选择直线外的一点:");
            if (resPnt.Status != PromptStatus.OK)
                return;

            using (var tr = db.TransactionManager.StartTransaction())
            {
                Line line = resEnt.ObjectId.GetObject(OpenMode.ForRead) as Line;
                LineSegment3d ls3d = new LineSegment3d(line.StartPoint, line.EndPoint); ;
                Line3d l3d = new Line3d(line.StartPoint, line.EndPoint);

                Point3d pt1 = resPnt.Value;
                Point3d pt2 = l3d.GetClosestPointTo(pt1).Point;

                ed.WriteMessage
                (
                    "\n点{0}\n到直线的垂足为{1};\n距离为{2};\n在直线{3}",
                    pt1,
                    pt2,
                    (pt2 - pt1).Length,
                    ls3d.IsOn(pt2) ? "内" : "外"
                );

                ed.DrawVector(pt1, pt2, 1, false);

            }

        }

 

效果:

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2010-6-18 14:39:00 | 显示全部楼层

呵呵,看到了,谢谢飞弧哥

发表于 2010-6-19 22:34:00 | 显示全部楼层
大家排队顶起!
发表于 2010-6-21 15:37:00 | 显示全部楼层

顶下

发表于 2010-6-24 20:37:00 | 显示全部楼层

回头再顶一次

 

发表于 2010-10-24 10:14:00 | 显示全部楼层
学习,顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-23 00:28 , Processed in 0.201908 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表