Beispiel #1
0
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);
            mouseDown = false;

            //使用shift键放大缩小
            if (shiftPressed)
            {
                rectZoomInteractor.ProcessMouseButtonUp(new CanonicalMouseEventArgs(e), GetInteractionContext());
                rectZoomInteractor.Deactivate();
                Invalidate();
            }
            else
            {
                panInteractor.Deactivate();
                // Select entity at mouse location if mouse didn't move
                // and show entity in property grid.

                if (mouseClickLocation == e.Location)
                {
                    Point2D referencePoint = new Point2D(e.X, e.Y);
                    double  distance;
                    IList <RenderedEntityInfo> closestEntities =
                        EntitySelector.GetClosestEntities(
                            model,
                            GraphicsConfig.BlackBackgroundCorrectForBackColor,
                            gdiGraphics3D.To2DTransform,
                            referencePoint,
                            out distance
                            );
                    if (highlightedEntity != null)
                    {
                        IList <IWireframeDrawable> drawables       = graphicsCache.GetDrawables(highlightedEntity);
                        IWireframeGraphicsFactory  graphicsFactory = null;
                        gdiGraphics3D.UpdateDrawables(
                            highlightedEntity,
                            () => {
                            foreach (IWireframeDrawable drawable in drawables)
                            {
                                drawable.Draw(graphicsFactory);
                            }
                        },
                            o => graphicsFactory = o
                            );
                        Invalidate();
                        highlightedEntity = null;
                    }
                    if (closestEntities.Count > 0)
                    {
                        // Chose the last entity as it is drawn last, so will be on top.
                        highlightedEntity = closestEntities[closestEntities.Count - 1];
                        IList <IWireframeDrawable>           drawables = graphicsCache.GetDrawables(highlightedEntity);
                        WireframeGraphicsFactoryColorChanger graphicsFactoryColorChanger = null;
                        gdiGraphics3D.UpdateDrawables(
                            highlightedEntity,
                            () => {
                            foreach (IWireframeDrawable drawable in drawables)
                            {
                                drawable.Draw(graphicsFactoryColorChanger);
                            }
                        },
                            o => graphicsFactoryColorChanger = new WireframeGraphicsFactoryColorChanger(o, ColorChanger)
                            );
                        Invalidate();
                        DxfEntity entity = highlightedEntity.Entity;
                        OnEntitySelected(new EntityEventArgs(entity));
                    }
                }
            }
            currentInteractorDrawable = null;
        }
Beispiel #2
0
        public virtual void ImageControl_OnMouseUp(object sender, MouseEventArgs e)
        {
            base.OnMouseUp(e);
            mouseDown = false;

            // Use shift key for rectangle zoom.
            if (shiftPressed)
            {
                DrawReversibleRectangle(mouseClickLocation, lastMouseLocation);
                Point2D corner1 = new Point2D(
                    Math.Min(mouseClickLocation.X, e.Location.X),
                    Math.Min(mouseClickLocation.Y, e.Location.Y)
                    );
                Point2D corner2 =
                    new Point2D(
                        Math.Max(mouseClickLocation.X, e.Location.X),
                        Math.Max(mouseClickLocation.Y, e.Location.Y)
                        );
                Vector2D delta = corner2 - corner1;
                if (!(MathUtil.AreApproxEqual(delta.X, 0d) || MathUtil.AreApproxEqual(delta.Y, 0d)))
                {
                    Matrix4D oldTo2DTransform = CalculateTo2DTransform1();

                    // Update scaleFactor
                    double scale = Math.Min(ImageControl.ClientSize.Width / delta.X, ImageControl.ClientSize.Height / delta.Y);
                    scaleFactor *= scale;

                    //// Update translation
                    Point3D  screenSpaceCenter         = new Point3D(corner1 + 0.5d * delta, 0d);
                    Point3D  newModelSpaceCenter       = oldTo2DTransform.GetInverse().Transform(new Point3D(corner1 + 0.5d * delta, 0d));
                    Matrix4D intermediateTo2DTransform = CalculateTo2DTransform1();
                    intermediateTo2DTransform.TransformTo2D(newModelSpaceCenter);
                    Point3D intermediateScreenSpaceCenter = intermediateTo2DTransform.Transform(newModelSpaceCenter);
                    translation += (
                        new Point3D(0.5d * ImageControl.ClientSize.Width, 0.5d * ImageControl.ClientSize.Height, 0d) -
                        intermediateScreenSpaceCenter
                        );

                    CalculateTo2DTransform1();
                    ImageControl.Invalidate();
                    shiftPressed = false;
                }
            }
            else
            {
                // Select entity at mouse location if mouse didn't move
                // and show entity in property grid.
                if (mouseClickLocation == e.Location)
                {
                    try
                    {
                        Point2D referencePoint = new Point2D(e.X, e.Y);
                        double  distance;
                        IList <RenderedEntityInfo> closestEntities =
                            EntitySelector.GetClosestEntities(
                                model,
                                GraphicsConfig.BlackBackgroundCorrectForBackColor,
                                gdiGraphics3D.To2DTransform,
                                referencePoint,
                                out distance
                                );
                        if (closestEntities.Count > 0)
                        {
                            DxfEntity entity = closestEntities[0].Entity;
                            OnEntitySelected(new EntityEventArgs(entity));
                        }
                    }
                    catch
                    {
                    }
                }
            }
        }