Community
Civil 3D Customization
Welcome to Autodesk’s AutoCAD Civil 3D Forums. Share your knowledge, ask questions, and explore popular AutoCAD Civil 3D Customization topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Finding out which Part Family the pipe is from

4 REPLIES 4
SOLVED
Reply
Message 1 of 5
joshuamodglin
1028 Views, 4 Replies

Finding out which Part Family the pipe is from

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
4 REPLIES 4
Message 2 of 5
Jeff_M
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
EESignature
Message 3 of 5
joshuamodglin
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
Message 4 of 5
joshuamodglin
in reply to: Jeff_M

Tested, proven, works. 

 

Thanks again Jeff.

Josh Modglin
Advanced Technologies Solutions Logo
Message 5 of 5
ssomick
in reply to: joshuamodglin

I don't suppose there is a way of doing this in vb.net now? (for 2016)

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

Post to forums  

Rail Community


Autodesk Design & Make Report