Exemplo n.º 1
0
        /// <summary>
        /// Draws plane at half the scale.
        /// </summary>
        /// <param name="package"></param>
        /// <param name="plane"></param>
        /// <param name="name"></param>
        private void DrawPlane(ref IRenderPackage package, Plane plane, Planes name)
        {
            package.Description = string.Format("{0}_{1}_{2}", RenderDescriptions.ManipulatorPlane, Name, name);
            using (var vec1 = plane.XAxis.Scale(scale / 3))
                using (var vec2 = plane.YAxis.Scale(scale / 3))
                    using (var vec3 = plane.YAxis.Scale(scale / 3))
                    {
                        using (var p1 = Origin.Add(vec1))
                            using (var p2 = p1.Add(vec2))
                                using (var p3 = Origin.Add(vec3))
                                {
                                    var axis  = plane.Normal;
                                    var color = GetAxisColor(GetAlignedAxis(axis));

                                    package.AddLineStripVertexCount(3);
                                    package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                                    package.AddLineStripVertex(p1.X, p1.Y, p1.Z);

                                    package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                                    package.AddLineStripVertex(p2.X, p2.Y, p2.Z);

                                    package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                                    package.AddLineStripVertex(p3.X, p3.Y, p3.Z);
                                }
                    }
        }
Exemplo n.º 2
0
 public void Add(T1 key, T2 value)
 {
     lock (Locker)
     {
         Origin.Add(key, value);
     }
 }
Exemplo n.º 3
0
        public void Rotate()
        {
            // rotate on 90
            var mid = (Origin.Add(Destination)).Multiply(0.5f);
            var v   = Destination.Substract(Origin);
            var n   = new PointF(v.Y, -v.X);

            Origin      = mid.Substract(n.Multiply(0.5f));
            Destination = mid.Add(n.Multiply(0.5f));
        }
Exemplo n.º 4
0
        private void _createGrid(Point3d destPoint)
        {
            Entities.Clear();


            Vector3d vector = destPoint - Origin;

            /*Point3d leftTop = Origin.Add(_ucs.CoordinateSystem3d.Yaxis.MultiplyBy(vector.Y));
             * Point3d leftLow = Origin;
             * Point3d rightTop = destPoint;
             * Point3d rightLow = Origin.Add(_ucs.CoordinateSystem3d.Xaxis.MultiplyBy(vector.X));*/

            Point3d leftTop  = Origin.Add(Matrix3d.Identity.CoordinateSystem3d.Yaxis.MultiplyBy(vector.Y));
            Point3d leftLow  = Origin;
            Point3d rightTop = destPoint;
            Point3d rightLow = Origin.Add(Matrix3d.Identity.CoordinateSystem3d.Xaxis.MultiplyBy(vector.X));

            _mainRec = new Rectangle3d(leftTop, rightTop, leftLow, rightLow);

            double hLength = Math.Abs((_mainRec.LowerRight - _mainRec.LowerLeft).X);
            double vLength = Math.Abs((_mainRec.UpperLeft - _mainRec.LowerLeft).Y);

            double hCount = hLength / _horizontalStep;
            double vCount = vLength / _verticalStep;

            int rowsCount    = (int)Math.Ceiling(vCount);
            int columnsCount = (int)Math.Ceiling(hCount);

            Rectangle3d current = new Rectangle3d(
                upperLeft: _mainRec.LowerLeft.Add((_mainRec.UpperLeft - _mainRec.LowerLeft).Normalize().MultiplyBy(_verticalStep)),
                upperRight: _mainRec.LowerLeft.Add((_mainRec.LowerRight - _mainRec.LowerLeft).Normalize().MultiplyBy(_horizontalStep))
                .Add((_mainRec.UpperLeft - _mainRec.LowerLeft).Normalize().MultiplyBy(_verticalStep)),
                lowerLeft: _mainRec.LowerLeft,
                lowerRight: _mainRec.LowerLeft.Add((_mainRec.LowerRight - _mainRec.LowerLeft).Normalize().MultiplyBy(_horizontalStep))
                );

            SimpleGride table = new SimpleGride(current);

            for (int r = 0; r < rowsCount; r++)
            {
                for (int c = 0; c < columnsCount; c++)
                {
                    var rec = table.CalculateRectagle(r, c);
                    rec.TransformBy(_ucs);
                    this.Entities.Add(rec);
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Draws axis as 3D arrow based on scale factor.
        /// </summary>
        /// <param name="package"></param>
        /// <param name="axis"></param>
        private void DrawAxis(ref IRenderPackage package, Vector axis)
        {
            var axisType = GetAlignedAxis(axis);

            package.Description = string.Format("{0}_{1}_{2}", RenderDescriptions.ManipulatorAxis, Name, axisType);

            using (var axisEnd = Origin.Add(axis.Scale(scale)))
            {
                var color = GetAxisColor(axisType);
                package.AddLineStripVertexCount(2);
                package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                package.AddLineStripVertex(Origin.X, Origin.Y, Origin.Z);
                package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                package.AddLineStripVertex(axisEnd.X, axisEnd.Y, axisEnd.Z);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Draws plane at half the scale.
        /// </summary>
        /// <param name="package"></param>
        /// <param name="plane"></param>
        /// <param name="name"></param>
        private void DrawPlane(ref IRenderPackage package, Plane plane, Planes name)
        {
            package.Description = string.Format("{0}_{1}_{2}", RenderDescriptions.ManipulatorPlane, Name, name);
            var p1 = Origin.Add(plane.XAxis.Scale(scale / 2));
            var p2 = p1.Add(plane.YAxis.Scale(scale / 2));
            var p3 = Origin.Add(plane.YAxis.Scale(scale / 2));

            package.AddLineStripVertexCount(3);
            package.AddLineStripVertexColor(0, 0, 255, 255);
            package.AddLineStripVertex(p1.X, p1.Y, p1.Z);

            package.AddLineStripVertexColor(0, 0, 255, 255);
            package.AddLineStripVertex(p2.X, p2.Y, p2.Z);

            package.AddLineStripVertexColor(0, 0, 255, 255);
            package.AddLineStripVertex(p3.X, p3.Y, p3.Z);
        }
Exemplo n.º 7
0
            private void _createText()
            {
                _northCoordText = new DBText();
                _northCoordText.SetDatabaseDefaults();

                _northCoordText.TextString = InsertPointUcs.Y.ToString(_format);
                _northCoordText.Rotation   = Math.PI / 2d;
                _northCoordText.Height     = _textHeight;
                _northCoordText.Position   = Origin.Add(_verticalLine.GetFirstDerivative(0).Normalize().MultiplyBy(0.1 * _textHeight).
                                                        Add(_verticalLine.GetFirstDerivative(0).GetPerpendicularVector().Normalize().MultiplyBy(0.1 * _textHeight)));
                Entities.Add(_northCoordText);


                _eastCoordText = new DBText();
                _eastCoordText.SetDatabaseDefaults();

                _eastCoordText.TextString = InsertPointUcs.Y.ToString(_format);
                _eastCoordText.Rotation   = 0d;
                _eastCoordText.Height     = _textHeight;
                _eastCoordText.Position   = Origin.Add(_horizontalLine.GetFirstDerivative(0).Normalize().MultiplyBy(0.1 * _textHeight).
                                                       Add(_horizontalLine.GetFirstDerivative(0).GetPerpendicularVector().Normalize().MultiplyBy(0.1 * _textHeight)));
                Entities.Add(_eastCoordText);
            }
Exemplo n.º 8
0
        public void Highlight()
        {
            PhongPatchPNTriangleGeometry g = Origin.Geometries[GeometryID] as PhongPatchPNTriangleGeometry;

            if (g != null && PatchID >= 0)
            {
                IDrawable r = g.ExportRange(PatchID);

                Node = new SelectableSceneNode(r)
                {
                    Selected = true, Priority = 100
                };
                Origin.Add(Node);
            }
            else
            {
                SelectableSceneNode n = Origin as SelectableSceneNode;
                if (n != null)
                {
                    n.Selected = true;
                    Node       = n;
                }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Computes move vector, based on new position of mouse and view direction.
        /// </summary>
        /// <param name="newPosition">New mouse position</param>
        /// <param name="viewDirection">view direction</param>
        /// <returns>Offset vector wrt Origin</returns>
        public Vector GetOffset(Point newPosition, Vector viewDirection)
        {
            Point hitPoint = Origin;

            using (var ray = GetRayGeometry(newPosition, viewDirection))
            {
                if (hitPlane != null)
                {
                    hitPoint = hitPlane.Intersect(ray).FirstOrDefault() as Point;
                }
                else if (hitAxis != null)
                {
                    var axis  = hitAxis.Cross(viewDirection);
                    var plane = Plane.ByOriginXAxisYAxis(Origin, hitAxis, axis);
                    hitPoint = plane.Intersect(ray).FirstOrDefault() as Point;
                    if (null != hitPoint)
                    {
                        var projection = hitAxis.Dot(Vector.ByTwoPoints(Origin, hitPoint));
                        hitPoint = Origin.Add(hitAxis.Normalized().Scale(projection));
                    }
                    else
                    {
                        using (var axisLine = RayExtensions.ToOriginCenteredLine(Origin, hitAxis))
                        {
                            hitPoint = axisLine.ClosestPointTo(ray);
                        }
                    }
                }
            }
            if (hitPoint == null)
            {
                return(Vector.ByCoordinates(0, 0, 0));
            }

            return(Vector.ByTwoPoints(Origin, hitPoint));
        }
Exemplo n.º 10
0
 public void Add(T item)
 {
     lock (Locker) { Origin.Add(item); }
 }
Exemplo n.º 11
0
 private void _createLines()
 {
     _horizontalLine = new Line(Origin, Origin.Add(InnerBlockTransform.CoordinateSystem3d.Xaxis).MultiplyBy(_size));
     _verticalLine   = new Line(Origin, Origin.Add(InnerBlockTransform.CoordinateSystem3d.Yaxis).MultiplyBy(_size));
     Entities.AddRange(new[] { _horizontalLine, _verticalLine });;
 }
Exemplo n.º 12
0
 // Translation
 public void Translate(int horizontal, int vertical)
 {
     Origin = Origin.Add(horizontal, -vertical);
 }