/// <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); } } }
public void Add(T1 key, T2 value) { lock (Locker) { Origin.Add(key, value); } }
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)); }
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); } } }
/// <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); } }
/// <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); }
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); }
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; } } }
/// <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)); }
public void Add(T item) { lock (Locker) { Origin.Add(item); } }
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 });; }
// Translation public void Translate(int horizontal, int vertical) { Origin = Origin.Add(horizontal, -vertical); }