//////////////////////////////////////////////////////////////////////////////////////////////
        // OnMouseDown event, creates and start drawing the line graphics
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        void MouseEvents_OnMouseDown(
            MouseButtonEnum Button,
            ShiftStateEnum ShiftKeys,
            Inventor.Point ModelPosition,
            Point2d ViewPosition,
            Inventor.View View)
        {
            if (Button != MouseButtonEnum.kLeftMouseButton)
            {
                return;
            }

            _lineGraph = _clientGraphicsMng.DrawLine(
                AdnInventorUtilities.ToArray(ModelPosition),
                AdnInventorUtilities.ToArray(ModelPosition),
                null);

            _interactionManager.MouseEvents.MouseMoveEnabled = true;

            _interactionManager.MouseEvents.OnMouseDown -=
                new MouseEventsSink_OnMouseDownEventHandler(MouseEvents_OnMouseDown);

            _interactionManager.MouseEvents.OnMouseMove +=
                new MouseEventsSink_OnMouseMoveEventHandler(MouseEvents_OnMouseMove);
        }
Example #2
0
        private void OnDrawLine(object sender, RoutedEventArgs e)
        {
            LineGraphics lG = new LineGraphics()
            {
                Pen = contrastPen
            };

            price.StartDrawCustomGraphics(lG);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////
        // Description: Displays a LineGraphics between points [0, 0, 0] and [1, 1, 1].
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        static public void LineGraphicsDemo()
        {
            PartDocument doc =
                AdnInventorUtilities.InvApplication.ActiveDocument
                as PartDocument;

            // ClientId, can be any string
            // Typically use instead current add-in GUID
            string clientId = "{Add-in Guid}";

            // Add a new graphics group.
            // This will fail if a group with same name already exists
            ClientGraphics graphics =
                doc.ComponentDefinition.ClientGraphicsCollection.Add(clientId);

            // Add a new graphic node, with Id=1.
            // Id needs to be unique within graphics group
            GraphicsNode node = graphics.AddNode(1);

            // Add new data set
            GraphicsDataSets dataSets =
                doc.GraphicsDataSetsCollection.Add(clientId);

            // Add new coordinate set
            // Id needs to be unique within data set
            GraphicsCoordinateSet coordSet = dataSets.CreateCoordinateSet(1);

            // Fill up coordinates
            // Point1: [0.0, 0.0, 0.0]
            // Point2: [1.0, 1.0, 1.0]
            double[] coords = new double[]
            {
                0.0, 0.0, 0.0,
                1.0, 1.0, 1.0
            };

            coordSet.PutCoordinates(ref coords);

            // Create new GraphicsPrimitive
            LineGraphics lineGraphPrimitive = node.AddLineGraphics();

            lineGraphPrimitive.LineWeight = 5.0;

            // Set coordinates
            lineGraphPrimitive.CoordinateSet = coordSet;

            // Update the current view, so we see the graphics
            doc.Views[1].Update();
        }
Example #4
0
            public DimData(
                Point point1,
                Point point2,
                LineGraphics extLine1,
                LineGraphics extLine2,
                LineGraphics dimLine,
                GraphicsNode node)
            {
                Point1 = point1;
                Point2 = point2;

                ExtLine1 = extLine1;
                ExtLine2 = extLine2;
                DimLine  = dimLine;

                DimNode = node;
            }
Example #5
0
            public DimData(
                Point point1,
                Point point2, 
                LineGraphics extLine1, 
                LineGraphics extLine2, 
                LineGraphics dimLine,
                GraphicsNode node)
            {
                Point1 = point1;
                Point2 = point2;

                ExtLine1 = extLine1;
                ExtLine2 = extLine2;
                DimLine = dimLine;

                DimNode = node;
            }
        //////////////////////////////////////////////////////////////////////////////////////////////
        // Description: Displays a LineGraphics between points [0, 0, 0] and [1, 1, 1]
        //              using AdnClientGraphicsManager
        //////////////////////////////////////////////////////////////////////////////////////////////
        public static void Demo()
        {
            Inventor.Application InvApp = AdnInventorUtilities.InvApplication;

            double[] startPoint = new double[] { 0.0, 0.0, 0.0 };
            double[] endPoint   = new double[] { 1.0, 1.0, 1.0 };

            // Create instance of AdnClientGraphicsManager
            AdnClientGraphicsManager clientGraphicsMng =
                new AdnClientGraphicsManager(InvApp, AdnInventorUtilities.AddInGuid);

            // Set document as current graphics source
            clientGraphicsMng.SetGraphicsSource(InvApp.ActiveDocument);

            // Create LineGraphics primitive
            LineGraphics lineGraph = clientGraphicsMng.DrawLine(startPoint, endPoint);

            lineGraph.LineWeight = 5.0;

            // Update view to see results
            clientGraphicsMng.UpdateView();
        }
        //////////////////////////////////////////////////////////////////////////////////////////////
        // Creates a new GraphicsNode that contains our graphic symbol
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        GraphicsNode DrawSymbol(
            UnitVector normal,
            Point center,
            double radius)
        {
            Circle circle = _Tg.CreateCircle(center, normal, radius);

            double[] up    = new double[] { center.X, center.Y + radius, 0 };
            double[] down  = new double[] { center.X, center.Y - radius, 0 };
            double[] right = new double[] { center.X + radius, center.Y, 0 };
            double[] left  = new double[] { center.X - radius, center.Y, 0 };

            GraphicsNode node = _clientGraphicsMng.CreateNewGraphicsNode();

            node.Selectable = true;

            CurveGraphics curve    = _clientGraphicsMng.DrawCurve(circle, node);
            LineGraphics  lineVert = _clientGraphicsMng.DrawLine(up, down, node);
            LineGraphics  lineHorz = _clientGraphicsMng.DrawLine(left, right, node);

            return(node);
        }
        public LineGraphics DrawLine(
            double[] startPoint,
            double[] endPoint,
            GraphicsNode node)
        {
            try
            {
                AdnGraphics graphicsData = WorkingGraphics;

                if (node == null)
                {
                    node = graphicsData.ClientGraphics.AddNode(
                        graphicsData.GetGraphicNodeFreeId());
                }

                LineGraphics graphic = node.AddLineGraphics();

                if ((startPoint != null) && (endPoint != null))
                {
                    GraphicsCoordinateSet coordSet =
                        graphicsData.GraphicsDataSets.CreateCoordinateSet(
                            graphicsData.GetDataSetFreeId());

                    double[] coordsArray = startPoint.Concat(endPoint).ToArray();

                    coordSet.PutCoordinates(ref coordsArray);

                    graphic.CoordinateSet = coordSet;
                }

                return(graphic);
            }
            catch
            {
                return(null);
            }
        }
Example #9
0
    /// <summary>
    /// Simplifies the mesh provided, then places it back into the parameters.
    /// </summary>
    /// <remarks>
    /// Repeatedly remove the shortest edge in the mesh, reducing the triangle count by two each step.  This is repeated
    /// until the triangle count is low enough or more than 2000 tries have been made.
    /// </remarks>
    /// <param name="verts">The original and final verticies. (3 elements per vertex)</param>
    /// <param name="vertCount">The original and final vertex counts.</param>
    /// <param name="inds">The original and final index buffer.  (3 element per triangle, zero based)</param>
    /// <param name="trisCount">The original and final triangle counts.</param>
    private static void Simplify(ref float[] verts, ref uint vertCount, ref uint[] inds, ref uint trisCount)
    {
        // Setup edge relations, compute min edge lengths...
        List <SimplificationVertex> simplVerts = new List <SimplificationVertex>();

        for (int i = 0; i < vertCount; i++)
        {
            simplVerts.Add(new SimplificationVertex(verts[i * 3], verts[i * 3 + 1], verts[i * 3 + 2]));
        }
        List <SimplificationFace> simplFace = new List <SimplificationFace>();

        for (int i = 0; i < trisCount * 3; i += 3)
        {
            SimplificationFace face = new SimplificationFace();
            face.verts[0] = simplVerts[(int)inds[i]];
            face.verts[1] = simplVerts[(int)inds[i + 1]];
            face.verts[2] = simplVerts[(int)inds[i + 2]];
            foreach (SimplificationVertex v in face.verts)
            {
                v.faces.Add(face);  // Make sure all verticies know their neighbors
            }
            simplFace.Add(face);
        }
        foreach (SimplificationFace face in simplFace)
        {
            face.updateInfo();
        }

        simplFace.Sort();

        #region FANCY_SIMPLIFY_GRAPHICS
#if FANCY_SIMPLIFY_GRAPHICS
        double[] major, minor;
        GraphicsCoordinateSet majorCoordSet, minorCoordSet;

        major = new double[9 * simplFace.Count];
        for (int a = 0; a < simplFace.Count; a++)
        {
            int off = a * 9;
            simplFace[a].tmpHead = off;
            Array.Copy(simplFace[a].verts[0].pos, 0, major, off, 3);
            Array.Copy(simplFace[a].verts[1].pos, 0, major, off + 3, 3);
            Array.Copy(simplFace[a].verts[2].pos, 0, major, off + 6, 3);
        }
        minor = new double[9];
        AssemblyDocument part = ((AssemblyDocument)Exporter.INVENTOR_APPLICATION.ActiveDocument);
        GraphicsDataSets dataSets;
        try
        {
            dataSets = part.GraphicsDataSetsCollection.AddNonTransacting("convexHULL");
        }
        catch
        {
            dataSets = part.GraphicsDataSetsCollection["convexHULL"];
            dataSets.Delete();
            dataSets = part.GraphicsDataSetsCollection.AddNonTransacting("convexHULL");
        }
        ClientGraphics graphics;
        try
        {
            graphics = part.ComponentDefinition.ClientGraphicsCollection.AddNonTransacting("convexHULL");
        }
        catch
        {
            graphics = part.ComponentDefinition.ClientGraphicsCollection["convexHULL"];
            graphics.Delete();
            graphics = part.ComponentDefinition.ClientGraphicsCollection.AddNonTransacting("convexHULL");
        }
        {
            GraphicsNode node = graphics.AddNode(graphics.Count + 1);
            majorCoordSet =
                dataSets.CreateCoordinateSet(dataSets.Count + 1);
            majorCoordSet.PutCoordinates(major);
            LineGraphics primitive = node.AddLineGraphics();
            primitive.BurnThrough = false;
            //Create Coordinate Index Set
            GraphicsIndexSet indexSetCoords =
                dataSets.CreateIndexSet(dataSets.Count + 1);
            for (int i = 0; i < major.Length; i += 3)
            {
                indexSetCoords.Add(indexSetCoords.Count + 1, i + 1);     //from point 1
                indexSetCoords.Add(indexSetCoords.Count + 1, i + 2);     //connect to point 2
                indexSetCoords.Add(indexSetCoords.Count + 1, i + 2);     //from point 2
                indexSetCoords.Add(indexSetCoords.Count + 1, i + 3);     //connect to point 3
                indexSetCoords.Add(indexSetCoords.Count + 1, i + 3);     //from point 3
                indexSetCoords.Add(indexSetCoords.Count + 1, i + 1);     //connect to point 1
            }
            primitive.CoordinateSet      = majorCoordSet;
            primitive.CoordinateIndexSet = indexSetCoords;
        }
        {
            GraphicsNode node = graphics.AddNode(graphics.Count + 1);
            minorCoordSet =
                dataSets.CreateCoordinateSet(dataSets.Count + 1);
            minorCoordSet.PutCoordinates(minor);
            TriangleGraphics primitive = node.AddTriangleGraphics();
            primitive.DepthPriority = 19999;
            //Create Coordinate Index Set
            GraphicsColorSet colorSet = dataSets.CreateColorSet(dataSets.Count + 1);
            for (int i = 0; i < minor.Length; i += 3)
            {
                colorSet.Add(colorSet.Count + 1, 255, 0, 0);
            }
            primitive.CoordinateSet = minorCoordSet;
            primitive.ColorSet      = colorSet;
            primitive.ColorBinding  = ColorBindingEnum.kPerItemColors;
            //primitive.CoordinateIndexSet = indexSetCoords;
        }
        Exporter.INVENTOR_APPLICATION.ActiveView.Update();
#endif
        #endregion

        // Time for shenanigans!  We are going to naively pick the shortest edge and then remove it.  Destroys two faces per loop typically.
        // Give it 2000 tries at most.
        for (int i = 0; i < 2000 && simplFace.Count > CONVEX_HULL_FACET_LIMIT; i++)
        {
            SimplificationFace bFace = simplFace[0];
            // This is the edge to remove
            SimplificationVertex[] remove = new SimplificationVertex[] {
                bFace.verts[bFace.minEdge], bFace.verts[(bFace.minEdge + 1) % bFace.verts.Length]
            };


            #region FANCY_SIMPLIFY_GRAPHICS
#if FANCY_SIMPLIFY_GRAPHICS
            // Highlight
            Array.Copy(bFace.verts[0].pos, 0, minor, 0, 3);
            Array.Copy(bFace.verts[1].pos, 0, minor, 3, 3);
            Array.Copy(bFace.verts[2].pos, 0, minor, 6, 3);
            minorCoordSet.PutCoordinates(minor);
            Exporter.INVENTOR_APPLICATION.ActiveView.Update();
#endif
            #endregion

            // Find the center point of the edge.  One edge -> one vertex
            float[] center = new float[3];
            foreach (SimplificationVertex vert in remove)
            {
                center[0] += vert.pos[0] / 2.0f;
                center[1] += vert.pos[1] / 2.0f;
                center[2] += vert.pos[2] / 2.0f;
                vert.faces.Clear(); // Really, never use vertex again.
            }
            SimplificationVertex newVertex = new SimplificationVertex(center[0], center[1], center[2]);

            // Ineffeciently check each face to see if it shares a vertex with the edge
            for (int k = simplFace.Count - 1; k >= 0; k--)
            {
                int matched             = 0;
                SimplificationFace face = simplFace[k];
                for (int j = 0; j < face.verts.Length; j++)
                {
                    if (face.verts[j] == remove[0] ||
                        face.verts[j] == remove[1])
                    {
                        face.verts[j] = newVertex;

                        #region FANCY_SIMPLIFY_GRAPHICS
#if FANCY_SIMPLIFY_GRAPHICS
                        Array.Copy(face.verts[j].pos, 0, major, face.tmpHead + (3 * j), 3);
                        int index = (face.tmpHead / 3) + j + 1;
                        majorCoordSet.Remove(index);
                        majorCoordSet.Add(index, Exporter.INVENTOR_APPLICATION.TransientGeometry.CreatePoint(face.verts[j].pos[0], face.verts[j].pos[1], face.verts[j].pos[2]));
#endif
                        #endregion

                        if (matched == 0)
                        {
                            newVertex.faces.Add(face);
                        }
                        matched++;
                    }
                }
                // If we share at least two verts with the edge we are dead, since the triangle ends up with two
                // of the same vertex
                if (matched >= 2)
                {
                    // Degenerate
                    simplFace.RemoveAt(k);
                    foreach (SimplificationVertex v in face.verts)
                    {
                        v.faces.Remove(face);
                    }
                }
                else if (matched == 1)
                {
                    // We changed, so update edge lengths
                    face.updateInfo();
                }
            }
            simplVerts.Add(newVertex);
            // Resort by edge length
            simplFace.Sort();
        }

        simplVerts.RemoveAll((vert) => vert.faces.Count <= 0);

        // Rebuild arrays
        vertCount = (uint)simplVerts.Count;
        verts     = new float[vertCount * 3];
        for (int i = 0; i < simplVerts.Count; i++)
        {
            int off = i * 3;
            simplVerts[i].finalIndex = (i);  // Our indices are zero based <3
            Array.Copy(simplVerts[i].pos, 0, verts, off, 3);
        }
        trisCount = (uint)simplFace.Count;
        inds      = new uint[trisCount * 3];
        for (int i = 0; i < simplFace.Count; i++)
        {
            int off = i * 3;
            inds[off]     = (uint)simplFace[i].verts[0].finalIndex;
            inds[off + 1] = (uint)simplFace[i].verts[1].finalIndex;
            inds[off + 2] = (uint)simplFace[i].verts[2].finalIndex;
        }
    }
        //////////////////////////////////////////////////////////////////////////////////////////////
        // Description: Displays a LineGraphics using Index and Color Sets.
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        static public void IndexSetDemo()
        {
            PartDocument doc =
                AdnInventorUtilities.InvApplication.ActiveDocument
                as PartDocument;

            string clientId = "{Add-in Guid}";

            ClientGraphics   graphics = null;
            GraphicsDataSets dataSets = null;

            // Add some error handling in case
            // graphics collection and data already exist
            try
            {
                graphics = doc.ComponentDefinition.ClientGraphicsCollection[clientId];
                dataSets = doc.GraphicsDataSetsCollection[clientId];
            }
            catch
            {
                graphics = doc.ComponentDefinition.ClientGraphicsCollection.Add(clientId);
                dataSets = doc.GraphicsDataSetsCollection.Add(clientId);
            }

            // Add new node and coord set
            // Id generation by increment - bad because previous nodes/sets
            // may have been deleted previously, hence making count invalid

            GraphicsNode node =
                graphics.AddNode(graphics.Count + 1);

            GraphicsCoordinateSet coordSet =
                dataSets.CreateCoordinateSet(dataSets.Count + 1);

            double[] coords = new double[]
            {
                0.0, 0.0, 0.0, //point 1
                1.0, 1.0, 0.0, //point 2
                0.0, 1.0, 0.0, //point 3
                1.0, 0.0, 0.0  //point 4
            };

            coordSet.PutCoordinates(ref coords);

            LineGraphics lineGraphPrimitive = node.AddLineGraphics();

            lineGraphPrimitive.LineWeight = 5.0;

            //Create Coordinate Index Set
            GraphicsIndexSet indexSetCoords = dataSets.CreateIndexSet(dataSets.Count + 1);

            indexSetCoords.Add(1, 1); //from point 1
            indexSetCoords.Add(2, 3); //connect to point 3
            indexSetCoords.Add(3, 3); //from point 3
            indexSetCoords.Add(4, 2); //connect to point 2
            indexSetCoords.Add(5, 2); //from point 2
            indexSetCoords.Add(6, 4); //connect to point 4

            lineGraphPrimitive.CoordinateSet      = coordSet;
            lineGraphPrimitive.CoordinateIndexSet = indexSetCoords;


            //Create the color set with two colors
            GraphicsColorSet colorSet = dataSets.CreateColorSet(dataSets.Count + 1);

            colorSet.Add(1, 221, 0, 0);
            colorSet.Add(2, 255, 170, 0);
            colorSet.Add(3, 119, 187, 17);

            //Create the index set for color
            GraphicsIndexSet indexSetColors = dataSets.CreateIndexSet(dataSets.Count + 1);

            indexSetColors.Add(1, 3); //line 1 uses color 3
            indexSetColors.Add(2, 1); //line 2 uses color 1
            indexSetColors.Add(3, 2); //line 3 uses color 2

            lineGraphPrimitive.ColorSet      = colorSet;
            lineGraphPrimitive.ColorIndexSet = indexSetColors;

            lineGraphPrimitive.ColorBinding = ColorBindingEnum.kPerItemColors;

            doc.Views[1].Update();
        }
Example #11
0
        //////////////////////////////////////////////////////////////////////////////////////////////
        // Draws dimension graphics
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        DimData DrawDimension(Point point1, Point point2, Point dimText, Vector normal)
        {
            // Compute extension points
            Vector xAxis = point1.VectorTo(point2);

            Vector upVector = normal.CrossProduct(xAxis);

            upVector.Normalize();

            Plane plane = _Tg.CreatePlane(point1, normal);

            Point dimTextProj = AdnInventorUtilities.ProjectOnPlane(dimText, plane);

            double dotP1 = point1.VectorTo(dimTextProj).DotProduct(upVector);
            double dotP2 = point2.VectorTo(dimTextProj).DotProduct(upVector);

            Point extP1 = _Tg.CreatePoint(
                point1.X + upVector.X * dotP1,
                point1.Y + upVector.Y * dotP1,
                point1.Z + upVector.Z * dotP1);

            Point extP2 = _Tg.CreatePoint(
                point2.X + upVector.X * dotP2,
                point2.Y + upVector.Y * dotP2,
                point2.Z + upVector.Z * dotP2);

            double dimValue = extP1.DistanceTo(extP2);


            GraphicsNode node = _clientGraphicsMng.CreateNewGraphicsNode();

            LineGraphics extLine1 = _clientGraphicsMng.DrawLine(
                AdnInventorUtilities.ToArray(point1),
                AdnInventorUtilities.ToArray(extP1),
                node);

            LineGraphics extLine2 = _clientGraphicsMng.DrawLine(
                AdnInventorUtilities.ToArray(point2),
                AdnInventorUtilities.ToArray(extP2),
                node);

            LineGraphics dimLine = _clientGraphicsMng.DrawLine(
                AdnInventorUtilities.ToArray(extP1),
                AdnInventorUtilities.ToArray(extP2),
                node);

            extLine1.LineType = LineTypeEnum.kDashedLineType;
            extLine2.LineType = LineTypeEnum.kDashedLineType;

            UnitVector v = extP1.VectorTo(extP2).AsUnitVector();

            double length = 20.0;
            double radius = 7.0;

            Point bottom1 = _Tg.CreatePoint(
                extP1.X + length * v.X,
                extP1.Y + length * v.Y,
                extP1.Z + length * v.Z);

            Point bottom2 = _Tg.CreatePoint(
                extP2.X - length * v.X,
                extP2.Y - length * v.Y,
                extP2.Z - length * v.Z);

            SurfaceBody cone1 = _TBrep.CreateSolidCylinderCone(
                bottom1, extP1,
                radius, radius, 0.0, null);

            SurfaceBody cone2 = _TBrep.CreateSolidCylinderCone(
                bottom2, extP2,
                radius, radius, 0.0, null);

            GraphicsNode dimNode = _clientGraphicsMng.CreateNewGraphicsNode();

            SurfaceGraphics arrow1 = _clientGraphicsMng.DrawSurface(cone1, dimNode);
            SurfaceGraphics arrow2 = _clientGraphicsMng.DrawSurface(cone2, dimNode);

            arrow1.SetTransformBehavior(extP1,
                                        DisplayTransformBehaviorEnum.kPixelScaling,
                                        1.0);

            arrow2.SetTransformBehavior(extP2,
                                        DisplayTransformBehaviorEnum.kPixelScaling,
                                        1.0);


            TextGraphics text = _clientGraphicsMng.DrawText(
                AdnInventorUtilities.GetStringFromAPILength(dimValue),
                false,
                dimNode);

            text.Font     = "Arial";
            text.Bold     = false;
            text.Italic   = false;
            text.FontSize = 20;
            text.PutTextColor(221, 0, 0);
            text.VerticalAlignment   = VerticalTextAlignmentEnum.kAlignTextMiddle;
            text.HorizontalAlignment = HorizontalTextAlignmentEnum.kAlignTextLeft;

            Point txtPos = _Tg.CreatePoint(
                (extP1.X + extP2.X) * 0.5,
                (extP1.Y + extP2.Y) * 0.5,
                (extP1.Z + extP2.Z) * 0.5);

            text.Anchor = txtPos;

            text.SetTransformBehavior(txtPos,
                                      DisplayTransformBehaviorEnum.kFrontFacingAndPixelScaling,
                                      1.0);

            node.Selectable    = true;
            dimNode.Selectable = true;

            return(new DimData(point1, point2, extLine1, extLine2, dimLine, dimNode));
        }
Example #12
0
        private void m_MouseEvents_OnMouseUp(Inventor.MouseButtonEnum Button, Inventor.ShiftStateEnum ShiftKeys, Inventor.Point ModelPosition, Inventor.Point2d ViewPosition, Inventor.View View)
        {
            //if the interaction event is MyScreenshot, create the image
            if (m_InteractionEvents.Name == "MyScreenshot")
            {
                m_InteractionEvents.InteractionGraphics.PreviewClientGraphics.Delete();
                m_inventorApplication.ActiveView.Update();

                if (oGiLineStripG != null)
                {
                    oGiLineStripG.Delete();
                    oGiLineStripG = null;
                }

                if (oGiLineG != null)
                {
                    oGiLineG.Delete();
                    oGiLineG = null;
                }

                //stop interaction event
                m_InteractionEvents.SetCursor(CursorTypeEnum.kCursorBuiltInArrow);
                m_flagMouseDown = false;
                if (m_MouseEvents != null)
                {
                    m_MouseEvents.OnMouseDown -= m_MouseEvents_OnMouseDown;
                    m_MouseEvents.OnMouseMove -= m_MouseEvents_OnMouseMove;
                    m_MouseEvents.OnMouseUp   -= m_MouseEvents_OnMouseUp;
                    m_MouseEvents              = null;
                }
                m_InteractionEvents.Stop();
                m_InteractionEvents = null;

                //prepare size of the image region, in pixel

                oSize = new Size(Convert.ToInt32(Math.Abs(ViewPosition.X - m_MouseStartViewPt.X)), Convert.ToInt32(Math.Abs(ViewPosition.Y - m_MouseStartViewPt.Y)));

                if (ViewPosition.X > m_MouseStartViewPt.X & ViewPosition.Y > m_MouseStartViewPt.Y)
                {
                    oCornerPt = m_MouseStartViewPt;
                }
                else if (ViewPosition.X > m_MouseStartViewPt.X & ViewPosition.Y < m_MouseStartViewPt.Y)
                {
                    oCornerPt.X = m_MouseStartViewPt.X;
                    oCornerPt.Y = ViewPosition.Y;
                }
                else if (ViewPosition.X <m_MouseStartViewPt.X& ViewPosition.Y> m_MouseStartViewPt.Y)
                {
                    oCornerPt.X = ViewPosition.X;
                    oCornerPt.Y = m_MouseStartViewPt.Y;
                }
                else
                {
                    oCornerPt = ViewPosition;
                }

                //take the view position in screen, calculate
                //the real pixel data of the corners

                oCornerPt.X = (int)View.Left + oCornerPt.X;
                oCornerPt.Y = (int)View.Top + oCornerPt.Y;
            }
        }
Example #13
0
        private void m_MouseEvents_OnMouseDown(Inventor.MouseButtonEnum Button, Inventor.ShiftStateEnum ShiftKeys, Inventor.Point ModelPosition, Inventor.Point2d ViewPosition, Inventor.View View)
        {
            //if the interaction event is MyScreenshot,
            //then get the view position and model position

            if (m_InteractionEvents.Name == "MyScreenshot")
            {
                m_MouseStartViewPt = ViewPosition;
                m_StartModelPt     = ModelPosition;
                m_flagMouseDown    = true;

                //clean the last graphics
                m_InteractionEvents.InteractionGraphics.PreviewClientGraphics.Delete();
                m_inventorApplication.ActiveView.Update();

                //gi node
                oGiNode   = m_InteractionEvents.InteractionGraphics.PreviewClientGraphics.AddNode(1);
                oCoordSet = m_InteractionEvents.InteractionGraphics.GraphicsDataSets.CreateCoordinateSet(1);

                //color set
                oColorSet = m_InteractionEvents.InteractionGraphics.GraphicsDataSets.CreateColorSet(1);
                oColorSet.Add(1, 255, 0, 0);

                TransientGeometry tg    = m_inventorApplication.TransientGeometry;
                Inventor.Point    tempP = tg.CreatePoint(ViewPosition.X, ViewPosition.Y, 0);

                oCoordSet.Add(1, tempP);
                oCoordSet.Add(2, tempP);
                oCoordSet.Add(3, tempP);
                oCoordSet.Add(4, tempP);
                oCoordSet.Add(5, tempP);

                try
                {
                    if (oGiLineStripG != null)
                    {
                        oGiLineStripG.Delete();
                        oGiLineStripG = null;
                    }
                    oGiLineStripG = oGiNode.AddLineStripGraphics();
                    oGiLineStripG.CoordinateSet = oCoordSet;
                    oGiLineStripG.ColorSet      = oColorSet;
                    oGiLineStripG.BurnThrough   = true;
                }
                catch (Exception ex)
                {
                    //a problem in Inventor 2009( R13 ) with
                    //LineStripGraphics.BurnThrough. Use LineGraphics as workaround

                    if (oGiLineG != null)
                    {
                        oGiLineG.Delete();
                        oGiLineG = null;
                    }

                    oGiLineG = oGiNode.AddLineGraphics();
                    oGiLineG.CoordinateSet = oCoordSet;
                    oGiLineG.ColorSet      = oColorSet;
                    oGiLineG.BurnThrough   = true;
                }
            }
        }
        //////////////////////////////////////////////////////////////////////////////////////////////
        // OnMouseDown event, creates and start drawing the line graphics
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        void MouseEvents_OnMouseDown(
            MouseButtonEnum Button, 
            ShiftStateEnum ShiftKeys, 
            Inventor.Point ModelPosition, 
            Point2d ViewPosition, 
            Inventor.View View)
        {
            if (Button != MouseButtonEnum.kLeftMouseButton)
                return;

            _lineGraph = _clientGraphicsMng.DrawLine(
                AdnInventorUtilities.ToArray(ModelPosition),
                AdnInventorUtilities.ToArray(ModelPosition),
                null);

            _interactionManager.MouseEvents.MouseMoveEnabled = true;

            _interactionManager.MouseEvents.OnMouseDown -=
                new MouseEventsSink_OnMouseDownEventHandler(MouseEvents_OnMouseDown);

            _interactionManager.MouseEvents.OnMouseMove +=
                new MouseEventsSink_OnMouseMoveEventHandler(MouseEvents_OnMouseMove);
        }