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,
Solved! Go to Solution.
Solved by Jeff_M. Go to Solution.
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(); } }