syeanwoo 发表于 2011-12-5 17:31:04

简单的求直线斜率和截矩函数问题

本帖最后由 syeanwoo 于 2011-12-5 17:34 编辑

在一个过程中调用了求直线斜率a和截矩b的函数(见最后),用一个二维点Point2d的X和Y分别来存储a和b,VS没有提示有问题,但是运行时却说4613行( 现在的第3行:Point3d pt1 = L3d.StartPoint;)有问题,以下为错误提示信息,望各位赐教,多谢:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.InvalidOperationException: Operation is not valid due to the current state of the object.
   at Autodesk.AutoCAD.Geometry.Curve3d.get_StartPoint()
   at MyProject.CADCom.LineAB(Line3d L3d) in F:\Users\Syean Woo\Documents\Visual Studio 2010\Projects\MyFirstProject\MyFirstProject\MyClass.cs:line 4613
   at MyProject.CADCom.IntersectPoints(Line3d L1, Line3d L2) in F:\Users\Syean Woo\Documents\Visual Studio 2010\Projects\MyFirstProject\MyFirstProject\MyClass.cs:line 4581
   at MyProject.ModifyObjects.ThreeArcs() in F:\Users\Syean Woo\Documents\Visual Studio 2010\Projects\MyFirstProject\MyFirstProject\MyClass.cs:line 2741
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()

      static public Point2d LineAB(Line3d L3d)
      {
            Point3d pt1 = L3d.StartPoint;
            Point3d pt2 = L3d.EndPoint;
            double a = (pt1.Y - pt2.Y) / (pt1.X - pt2.X);
            double b = (pt1.X * pt2.Y - pt2.X * pt1.Y) / (pt1.X - pt2.X);
            return new Point2d(a, b);
      }



badboy518 发表于 2011-12-5 18:06:28

粗看上去好像是版本有问题。get_StartPoint这个是老旧的格式。

syeanwoo 发表于 2011-12-5 18:49:36

badboy518 发表于 2011-12-5 18:06 static/image/common/back.gif
粗看上去好像是版本有问题。get_StartPoint这个是老旧的格式。

你是说用在引用L3d.StartPoint时调用的get_StartPoint的版本问题?这个是AutoCAD封装好了的,我们怎么知道啊?我只知道我要引用它,而且只有这一个方法。

sieben 发表于 2011-12-5 22:31:28

应该是AutoCAD没补充好相应函数,或许以后也不会补充,Line3d表示的应该是无限长线(或说虚构的构造线)没有或说不提供StartPoint也是正常的,或说符合逻辑的.

1,你不应该这样子来计算Line3d的斜率,或许你应该使用其Direction属性
2,你的函数有Bug,函数里面的除数可能为0.

syeanwoo 发表于 2011-12-6 09:13:44

sieben 发表于 2011-12-5 22:31 static/image/common/back.gif
应该是AutoCAD没补充好相应函数,或许以后也不会补充,Line3d表示的应该是无限长线(或说虚构的构造线)没有或说 ...

非常感谢,Divided by Zero的Bug很容易解决。但是AutoCAD提供了StartPoint属性却不让我们访问吗?另外既然是无限长线就不应该用StartPoint和EndPoint属性了。
我还是用Line来解决吧!最后非常感谢sieben,非常感谢!

sieben 发表于 2011-12-6 10:41:35

Line3d 的StartPoint和EndPoint属性 来自其继承类,这是标配与专用的固有矛盾,正常得很.
页: [1]
查看完整版本: 简单的求直线斜率和截矩函数问题