Author Topic: OsnapOverrule crashes Autocad  (Read 1782 times)

0 Members and 1 Guest are viewing this topic.

cincir

  • Guest
OsnapOverrule crashes Autocad
« on: November 13, 2012, 11:02:41 AM »
hello everyone

i have a problem about OsnapOverrule. when i register a derived class of OsnapOverrule doing nothing but only calling the base classes GetObjectSnapPoints function , Autocad crashes after object snap tracking from the end point along the direction of polyline occurs. if i unchecked "extension" from object snap it just works fine. it only crashes while object snap tracking. Code is so plain as i said but i am posting it just in case

Code: [Select]
public class OsnapOverruleDemo : OsnapOverrule
    {
        private static OsnapOverruleDemo _singleton;
        public static OsnapOverruleDemo Instance
        {
            get
            {
                if (_singleton == null)
                {
                    _singleton = new OsnapOverruleDemo();
                }
                return _singleton;
            }
        }
        protected OsnapOverruleDemo()
            : base()
        {
        }

        public void Register()
        {
            if (!Overrule.HasOverrule(Instance,RXClass.GetClass(typeof(Autodesk.AutoCAD.DatabaseServices.Polyline))))
            {
                Overrule.AddOverrule(RXClass.GetClass(typeof(Autodesk.AutoCAD.DatabaseServices.Polyline)), Instance, true);
            }
        }

        public void UnRegister()
        {
            if (Overrule.HasOverrule(Instance, RXClass.GetClass(typeof(Autodesk.AutoCAD.DatabaseServices.Polyline))))
            {
                Overrule.RemoveOverrule(RXClass.GetClass(typeof(Autodesk.AutoCAD.DatabaseServices.Polyline)), Instance);
            }
        }

        public override void GetObjectSnapPoints(Entity entity, ObjectSnapModes snapMode, IntPtr gsSelectionMark, Point3d pickPoint, Point3d lastPoint, Matrix3d viewTransform, Point3dCollection snapPoints, IntegerCollection geometryIds, Matrix3d insertionMat)
        {
            base.GetObjectSnapPoints(entity, snapMode, gsSelectionMark, pickPoint, lastPoint, viewTransform, snapPoints, geometryIds, insertionMat);
        }
    }

    public class Demo
    {
        [CommandMethod("OverruleOn")]
        public static void OverruleOn()
        {
            OsnapOverruleDemo.Instance.Register();
        }
    }

should i also implement other overrule functions like GeometryOverrules IntersectWith function or something like this?

thanks.

TheMaster

  • Guest
Re: OsnapOverrule crashes Autocad
« Reply #1 on: November 13, 2012, 08:20:17 PM »
hello everyone

i have a problem about OsnapOverrule. when i register a derived class of OsnapOverrule doing nothing but only calling the base classes GetObjectSnapPoints function , Autocad crashes after object snap tracking from the end point along the direction of polyline occurs. if i unchecked "extension" from object snap it just works fine. it only crashes while object snap tracking. Code is so plain as i said but i am posting it just in case

Code: [Select]


should i also implement other overrule functions like GeometryOverrules IntersectWith function or something like this?

thanks.

An overrule that does nothing should cause AutoCAD to behave as if it wasn't there, so my guess is that its an obscure API bug.