.NET

Reply
*Expert Elite*
Hallex
Posts: 1,558
Registered: ‎10-08-2008
Message 11 of 13 (262 Views)

Re: Definition of Dynamic Blocks with .NET API

02-25-2012 08:11 AM in reply to: cean_au

I hope bobbydehero will not make a sense on me..

Try this slightly eedited code

{code}

        [CommandMethod("DynamicPropertiesTest","dyntest", CommandFlags.Modal )]
        public static void TestDynProps()
        {

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            Editor ed = doc.Editor;
           
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                BlockReference bref = trans.GetObject(ed.GetEntity("\nSelect dynamic block").ObjectId, OpenMode.ForRead) as BlockReference;
                if (bref == null)
                {
                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Nothing or wrong object selected");
                    return;
                }
               
                if (!bref.IsDynamicBlock)
                {
                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("selected is not dynamick block");
                    return;
                }
                BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForRead));

                BlockTableRecord btrec = trans.GetObject(bref.DynamicBlockTableRecord, OpenMode.ForRead,false) as BlockTableRecord;
                string sDynBlk = btrec.Name;
                if (bt.Has(sDynBlk) == true)
                {
                    BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[sDynBlk], OpenMode.ForRead);
                    if (btr.IsDynamicBlock)
                    {
                        try
                        {
                            DBDictionary extDictDynBT = (DBDictionary)trans.GetObject(btr.ExtensionDictionary, OpenMode.ForRead, false);
                            DBObject acadEnhancedBlk = (DBObject)trans.GetObject(extDictDynBT.GetAt("ACAD_ENHANCEDBLOCK"), OpenMode.ForRead, false);
                            EvalGraph graph = null;
                            ObjectId idGraph = acadEnhancedBlk.ObjectId;
                            if (!idGraph.IsNull)
                                graph = (EvalGraph)trans.GetObject(idGraph, OpenMode.ForRead);

                            if (graph != null)
                            {
                                int[] iNodes = graph.GetAllNodes();
                                foreach (int iNode in iNodes)
                                {
                                    DBObject node = graph.GetNode((uint)iNode, OpenMode.ForRead, trans);
                                    if (node != null)
                                    {
                                        EvalExpr eExpr = node as EvalExpr;
                                        if (eExpr.GetType() == typeof(BlockLookupAction))
                                        {
                                            BlockLookupAction blua = eExpr as BlockLookupAction;
                                            if (blua != null)
                                            {
                                                Array pDataTable;
                                                LookupColumnDescriptorCollection descArray;
                                                blua.GetLookupTable(out pDataTable, out descArray);
                                                if (pDataTable != null)
                                                {
                                                    foreach (object obj in pDataTable)
                                                    {
                                                        ed.WriteMessage("\n\t{0}", obj.ToString());
                                                    }
                                                }
                                            }
                                        }

                                        if (eExpr.GetType() == typeof(BlockLookupParameter))
                                        {
                                            BlockLookupParameter blup = eExpr as BlockLookupParameter;
                                            if (blup != null)
                                            {
                                                BlockParameterPropertyDescriptorCollection props = blup.PropertyDescription;
                                                Array pDataTable;
                                                foreach (BlockParameterPropertyDescriptor prop in props)
                                                {
                                                    ed.WriteMessage("\n\t{0}", prop.PropertyName);
                                                    pDataTable = prop.ValueSetValues;
                                                    if (pDataTable != null)
                                                    {
                                                        foreach (object obj in pDataTable)
                                                        {
                                                            ed.WriteMessage("\n\t{0}", obj.ToString());
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        if (eExpr.GetType() == typeof(BlockFlipParameter))
                                        {
                                            BlockFlipParameter blup = eExpr as BlockFlipParameter;
                                            if (blup != null)
                                            {
                                                BlockParameterPropertyDescriptorCollection props = blup.PropertyDescription;
                                                Array pDataTable;
                                                foreach (BlockParameterPropertyDescriptor prop in props)
                                                {
                                                    ed.WriteMessage("\n\t{0}", prop.PropertyName);
                                                    pDataTable = prop.ValueSetValues;
                                                    if (pDataTable != null)
                                                    {
                                                        foreach (object obj in pDataTable)
                                                        {
                                                            ed.WriteMessage("\n\t{0}", obj.ToString());
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        //---------  add other actions / parameters same way here   -------------------//
                                    }
                                }
                            }
                        }
                        catch (System.Exception ex)
                        {
                            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ex.ToString());
                        }
                    }
                }
            }
        }

{code}

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Valued Contributor
cean_au
Posts: 100
Registered: ‎07-11-2011
Message 12 of 13 (234 Views)

Re: Definition of Dynamic Blocks with .NET API

02-28-2012 01:08 AM in reply to: Hallex

ed.GetEntity("\nSelect dynamic block"

 

this still needs a dyna block first, not create one from scrath by program.

*Expert Elite*
Hallex
Posts: 1,558
Registered: ‎10-08-2008
Message 13 of 13 (228 Views)

Re: Definition of Dynamic Blocks with .NET API

02-28-2012 03:16 AM in reply to: cean_au

Do it yourself

I go out from there

_____________________________________
C6309D9E0751D165D0934D0621DFF27919

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
Welcome to the new Autodesk Community!
If this is your first visit, click here to get started and make the most of the Community. Let us know what you think of the new experience in the Community Feedback Forum.

Need installation help?

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

Ask the Community