找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 752|回复: 11

[求助] 如何将样条曲线转成多段线,最好是用C#编程实现

[复制链接]

已领礼包: 22个

财富等级: 恭喜发财

发表于 2017-7-30 17:40:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
如何将样条曲线转成多段线,最好是用C#编程实现
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-30 17:42:38 | 显示全部楼层
getsamplepoints获得样本点,然后创建多段线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

 楼主| 发表于 2017-7-30 17:51:54 | 显示全部楼层

你说的这个函数在哪个类?我没有找到,objectarx 2007里面有么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-30 17:53:24 | 显示全部楼层
本帖最后由 newer 于 2017-7-30 17:57 编辑

AcGe几何库,曲线下面都有

其实,你自己也可以实现,用曲线的 getpointatparam, getdistatparam 等等,用二分查找方法,找到弦高距离满足精度的那些点,作为多段线的顶点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

 楼主| 发表于 2017-7-30 17:57:40 | 显示全部楼层

namespace Autodesk.AutoCAD.DatabaseServices
{
    [Wrapper("AcDbCurve")]
    public abstract class Curve : Entity
    {
        protected internal Curve(IntPtr unmanagedObjPtr, bool autoDelete);

        public virtual double Area { get; }
        public bool Closed { get; }
        public virtual double EndParam { get; }
        public virtual Point3d EndPoint { get; set; }
        public virtual bool IsPeriodic { get; }
        public virtual Spline Spline { get; }
        public virtual double StartParam { get; }
        public virtual Point3d StartPoint { get; set; }

        public virtual void Extend(double newParameter);
        public virtual void Extend(bool extendStart, Point3d toPoint);
        public virtual Point3d GetClosestPointTo(Point3d givenPoint, bool extend);
        public virtual Point3d GetClosestPointTo(Point3d givenPoint, Vector3d direction, bool extend);
        public virtual double GetDistanceAtParameter(double value);
        public virtual double GetDistAtPoint(Point3d point);
        public virtual Vector3d GetFirstDerivative(double value);
        public virtual Vector3d GetFirstDerivative(Point3d point);
        public virtual DBObjectCollection GetOffsetCurves(double offsetDist);
        public virtual DBObjectCollection GetOffsetCurvesGivenPlaneNormal(Vector3d normal, double offsetDist);
        public virtual Curve GetOrthoProjectedCurve(Plane planeToProjectOn);
        public virtual double GetParameterAtDistance(double dist);
        public virtual double GetParameterAtPoint(Point3d point);
        public virtual Point3d GetPointAtDist(double value);
        public virtual Point3d GetPointAtParameter(double value);
        public virtual Curve GetProjectedCurve(Plane planeToProjectOn, Vector3d projectionDirection);
        public virtual Vector3d GetSecondDerivative(double value);
        public virtual Vector3d GetSecondDerivative(Point3d point);
        public virtual DBObjectCollection GetSplitCurves(DoubleCollection value);
        public virtual DBObjectCollection GetSplitCurves(Point3dCollection points);
    }
}
这是objectarx,我没有找到你说的那个函数,能加你QQ好友么?


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-30 17:59:38 | 显示全部楼层

你看看 AcGeCurve 下面都有什么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

 楼主| 发表于 2017-7-30 18:00:31 | 显示全部楼层
我的qq是64924930
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-30 18:09:32 | 显示全部楼层

去看下几何类下面的 Curve2d 下面都封装了什么。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

 楼主| 发表于 2017-7-30 18:35:43 | 显示全部楼层
Entity ent = (Entity)id.GetObject(OpenMode.ForWrite);
                      if (ent is Spline)
                      {
                          Spline sp = (Spline)ent;
                          SplineEntity2d ss = (SplineEntity2d)ent;

                      }

SplineEntity2d 类有那个函数,不过这个是抽象类,不能实例化,
经过查找发现spline应该是对应这个NurbCurve2d吧
如何通过spline变成NurbCurve2d。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-30 18:43:18 | 显示全部楼层
本帖最后由 newer 于 2017-7-30 18:47 编辑

有问题,搜索论坛,去找 数据库实体转换成几何实体的代码。ARX论坛有。

如果你使用高版本的CAD,2014以上把,数据库实体类中有转换成几何实体的函数getAcGeCurve
如果你用低版本,自己转换,从数据库SPLINE实体找出几何实体创建需要的参数。


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-30 18:48:55 | 显示全部楼层

NurbCurve2d 需要什么参数,你从数据库SPLINE实体得到,给它。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

 楼主| 发表于 2017-7-30 19:23:56 | 显示全部楼层

  if (ent is Spline)
                      {
                          Spline sp = (Spline)ent;
                         int d =  sp.Degree;
                         NurbCurve3d nurb = new NurbCurve3d(sp.FitData.GetFitPoints ());
                         Point3d[] pt3= nurb.GetSamplePoints(20);

                         Polyline pl = new Polyline();

                         for (int i = 0; i < pt3.Length ; i++)
                         {
                             pl.AddVertexAt(i, new Point2d(pt3.X, pt3.Y), 0, 0, 0);
                         }

                         //将图形对象的信息添加到块表记录中,并返回ObjectId对象.  
                         btr.AppendEntity(pl);

                         //把对象添加到事务处理中.  
                         trans.AddNewlyCreatedDBObject(pl, true);

                         //提交事务处理  
                         trans.Commit();
}
大哥,我写了一下,对于控制点都在线上的可以,对于控制点不在线上的不行,能帮我改改么?

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:19 , Processed in 0.249116 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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