Пример #1
0
        public override void DrawViewportWires(IGH_PreviewArgs args)
        {
            args.Viewport.GetFrustumFarPlane(out Plane plane);
            RhinoViewport viewport = args.Viewport;

            for (int i = 0; i < _pt.Count; i++)
            {
                if (bar_No == 1)
                {
                    var size = VisualizeModel.VisualizeModel.fontsize; Point3d point = _pt[i]; plane.Origin = point;
                    viewport.GetWorldToScreenScale(point, out double pixPerUnit); size /= pixPerUnit;
                    args.Display.Draw3dText(_bar[i], _c[i], plane, size, "", false, false, Rhino.DocObjects.TextHorizontalAlignment.Center, Rhino.DocObjects.TextVerticalAlignment.Bottom);
                }
                if (bar_name == 1)
                {
                    var size = VisualizeModel.VisualizeModel.fontsize; Point3d point = _pt[i]; plane.Origin = point;
                    viewport.GetWorldToScreenScale(point, out double pixPerUnit); size /= pixPerUnit;
                    args.Display.Draw3dText(_name[i], _c[i], plane, size, "", false, false, Rhino.DocObjects.TextHorizontalAlignment.Center, Rhino.DocObjects.TextVerticalAlignment.Top);
                }
                if (bar_list == 1)
                {
                    var size = VisualizeModel.VisualizeModel.fontsize; Point3d point = _pt[i]; plane.Origin = point;
                    viewport.GetWorldToScreenScale(point, out double pixPerUnit); size /= pixPerUnit;
                    args.Display.Draw3dText(_list[i], _c[i], plane, size, "", false, false, Rhino.DocObjects.TextHorizontalAlignment.Center, Rhino.DocObjects.TextVerticalAlignment.Top);
                }
            }
        }
Пример #2
0
        public override void DrawViewportWires(IGH_PreviewArgs argments)
        {
            argments.Viewport.GetFrustumFarPlane(out Plane pln);
            RhinoViewport viewp = argments.Viewport;

            for (int i = 0; i < _s.Count; i++)
            {
                var material = new DisplayMaterial(_c[i], 0.5);
                argments.Display.DrawBrepShaded(_s[i], material);
            }
            for (int i = 0; i < _pt.Count; i++)
            {
                double  size  = fontsize;
                Point3d point = _pt[i];
                pln.Origin = point;
                viewp.GetWorldToScreenScale(point, out double pixPerUnit); size /= pixPerUnit;
                var tt = _text[i];
                var H = TextHorizontalAlignment.Right; var V = TextVerticalAlignment.Top;
                if (_c2[i] == Color.Black)
                {
                    V = TextVerticalAlignment.Bottom;
                }
                if (_c2[i] == Color.Blue)
                {
                    H = TextHorizontalAlignment.Left; V = TextVerticalAlignment.Bottom;
                }
                if (_c2[i] == Color.Purple)
                {
                    H = TextHorizontalAlignment.Left;
                }
                argments.Display.Draw3dText(tt, _c2[i], pln, size, "", false, false, H, V);
            }
        }
Пример #3
0
        public override Transform CalculateTransform(RhinoViewport viewport, Point3d point)
        {
            Transform xform = new Transform(0);

            if (SetX)
            {
                xform[0, 3] = point.X;
            }
            else
            {
                xform[0, 0] = 1.0;
            }

            if (SetY)
            {
                xform[1, 3] = point.Y;
            }
            else
            {
                xform[1, 1] = 1.0;
            }

            if (SetZ)
            {
                xform[2, 3] = point.Z;
            }
            else
            {
                xform[2, 2] = 1.0;
            }

            xform[3, 3] = 1.0;

            return(xform);
        }
Пример #4
0
        public static void StopWASD()
        {
            Overlay.ShowImage(null);

            if (timer != null)
            {
                timer.Stop();
                timer.Tick -= OnTick;
                timer.Dispose();
                timer = null;
            }

            UnhookWindowsHookEx(_kHook);
            UnhookWindowsHookEx(_mHook);
            if (!double.IsNaN(LastTargetDistance))
            {
                RhinoViewport vp        = RhinoDoc.ActiveDoc.Views.ActiveView.ActiveViewport;
                Point3d       newTarget = vp.CameraLocation + vp.CameraDirection * LastTargetDistance;
                vp.SetCameraTarget(newTarget, false);
            }
            LastTargetDistance = double.NaN;

            Cursor.Position = CursorPositionBuffer;
            ShowCursor(true);
            F1 = F2 = F3 = F12 = Q = W = E = S = A = D = Shift = Esc = Enter = false;
        }
Пример #5
0
        public void writeSection2d(MeshVoxeliser mvox)
        {
            File3dm file = setupFile();

            foreach (StructuralSpan sp in mvox.structuralSpans)
            {
                Point3d location = new Point3d();
                foreach (StructuralBay sb in sp.structuralBays)
                {
                    location.X = sb.baynum * 40000;
                    addBaySection2d(file, sb, location);
                }
            }
            RhinoViewport viewport = new RhinoViewport();

            viewport.SetProjection(DefinedViewportProjection.Top, "2d sections", false);
            viewport.ZoomExtents();
            file.AllViews.Add(new ViewInfo(viewport));
            string section = mvox.parameters.sectionNum.ToString();

            if (mvox.parameters.sectionNum < 10)
            {
                section = "0" + section;
            }
            file.Write(@"C:\Users\r.hudson\Documents\WORK\projects\passageProjects\sections\section" + section + "_2d.3dm", 5);
        }
Пример #6
0
        private void makeBayView(File3dm file, StructuralBay bay)
        {
            //File3dm file = setupFile();
            RhinoViewport viewport = new RhinoViewport();

            //shift to mid point of module
            Point3d origin = new Point3d(bay.minPlane.Origin);
            Plane   plnA   = new Plane(origin + bay.minPlane.YAxis * bay.parameters.yCell / 2, bay.minPlane.XAxis, Vector3d.ZAxis);
            //shift to end of module
            Plane plnB = new Plane(origin + bay.minPlane.YAxis * bay.parameters.yCell, bay.minPlane.XAxis, Vector3d.ZAxis);

            plnA.Flip();


            viewport.SetProjection(DefinedViewportProjection.Perspective, "bay_" + bay.baynum.ToString() + "section", false);

            viewport.ChangeToParallelProjection(true);

            //set camera and target
            Vector3d shiftTarget = bay.maxPlane.Origin - bay.minPlane.Origin;

            viewport.SetCameraTarget(bay.minPlane.Origin + shiftTarget / 2, false);
            viewport.SetCameraLocation(viewport.CameraTarget + bay.minPlane.YAxis * -50000, false);
            viewport.SetCameraDirection(viewport.CameraTarget - viewport.CameraTarget, false);
            viewport.CameraUp = Vector3d.ZAxis;
            //viewport.ZoomExtents();
            viewport.PushViewProjection();
            file.AllViews.Add(new ViewInfo(viewport));

            //Clip plane A
            file.Objects.AddClippingPlane(plnA, bay.parameters.width, bay.parameters.height, viewport.Id);
            //Clip plane B
            file.Objects.AddClippingPlane(plnB, bay.parameters.width, bay.parameters.height, viewport.Id);
        }
Пример #7
0
 public override Transform CalculateTransform(RhinoViewport viewport, Point3d point)
 {
     if (CalculatePlaneAngle(point))
     {
         return(Transform.Rotation(m_angle, m_plane.Normal, m_base_point));
     }
     return(Transform.Identity);
 }
        private RhinoViewport camera; //ビューポートのカメラの設定

        ////////////////
        //constructors//
          ////////////////


        public ChangeCoordinates(
            int _size,
            RhinoView _view
            )
        {
            size = _size;
            view = _view;

            camera = new RhinoViewport(view.ActiveViewport);//ビューポートのカメラの設定を格納
        }
Пример #9
0
        private RhinoViewport SetViewParams(RhinoViewport viewport, Base speckleView)
        {
            // lens
            var lens = speckleView["lens"] as double?;

            if (lens != null)
            {
                viewport.Camera35mmLensLength = (double)lens;
            }

            return(viewport);
        }
Пример #10
0
        /// <summary>
        /// Gets scale factor of a given viewport in pixels per unit
        /// </summary>
        /// <param name="viewport">viewport to calculate scale factor for</param>
        /// <returns>scale factor in pixels per unit</returns>
        public static double GetViewportScale(RhinoViewport viewport)
        {
            if (!viewport.IsPlanView)
            {
                return(0);
            }

            viewport.GetFrustumCenter(out var frustrumCenter);
            viewport.GetWorldToScreenScale(frustrumCenter, out var pixelsPerUnit);

            return(pixelsPerUnit);
        }
Пример #11
0
        public override void DrawViewportWires(IGH_PreviewArgs args)
        {
            args.Viewport.GetFrustumFarPlane(out Plane plane);
            RhinoViewport viewport = args.Viewport;

            for (int i = 0; i < _frame.Count; i++)
            {
                args.Display.DrawLine(_frame[i], Color.Black);
            }
            for (int i = 0; i < _wave.Count; i++)
            {
                args.Display.DrawLine(_wave[i], _c[i]);
            }
        }
Пример #12
0
        private static bool IsNamedView(RhinoViewport vp, ViewportInfo info)
        {
            if (
                Math.Abs(vp.Camera35mmLensLength - info.Camera35mmLensLength) < 1 &&
                vp.CameraDirection == info.CameraDirection &&
                vp.CameraLocation == info.CameraLocation &&
                vp.CameraUp == info.CameraUp &&
                vp.CameraTarget == info.TargetPoint
                )
            {
                return(true);
            }

            return(false);
        }
Пример #13
0
        public string ViewToNative(View3D view)
        {
            Rhino.RhinoApp.InvokeOnUiThread((Action) delegate {
                RhinoView _view        = Doc.Views.ActiveView;
                RhinoViewport viewport = _view.ActiveViewport;
                viewport.SetProjection(DefinedViewportProjection.Perspective, null, false);
                var origin  = PointToNative(view.origin).Location;
                var forward = new Vector3d(view.forwardDirection.x, view.forwardDirection.y, view.forwardDirection.z);

                if (view.target != null)
                {
                    viewport.SetCameraLocations(PointToNative(view.target).Location, origin); // this changes viewport.CameraUp. works for axon from revit if after, for perspective from revit if before
                }
                else
                {
                    viewport.SetCameraLocation(origin, true);
                    viewport.SetCameraDirection(forward, true);
                }
                viewport.CameraUp = new Vector3d(view.upDirection.x, view.upDirection.y, view.upDirection.z);

                viewport.Name = view.name;

                /* TODO: debug this and see if it helps better match views from revit
                 * // set bounding box
                 * var box = BoxToNative(view.boundingBox);
                 * BoundingBox boundingBox = new BoundingBox(box.X.Min, box.Y.Min, box.Z.Min, box.X.Max, box.Y.Max, box.Z.Max);
                 * viewport.SetClippingPlanes(boundingBox);
                 */

                // set rhino view props if available
                SetViewParams(viewport, view);

                if (view.isOrthogonal)
                {
                    viewport.ChangeToParallelProjection(true);
                }

                var commitInfo = GetCommitInfo();
                var viewName   = $"{commitInfo } - {view.name}";

                Doc.NamedViews.Add(viewName, viewport.Id);
            });

            //ConversionErrors.Add(sdfasdfaf);

            return("baked");
        }
        /// <summary>
        /// Calculate the transform
        /// </summary>
        public bool CalculateTransform(RhinoViewport vp, Point3d pt, ref Transform xform)
        {
            var rc = false;
            var mp = m_mesh.ClosestMeshPoint(pt, 0.0);

            if (null != mp)
            {
                Plane meshPlane;
                if (MeshFacePlane(mp, out meshPlane))
                {
                    meshPlane.Origin = pt;
                    xform            = Transform.PlaneToPlane(m_object_plane, meshPlane);
                    rc = xform.IsValid;
                }
            }
            return(rc);
        }
Пример #15
0
        public override void DrawViewportWires(IGH_PreviewArgs args)
        {
            args.Viewport.GetFrustumFarPlane(out Plane plane);
            RhinoViewport viewport = args.Viewport;

            ///重心の描画用関数*********************************************************************************
            for (int i = 0; i < _p1.Count; i++)
            {
                Point3d point = _p1[i];
                args.Display.DrawPoint(point, PointStyle.Square, 3, Color.Red);
            }
            ///図心の描画用関数*********************************************************************************
            for (int i = 0; i < _p2.Count; i++)
            {
                Point3d point = _p2[i];
                args.Display.DrawPoint(point, PointStyle.Circle, 3, Color.Blue);
            }
        }
Пример #16
0
        public override Transform CalculateTransform(RhinoViewport viewport, Point3d point)
        {
            var     xform = Transform.Identity;
            Point3d base_point;

            if (TryGetBasePoint(out base_point))
            {
                var v = point - base_point;
                if (!v.IsZero)
                {
                    xform = Transform.Translation(v);
                    if (!xform.IsValid)
                    {
                        xform = Transform.Identity;
                    }
                }
            }
            return(xform);
        }
        /// <summary>
        /// Calculate the transformation
        /// </summary>
        public bool CalculateTransform(RhinoViewport vp, Point3d pt, ref Transform xform)
        {
            bool rc = false;

            if (null != m_curve)
            {
                double t;
                if (m_curve.ClosestPoint(pt, out t))
                {
                    Plane frame;
                    if (m_curve.PerpendicularFrameAt(t, out frame))
                    {
                        xform = Transform.PlaneToPlane(m_plane, frame);
                        rc    = xform.IsValid;
                    }
                }
            }
            return(rc);
        }
Пример #18
0
        public override void DrawViewportWires(IGH_PreviewArgs args)
        {
            args.Viewport.GetFrustumFarPlane(out Plane plane);
            RhinoViewport viewport = args.Viewport;

            ///軸外力の描画用関数*******************************************************************************
            for (int i = 0; i < _arrow.Count; i++)
            {
                if (VisualizeModel.VisualizeModel.Value == 1)
                {
                    var size = VisualizeModel.VisualizeModel.fontsize; Point3d point = _arrow[i].From; plane.Origin = point;
                    viewport.GetWorldToScreenScale(point, out double pixPerUnit); size /= pixPerUnit;
                    Text3d drawText = new Text3d(_text[i] + "kN", plane, size);
                    args.Display.Draw3dText(drawText, Color.MintCream); drawText.Dispose();
                }
                Line arrow = _arrow[i];
                args.Display.DrawLine(arrow, Color.MintCream, 2);
                args.Display.DrawArrowHead(arrow.To, arrow.Direction, Color.MintCream, 25, 0);
            }
        }
Пример #19
0
        private void setClippingPlanes(Plane a, Plane b, File3dm file, string vpName, double w, double h)
        {
            RhinoViewport viewport = new RhinoViewport();

            viewport.SetProjection(DefinedViewportProjection.Top, vpName, false);


            viewport.SetCameraTarget(new Point3d(13817.498, 7162.495, -6025.053), true);
            var vInfo = new ViewInfo(viewport);

            file.AllViews.Add(vInfo);
            //Clip plane A
            file.Objects.AddClippingPlane(a, w, h, new List <Guid> {
                viewport.Id
            }, attClippingplanes);
            //Clip plane B
            file.Objects.AddClippingPlane(b, w, h, new List <Guid> {
                viewport.Id
            }, attClippingplanes);
        }
Пример #20
0
 public bool IsDisplayModeAvailable(RhinoViewport viewport)
 {
     if (viewport == null)
     {
         return(false);
     }
     try
     {
         var mode = viewport.DisplayMode;
         var res  = (mode != null);
         if (mode != null)
         {
             mode.Dispose();
         }
         return(res);
     }
     catch (Exception ex)
     {
         log.temp("DisplayMode is unavailable: " + ex.Message);
         return(false);
     }
 }
Пример #21
0
        public void WritePart3d(PartController partController, Parameters parameters, string filePath)
        {
            foreach (NurbsCurve nurbsCurve in parameters.problemPanels)
            {
                AddCurve(nurbsCurve, "PROBLEM PANELS");
            }
            foreach (BayController bayController in partController.bayControllers)
            {
                foreach (CaveElement caveElement in bayController.caveElements)
                {
                    if (caveElement.supportAssembly != null)
                    {
                        AddSupportAssembly(caveElement.supportAssembly, caveElement.orientation);
                    }
                    AddPanelFrames(caveElement.panelFrames, caveElement.orientation);
                }
            }
            RhinoViewport viewport = new RhinoViewport();

            viewport.SetProjection(DefinedViewportProjection.Perspective, "cavern view", false);
            viewport.ZoomExtents();
            file.AllViews.Add(new ViewInfo(viewport));
            file.Write(filePath, 5);
        }
Пример #22
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            GetObject go = new GetObject();

            go.SetCommandPrompt("Select surfaces, polysurfaces, or meshes");
            go.GeometryFilter  = ObjectType.Surface | ObjectType.PolysrfFilter | ObjectType.Mesh;
            go.GroupSelect     = true;
            go.SubObjectSelect = false;
            go.GetMultiple(1, 0);
            if (go.CommandResult() != Result.Success)
            {
                return(go.CommandResult());
            }

            List <Mesh>        InMeshes      = new List <Mesh>(go.ObjectCount);
            List <RhinoObject> InMeshObjects = new List <RhinoObject>(go.ObjectCount);
            List <RhinoObject> InObjects     = new List <RhinoObject>(go.ObjectCount);

            for (int i = 0; i < go.ObjectCount; i++)
            {
                ObjRef objRef = go.Object(i);
                Mesh   mesh   = objRef.Mesh();
                if (null == mesh)
                {
                    InObjects.Add(objRef.Object());
                }
                else
                {
                    InMeshes.Add(mesh);
                    InMeshObjects.Add(objRef.Object());
                }
            }

            ObjRef[] meshRefs = null;
            if (InObjects.Count > 0)
            {
                meshRefs = RhinoObject.GetRenderMeshes(InObjects, true, false);
                if (null != meshRefs)
                {
                    for (int i = 0; i < meshRefs.Length; i++)
                    {
                        Mesh mesh = meshRefs[i].Mesh();
                        if (null != mesh)
                        {
                            InMeshes.Add(mesh);
                        }
                    }
                }
            }

            RhinoViewport vp = doc.Views.ActiveView.ActiveViewport;

            for (int i = 0; i < InMeshes.Count; i++)
            {
                Polyline[] plines = InMeshes[i].GetOutlines(vp);
                if (null != plines)
                {
                    for (int j = 0; j < plines.Length; j++)
                    {
                        Rhino.Geometry.PolylineCurve plineCrv = new PolylineCurve(plines[j]);
                        plineCrv.RemoveShortSegments(RhinoMath.SqrtEpsilon);
                        if (plineCrv.IsValid)
                        {
                            Guid        objId = doc.Objects.AddCurve(plineCrv);
                            RhinoObject obj   = doc.Objects.Find(objId);
                            if (null != obj)
                            {
                                obj.Select(true);
                            }
                        }
                    }
                }
            }

            for (int i = 0; i < InObjects.Count; i++)
            {
                InObjects[i].Select(false);
            }
            for (int i = 0; i < InMeshObjects.Count; i++)
            {
                InMeshObjects[i].Select(false);
            }

            doc.Views.Redraw();

            return(Result.Success);
        }
Пример #23
0
        /// <summary>
        /// Export an a perspective or orthographic sensor
        /// </summary>
        /// <param name="parent">The parent node in the output XML document</param>
        /// <param name="obj">The RhinoViewport instance to be exported</param>
        /// <returns>true if any content was exported</returns>
        private bool ExportSensor(XmlElement parent, RhinoViewport view)
        {
            bool perspective  = view.IsPerspectiveProjection;
            bool orthographic = view.IsParallelProjection;

            if (!perspective && !orthographic)
            {
                Log("Warning: camera type not supported -- ignoring.");
                return(false);
            }

            double left, right, bottom, top, near, far;

            view.GetFrustum(out left, out right, out bottom, out top, out near, out far);

            XmlElement sensorElement = m_xmlDocument.CreateElement("sensor");

            sensorElement.SetAttribute("type", perspective ? "perspective" : "orthographic");
            Transform toWorld = view.GetTransform(CoordinateSystem.Camera, CoordinateSystem.World);

            toWorld = toWorld * Transform.Mirror(new Plane(new Point3d(0, 0, 0), new Vector3d(0, 0, -1)));
            toWorld = toWorld * Transform.Mirror(new Plane(new Point3d(0, 0, 0), new Vector3d(-1, 0, 0)));
            XmlElement toWorldElement = MakeProperty("toWorld", toWorld);

            if (perspective)
            {
                double focusDistance = view.CameraLocation.DistanceTo(view.CameraTarget);
                double halfDiag, halfVert, halfHoriz;
                view.GetCameraAngle(out halfDiag, out halfVert, out halfHoriz);
                toWorld = toWorld * Transform.Mirror(new Plane(new Point3d(0, 0, 0), new Vector3d(0, 0, -1)));
                sensorElement.AppendChild(MakeProperty("fovAxis", "diagonal"));
                sensorElement.AppendChild(MakeProperty("fov", 2 * halfDiag * 180 / Math.PI));
                sensorElement.AppendChild(MakeProperty("focusDistance", focusDistance));
            }
            else
            {
                XmlElement scaleNode = m_xmlDocument.CreateElement("scale");
                double     scale     = (right - left) / 2;
                scaleNode.SetAttribute("x", ToStringHelper(scale));
                scaleNode.SetAttribute("y", ToStringHelper(scale));
                toWorldElement.PrependChild(scaleNode);
            }

            // Some extra room for nativating using the interactive viewer
            near /= 10; far *= 10;

            sensorElement.AppendChild(toWorldElement);
            sensorElement.AppendChild(MakeProperty("nearClip", near));
            sensorElement.AppendChild(MakeProperty("farClip", far));

            XmlElement filmElement = m_xmlDocument.CreateElement("film");

            filmElement.SetAttribute("type", "hdrfilm");
            filmElement.AppendChild(MakeProperty("width", m_settings.xres));
            filmElement.AppendChild(MakeProperty("height", m_settings.yres));
            sensorElement.AppendChild(filmElement);

            XmlElement samplerElement = m_xmlDocument.CreateElement("sampler");

            samplerElement.SetAttribute("type", "independent");
            samplerElement.AppendChild(MakeProperty("sampleCount", m_settings.samplesPerPixel));
            sensorElement.AppendChild(samplerElement);

            parent.AppendChild(sensorElement);
            return(true);
        }
Пример #24
0
        public void writeSection3d(MeshVoxeliser mvox, List <Curve> curvesToAdd)
        {
            File3dm file = setupFile();

            foreach (Curve c in curvesToAdd)
            {
                file.Objects.AddCurve(c, attBuildingGrid);
            }
            file.Objects.AddText(mvox.sectionNum, attAnnotation);
            foreach (StructuralSpan sp in mvox.structuralSpans)
            {
                foreach (Line xg in sp.xGrid)
                {
                    file.Objects.AddLine(xg, attGrid);
                }
                foreach (Line yg in sp.yGrid)
                {
                    file.Objects.AddLine(yg, attGrid);
                }
                foreach (Line bg in sp.baseGrid)
                {
                    file.Objects.AddLine(bg, attBasegrid);
                }
                foreach (Text3d text in sp.txt)
                {
                    file.Objects.AddText(text, attAnnotation);
                }
                foreach (StructuralBay sb in sp.structuralBays)
                {
                    foreach (List <StructuralCell> sc in sb.voxels)
                    {
                        foreach (StructuralCell c in sc)
                        {
                            if (c.cellType != StructuralCell.CellType.InsideCell && c.cellType != StructuralCell.CellType.Undefined)
                            {
                                attCavepanels.ObjectColor = c.displayColor;
                                if (c.caveFace != null)
                                {
                                    file.Objects.AddMesh(c.caveFace, attCavepanels);
                                }
                                foreach (Curve cl in c.centreLines)
                                {
                                    file.Objects.AddCurve(cl, attCentrelines);
                                }
                                foreach (Curve d in c.diagonals)
                                {
                                    file.Objects.AddCurve(d, attDiagonals);
                                }
                                if (c.GSAmesh != null)
                                {
                                    file.Objects.AddMesh(c.GSAmesh, attGsamesh);
                                }
                            }
                        }
                    }
                }
            }


            RhinoViewport viewport = new RhinoViewport();

            viewport.SetProjection(DefinedViewportProjection.Perspective, "cavern view", false);
            viewport.ZoomExtents();
            file.AllViews.Add(new ViewInfo(viewport));
            string cavepart = mvox.parameters.sectionNum.ToString();

            if (mvox.parameters.sectionNum < 10)
            {
                cavepart = "0" + cavepart;
            }
            file.Write(@"C:\Users\r.hudson\Documents\WORK\projects\passageProjects\caveparts\cavepart" + cavepart + "_3d.3dm", 5);
        }
Пример #25
0
 public MouseSelectHandler(RhinoViewport vp, System.Drawing.Point pt, bool r)
 {
     _viewport = vp;
     _point    = pt;
     _remove   = r;
 }
Пример #26
0
        private static void OnTick(object sender, EventArgs args)
        {
            if (MouseOffset.IsEmpty && !Q && !W && !E && !A && !S && !D)
            {
                return;
            }

            RhinoViewport vp  = RhinoDoc.ActiveDoc.Views.ActiveView.ActiveViewport;
            Point3d       loc = vp.CameraLocation;
            Vector3d      dir = new Vector3d(vp.CameraDirection);
            Vector3d      up  = new Vector3d(vp.CameraUp);

            dir.Unitize();
            up.Unitize();

            // Change direction if mouse moved
            if (!MouseOffset.IsEmpty)
            {
                double angleH = MouseOffset.X / (double)MOUSE_SENSITIVITY * -360.0;
                double angleV = MouseOffset.Y / (double)MOUSE_SENSITIVITY * -360.0;
                MouseOffset = System.Drawing.Point.Empty;

                dir.Rotate(Math.PI * angleH / 180.0, up);
                dir.Rotate(Math.PI * angleV / 180.0, Vector3d.CrossProduct(vp.CameraDirection, up));
                vp.SetCameraDirection(dir, false);
            }

            // Move camera if some key is pressed
            if (Q)
            {
                loc -= Vector3d.ZAxis * speed;
            }

            if (W)
            {
                loc += dir * speed;
            }

            if (E)
            {
                loc += Vector3d.ZAxis * speed;
            }

            if (A)
            {
                loc -= Vector3d.CrossProduct(dir, up) * speed;
            }

            if (S)
            {
                loc -= dir * speed;
            }

            if (D)
            {
                loc += Vector3d.CrossProduct(dir, up) * speed;
            }

            vp.SetCameraLocation(loc, false);
            if (!vp.IsVisible(vp.CameraTarget))
            {
                Point3d newTarget = vp.CameraLocation + vp.CameraDirection * 10000;
                vp.SetCameraTarget(newTarget, false);
            }

            RhinoDoc.ActiveDoc.Views.ActiveView.Redraw();
        }