Пример #1
0
        public void CreateFromRotationAroundAxisTest()
        {
            //sw transform data: 0.900202513118371, -0.424567507790233, -0.096839386120319, 0.383554841948467, 0.878329091336096, -0.285348366966756, 0.206206495031693, 0.219728101619931, 0.953518978712666, 0, 0, 0, 1, 0, 0, 0
            var matrix = new TransformMatrix(0.900202513118371, -0.424567507790233, -0.096839386120319, 0, 0.383554841948467, 0.878329091336096, -0.285348366966756, 0, 0.206206495031693, 0.219728101619931, 0.953518978712666, 0, 0, 0, 0, 1);

            var rotMatrix = TransformMatrix.CreateFromRotationAroundAxis(new Vector(-0.5, 0.3, -0.8), 0.523599, new Point(0, 0, 0));

            CollectionAssert.AreEqual(matrix.ToArray(), rotMatrix.ToArray(), new DoubleComparer());
        }
Пример #2
0
        public override ISwBody[] CreateGeometry(ISwApplication app, ISwDocument model, CoordinateSystemData data, bool isPreview, out AlignDimensionDelegate <CoordinateSystemData> alignDim)
        {
            alignDim = null;

            const double SCALE = 0.1;

            var origin = new Point(data.X, data.Y, data.Z);
            var x      = new Vector(1, 0, 0);
            var y      = new Vector(0, 1, 0);
            var z      = new Vector(0, 0, 1);

            var rotation = TransformMatrix.Identity
                           .Multiply(TransformMatrix.CreateFromRotationAroundAxis(x, data.RotationX, origin))
                           .Multiply(TransformMatrix.CreateFromRotationAroundAxis(y, data.RotationY, origin))
                           .Multiply(TransformMatrix.CreateFromRotationAroundAxis(z, data.RotationZ, origin));

            x = x.Transform(rotation);
            y = y.Transform(rotation);
            z = z.Transform(rotation);

            var xLine = (ISwLineCurve)app.MemoryGeometryBuilder.CreateLine(origin, origin.Move(x, SCALE / 3));
            var yLine = (ISwLineCurve)app.MemoryGeometryBuilder.CreateLine(origin, origin.Move(y, SCALE / 2));
            var zLine = (ISwLineCurve)app.MemoryGeometryBuilder.CreateLine(origin, origin.Move(z, SCALE));

            var xBody = (ISwBody)xLine.CreateBody();
            var yBody = (ISwBody)yLine.CreateBody();
            var zBody = (ISwBody)zLine.CreateBody();

            if (!isPreview)
            {
                m_TrackingId = app.Sw.RegisterTrackingDefinition("_CoordinateSystemEx_Bodies_");

                if (xBody.Body.SetTrackingID(m_TrackingId, X_BODY_TRACKING_ID) != (int)swTrackingIDError_e.swTrackingIDError_NoError)
                {
                    throw new Exception("Failed to track body");
                }

                if (yBody.Body.SetTrackingID(m_TrackingId, Y_BODY_TRACKING_ID) != (int)swTrackingIDError_e.swTrackingIDError_NoError)
                {
                    throw new Exception("Failed to track body");
                }

                if (zBody.Body.SetTrackingID(m_TrackingId, Z_BODY_TRACKING_ID) != (int)swTrackingIDError_e.swTrackingIDError_NoError)
                {
                    throw new Exception("Failed to track body");
                }
            }

            return(new ISwBody[] { xBody, yBody, zBody });
        }