CadFrank 发表于 2022-7-6 21:51:18

动态块可见性属性

嗨,我想知道如何使用C访问VisibilityState#
 
这是我在谷歌搜索中找到的代码:
 

       static public void DynamicBlockProps()
       {
         Document doc =
             Application.DocumentManager.MdiActiveDocument;
         Database db = doc.Database;
         Editor ed = doc.Editor;

         PromptStringOptions pso =
             new PromptStringOptions(
               "\nEnter dynamic block name or enter to select: "
             );

         pso.AllowSpaces = true;
         PromptResult pr = ed.GetString(pso);

         if (pr.Status != PromptStatus.OK)
               return;

         Transaction tr =
             db.TransactionManager.StartTransaction();
         using (tr)
         {
               BlockReference br = null;

               // If a null string was entered allow entity selection

               if (pr.StringResult == "")
               {
                   // Select a block reference

                   PromptEntityOptions peo =
                     new PromptEntityOptions(
                     "\nSelect dynamic block reference: "
                     );

                   peo.SetRejectMessage("\nEntity is not a block.");
                   peo.AddAllowedClass(typeof(BlockReference), false);

                   PromptEntityResult per =
                     ed.GetEntity(peo);

                   if (per.Status != PromptStatus.OK)
                     return;

                   // Access the selected block reference

                   br =
                     tr.GetObject(
                     per.ObjectId,
                     OpenMode.ForRead
                     ) as BlockReference;
               }
               else
               {
                   // Otherwise we look up the block by name

                   BlockTable bt =
                     tr.GetObject(
                     db.BlockTableId,
                     OpenMode.ForRead) as BlockTable;

                   if (!bt.Has(pr.StringResult))
                   {
                     ed.WriteMessage(
                         "\nBlock \"" + pr.StringResult + "\" does not exist."
                     );
                     return;
                   }

                   // Create a new block reference referring to the block

                   br =
                     new BlockReference(
                     new Point3d(),
                     bt
                     );
               }

               BlockTableRecord btr =
               (BlockTableRecord)tr.GetObject(
                   br.DynamicBlockTableRecord,
                   OpenMode.ForRead
               );

               // Call our function to display the block properties

               DisplayDynBlockProperties(ed, br, btr.Name);

               // Committing is cheaper than aborting

               tr.Commit();
         }
       }

       private static void DisplayDynBlockProperties(
         Editor ed, BlockReference br, string name
       )
       {
         // Only continue is we have a valid dynamic block

         if (br != null && br.IsDynamicBlock)
         {
               ed.WriteMessage(
               "\nDynamic properties for \"{0}\"\n",
               name
               );

               // Get the dynamic block's property collection
               

               DynamicBlockReferencePropertyCollection pc =
               br.DynamicBlockReferencePropertyCollection;

               

               // Loop through, getting the info for each property

               foreach (DynamicBlockReferenceProperty prop in pc)
               {
                   // Start with the property name, type and description
                   List<string> activeVisibility = new List<string>();
                  
                   if(prop.PropertyName == "Choisir")
                   {                        
                     ed.WriteMessage("\nProperty Type Code : " + prop.PropertyTypeCode.ToString());
                     ed.WriteMessage("\nProperty Value : " + prop.Value.ToString());
                     ed.WriteMessage("\nProperty UnitsType : " + prop.UnitsType.ToString());                        
                   }   
               }
         }
       }
 
问题是可见性状态的位置因不同的块而变化。
 
有人有建议帮我吗?
页: [1]
查看完整版本: 动态块可见性属性