AutoCAD Civil 3D Customization

Reply
Distinguished Contributor
Posts: 147
Registered: ‎08-15-2007
Message 1 of 4 (159 Views)
Accepted Solution

Finding out which Part Family the pipe is from

159 Views, 3 Replies
10-02-2012 02:41 PM

I am updating a system which lists the sizes available for a specific part. What the client is looking for is to only show the sizes that have been defined in the parts list for the family that the part currently is associated with. This is where I am having difficulty. I cannot seem to locate what family the pipe is from.

 

Does anyone know of a .Net (I really would like to avoid COM if at all possible) to know which family the pipe belongs to?

 

Thanks,

Josh Modglin
Advanced Technologies Solutions Logo
*Expert Elite*
Jeff_M
Posts: 3,983
Registered: ‎07-22-2003
Message 2 of 4 (149 Views)

Re: Finding out which Part Family the pipe is from

10-03-2012 12:32 PM in reply to: joshuamodglin

The PartFamily property is not exposed in .NET, as I'm sure you've found. But, you can get the PartFamily via late-binding so no COM references are needed.

        [CommandMethod("GetPartFamilyTest")]
        public void getpartfamily()
        {
                        Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptEntityOptions entOpts = new PromptEntityOptions("Select part: ");
            entOpts.SetRejectMessage("..Not a network part, try again.");
            entOpts.AddAllowedClass(typeof(PipeDb.Part), false);
            PromptEntityResult res = ed.GetEntity(entOpts);
            if (res.Status != PromptStatus.OK)
                return;
            using (Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
            {
                PipeDb.Part part = (PipeDb.Part)tr.GetObject(res.ObjectId, OpenMode.ForRead);
                object acadpart = part.AcadObject;
                object prtfam = acadpart.GetType().InvokeMember("PartFamily", System.Reflection.BindingFlags.GetProperty, null, acadpart, new object[0]);
                ObjectId prtfamId = DBObject.FromAcadObject(prtfam);
                PipeDb.Styles.PartFamily partFam = (PipeDb.Styles.PartFamily)tr.GetObject(prtfamId, OpenMode.ForRead);
                tr.Commit();
            }
        }

 

Jeff_M, also a frequent Swamper
Distinguished Contributor
Posts: 147
Registered: ‎08-15-2007
Message 3 of 4 (145 Views)

Re: Finding out which Part Family the pipe is from

10-03-2012 03:11 PM in reply to: Jeff_M

A concise, simple, and ingenious way to do it. I am running in between projects at the moment and won't probably be able to test the code before Friday but it looks pretty straightforward and will mark it as solution on Friday, once tested.

 

Impressive work Jeff! Thanks for sharing.

 

Josh Modglin
Advanced Technologies Solutions Logo
Distinguished Contributor
Posts: 147
Registered: ‎08-15-2007
Message 4 of 4 (136 Views)

Re: Finding out which Part Family the pipe is from

10-05-2012 01:01 PM in reply to: Jeff_M

Tested, proven, works. 

 

Thanks again Jeff.

Josh Modglin
Advanced Technologies Solutions Logo

You are not logged in.

Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register

Announcements
Are you interested in helping shape the Autodesk Community?
We’re looking at a few different ways to improve the “All Forums” landing page and need your feedback! If interested, please take a few minutes to fill out the following Usability Study. Thank you for your time!

Need installation help?

Start with some of our most frequented solutions to get help installing your software.

Ask the Community


Civil 3D Exchange Apps

Created by the community for the community, Autodesk Exchange Apps for AutoCAD Civil 3D helps you achieve greater speed, accuracy, and automation from concept to manufacturing.

Connect with Civil 3D

Twitter

Facebook

Blogs