12/03/2014
Создание блока с многострочным определением атрибута
Это пример кода, который создает определение блока с многострочным определением атрибута, а затем создает вставку блока из определения блока.
Код - C#: [Выделить]
- internal static void CreateMyBlock()
- {
- Database db
- = Application.DocumentManager.MdiActiveDocument.Database;
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- BlockTable bt = tr.GetObject(
- db.BlockTableId,
- OpenMode.ForRead
- ) as BlockTable;
- if (bt.Has("МойБлок") == false)
- {
- bt.UpgradeOpen();
- BlockTableRecord btr = new BlockTableRecord();
- btr.Name = "МойБлок";
- btr.Origin = Point3d.Origin;
- bt.Add(btr);
- tr.AddNewlyCreatedDBObject(btr, true);
- // Определение атрибута
- AttributeDefinition attdef
- = new AttributeDefinition
- (
- Point3d.Origin,
- @"Миллисекунды\PСекунды\PМинуты",
- "Time",
- "Время ?",
- db.Textstyle
- );
- attdef.IsMTextAttributeDefinition = true;
- btr.AppendEntity(attdef);
- tr.AddNewlyCreatedDBObject(attdef, true);
- }
- tr.Commit();
- }
- }
- internal static void CreateMyBlockRef()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptPointOptions ppo
- = new PromptPointOptions("\nУкажите точку вставки :");
- PromptPointResult ppr = ed.GetPoint(ppo);
- if (ppr.Status != PromptStatus.OK)
- return;
- Point3d insertionPoint = ppr.Value;
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- BlockTable bt
- = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
- BlockTableRecord blockDef
- = bt["МойБлок"].GetObject(OpenMode.ForRead) as BlockTableRecord;
- BlockTableRecord ms
- = bt[BlockTableRecord.ModelSpace].GetObject
- (OpenMode.ForWrite) as BlockTableRecord;
- BlockReference blockRef
- = new BlockReference(insertionPoint, blockDef.ObjectId);
- ms.AppendEntity(blockRef);
- tr.AddNewlyCreatedDBObject(blockRef, true);
- foreach (ObjectId id in blockDef)
- {
- DBObject obj = id.GetObject(OpenMode.ForRead);
- AttributeDefinition attDef = obj as AttributeDefinition;
- if ((attDef != null) && (!attDef.Constant))
- {
- AttributeReference attRef = new AttributeReference();
- attRef.SetAttributeFromBlock
- (
- attDef,
- blockRef.BlockTransform
- );
- attRef.TextString = String.Format
- (
- @"Миллисекунды : {0}\PСекунды : {1}\PМинуты : {2}",
- DateTime.Now.Millisecond.ToString(),
- DateTime.Now.Second.ToString(),
- DateTime.Now.Minute.ToString()
- );
- blockRef.AttributeCollection.AppendAttribute(attRef);
- tr.AddNewlyCreatedDBObject(attRef, true);
- }
- }
- tr.Commit();
- }
- }
- [CommandMethod("Test")]
- static public void TestMethod()
- {
- CreateMyBlock();
- CreateMyBlockRef();
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=604
Опубликовано 12.03.2014