Community
Inventor Programming - iLogic, Macros, AddIns & Apprentice
Inventor iLogic, Macros, AddIns & Apprentice Forum. Share your knowledge, ask questions, and explore popular Inventor topics related to programming, creating add-ins, macros, working with the API or creating iLogic tools.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Add LeaderNote to Dimension using the API

6 REPLIES 6
SOLVED
Reply
Message 1 of 7
AlexFielder
591 Views, 6 Replies

Add LeaderNote to Dimension using the API

Hi all,

 

This is a problem I just came upon whilst working on a customer addin. Using c# I am attempting to add a leader note like this:

 

2017-12-18 17_50_17-Autodesk Inventor Professional 2017.png

 

The part I am struggling with is accessing the start/end of the dimension line I wish to attach to.

 

Here is the code I have for this and the line that errors is in red:

 

private static void AddUniqueHoleCountsToDrawingView(Sheet drawingSheet, DrawingView baseView)
        {
            LeaderNotes leaderNotes = drawingSheet.DrawingNotes.LeaderNotes;
            double initialSpacing = 2;
            double spacingLeft = 1;
            double spacingRight = spacingLeft;

            foreach (LinearGeneralDimension item in UniqueYDimensions)
            {
                ObjectCollection leaderPoints = ThisApplication.TransientObjects.CreateObjectCollection();
                Line2d dimLine = item.DimensionLine;

                double[] startPoint = new double[2];
                double[] endPoint = new double[2];

                dimLine.Evaluator.GetEndPoints(ref startPoint, ref endPoint);
                Point2d dimLineStart = TransGeom.CreatePoint2d(startPoint[0], startPoint[1]);
                Point2d dimLineEnd = TransGeom.CreatePoint2d(endPoint[0], endPoint[1]);
                Point2d leaderNoteElbow = null;
                Point2d leaderNotePosn = null;

                if (dimLineStart.Y < dimLineEnd.Y) //left?
                {
                    if (spacingLeft == 1)
                    {
                        leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.Y - initialSpacing, dimLineStart.X);
                        leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.Y, leaderNoteElbow.X + 2); 
                    }
                    else
                    {
                        leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.Y - initialSpacing - spacingLeft, dimLineStart.X);
                        leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.Y, leaderNoteElbow.X + 2);
                        spacingLeft++;
                    }
                    leaderPoints.Add(dimLineStart);
                    leaderPoints.Add(leaderNoteElbow);
                    leaderPoints.Add(leaderNotePosn);
                }
                else
                {
                    if (spacingRight == 1)
                    {
                        leaderNoteElbow = TransGeom.CreatePoint2d(dimLineEnd.Y - initialSpacing, dimLineEnd.X);
                        leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.Y, leaderNoteElbow.X - 2); 
                    }
                    else
                    {
                        leaderNoteElbow = TransGeom.CreatePoint2d(dimLineEnd.Y - initialSpacing - spacingRight, dimLineEnd.X);
                        leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.Y, leaderNoteElbow.X - 2);
                        spacingRight++;
                    }
                    leaderPoints.Add(dimLineEnd);
                    leaderPoints.Add(leaderNoteElbow);
                    leaderPoints.Add(leaderNotePosn);
                }
                LeaderNote newLeader = leaderNotes.Add(leaderPoints, "# Unique Holes");

            }
        }

There don't seem to be ANY other posts that deal with dimensions in this way that I can find, so perhaps someone from Autodesk can help?

 

Thanks,

 

Alex.

6 REPLIES 6
Message 2 of 7
JaneFan
in reply to: AlexFielder

Hello Alex, 

 

Please try to change Line2d to LineSegment. 




Jane Fan
Inventor QA Engineer
Message 3 of 7
AlexFielder
in reply to: JaneFan

Hi @JaneFan

 

Changing the type to LineSegment didn't work, but changing it to dynamic does.

 

My next question is this; the leaders get placed, but two things are wrong with my code above:

 

  1. The leader isn't attached to the geometry so when the view moves, the leadernotes do not.
  2. The text that gets placed ends up at the same position as the arrow point, not as intended below the dimension (as per my screenshot above)

My guess is 1) needs a GeometryIntent.

 

As for 2) I'm not 100% sure the points are in the correct position, but is there something else I'm missing?

 

Thanks,

 

Alex.

Message 4 of 7
AlexFielder
in reply to: AlexFielder

So here's where I am at:

 

private static void AddUniqueHoleCountsToDrawingView(Sheet drawingSheet, DrawingView baseView)
        {
            try
            {
                GeneralDimensions genDims = drawingSheet.DrawingDimensions.GeneralDimensions;
                LeaderNotes leaderNotes = drawingSheet.DrawingNotes.LeaderNotes;
                double initialSpacing = 2;
                double spacingLeft = 0;
                double spacingRight = 0;

                foreach (LinearGeneralDimension item in UniqueYDimensions)
                {
                    ObjectCollection leaderPoints = RadialHoles.m_InventorApp.TransientObjects.CreateObjectCollection();
                    dynamic dimLine = item.DimensionLine;

                    Point2d dimLineStart = (Point2d)dimLine.StartPoint;
                    Point2d dimLineEnd = (Point2d)dimLine.EndPoint;

                    Point2d leaderNoteElbow = null;
                    Point2d leaderNotePosn = null;
                    GeometryIntent leaderIntent = null;
                    Point2d viewCentre = baseView.Center;
                    if (dimLineStart.X < viewCentre.X)
                    {
                        if (spacingLeft == 0)
                        {
                            leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.X, dimLineStart.Y - initialSpacing);
                            leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.X + 2, leaderNoteElbow.Y);
                            spacingLeft += 1;
                        }
                        else
                        {
                            leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.X, dimLineStart.Y - initialSpacing - spacingLeft);
                            leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.X + 2, leaderNoteElbow.Y);
                            spacingLeft += 1;
                        }
                        leaderPoints.Add(leaderNotePosn);
                        leaderPoints.Add(leaderNoteElbow);
                        leaderIntent = drawingSheet.CreateGeometryIntent(item, dimLineStart);
                        leaderPoints.Add(leaderIntent);
                    }
                    else
                    {
                        if (spacingRight == 0)
                        {
                            leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.X, dimLineStart.Y - initialSpacing);
                            leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.X - 2, leaderNoteElbow.Y);
                            spacingRight += 1;
                        }
                        else
                        {
                            leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.X, dimLineStart.Y - initialSpacing - spacingRight);
                            leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.X - 2, leaderNoteElbow.Y);
                            spacingRight += 1;
                        }
                        leaderPoints.Add(leaderNotePosn);
                        leaderPoints.Add(leaderNoteElbow);
                        leaderIntent = drawingSheet.CreateGeometryIntent(item, dimLineStart);
                        leaderPoints.Add(leaderIntent);
                    }
                    AttributeSet dimAttSet = item.AttributeSets[1];
                    Inventor.Attribute numHoles = dimAttSet["UniqueHoleCount"];
                    Inventor.Attribute holeSize = dimAttSet["UniqueHoleSize"];
                    LeaderNote newLeader = leaderNotes.Add(leaderPoints, numHoles.Value + " HOLES ");

                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
            }
        }

This is mostly working, my next question is how can I place the diameter symbol using the API in the line highlighted in Red above?

 

Thanks,

 

Alex.

Message 5 of 7
JaneFan
in reply to: AlexFielder

Hello Alex, 

 

For 1) Yes, GeometryIntent is needed. 

For 2) There should be a setting for LeaderStyle like DimensionTextOrientation in API, as that of in UI. But I didn't find the correct property, will consult with the relative engineers and get back to you later.

ss.png




Jane Fan
Inventor QA Engineer
Message 6 of 7
JaneFan
in reply to: JaneFan

Hi @AlexFielder

 

Sorry that API doesn't support setting the leader text orientation for now as UI does. 




Jane Fan
Inventor QA Engineer
Message 7 of 7
AlexFielder
in reply to: JaneFan

Hi @JaneFan,

 

Thanks for looking this up for me; the text alignment is (for my needs) taken care of by the direction of the nearest nodes in the LeaderNote.

 

As far as the solution is concerned, this is what I ended up with:

 

private static void AddUniqueHoleCountsToDrawingView(Sheet drawingSheet, DrawingView baseView)
        {
            try
            {
                GeneralDimensions genDims = drawingSheet.DrawingDimensions.GeneralDimensions;
                LeaderNotes leaderNotes = drawingSheet.DrawingNotes.LeaderNotes;
                double initialSpacing = 2;
                double spacingLeft = 0;
                double spacingRight = 0;

                foreach (LinearGeneralDimension item in UniqueYDimensions)
                {
                    ObjectCollection leaderPoints = RadialHoles.m_InventorApp.TransientObjects.CreateObjectCollection();
                    dynamic dimLine = item.DimensionLine;

                    Point2d dimLineStart = (Point2d)dimLine.StartPoint;
                    Point2d dimLineEnd = (Point2d)dimLine.EndPoint;

                    Point2d leaderNoteElbow = null;
                    Point2d leaderNotePosn = null;
                    GeometryIntent leaderIntent = null;
                    Point2d viewCentre = baseView.Center;
                    if (dimLineStart.X < viewCentre.X)
                    {
                        if (spacingLeft == 0)
                        {
                            leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.X, dimLineStart.Y - initialSpacing);
                            leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.X + 2, leaderNoteElbow.Y);
                            spacingLeft += 1;
                        }
                        else
                        {
                            leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.X, dimLineStart.Y - initialSpacing - spacingLeft);
                            leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.X + 2, leaderNoteElbow.Y);
                            spacingLeft += 1;
                        }
                        leaderPoints.Add(leaderNotePosn);
                        leaderPoints.Add(leaderNoteElbow);
                        leaderIntent = drawingSheet.CreateGeometryIntent(item, dimLineStart);
                        leaderPoints.Add(leaderIntent);
                    }
                    else
                    {
                        if (spacingRight == 0)
                        {
                            leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.X, dimLineStart.Y - initialSpacing);
                            leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.X - 2, leaderNoteElbow.Y);
                            spacingRight += 1;
                        }
                        else
                        {
                            leaderNoteElbow = TransGeom.CreatePoint2d(dimLineStart.X, dimLineStart.Y - initialSpacing - spacingRight);
                            leaderNotePosn = TransGeom.CreatePoint2d(leaderNoteElbow.X - 2, leaderNoteElbow.Y);
                            spacingRight += 1;
                        }
                        leaderPoints.Add(leaderNotePosn);
                        leaderPoints.Add(leaderNoteElbow);
                        leaderIntent = drawingSheet.CreateGeometryIntent(item, dimLineStart);
                        leaderPoints.Add(leaderIntent);
                    }
                    AttributeSet dimAttSet = item.AttributeSets[1];
                    Inventor.Attribute numHoles = dimAttSet["UniqueHoleCount"];
                    Inventor.Attribute holeSize = dimAttSet["UniqueHoleSize"];
                    //AttributeSet dimAttSet = ;
                    LeaderNote newLeader = leaderNotes.Add(leaderPoints, numHoles.Value + " HOLES Ø" + holeSize.Value);

                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
            }

Thanks again,

 

Alex.

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report