Đến nội dung


Hình ảnh
- - - - -

1 lệnh command thực hiện được nhiều lần


  • Please log in to reply
1 reply to this topic

#1 hoathuongphuoc

hoathuongphuoc

    biết lệnh erase

  • Members
  • PipPipPip
  • 102 Bài viết
Điểm đánh giá: 9 (bình thường)

Đã gửi 18 November 2013 - 09:18 AM

Chào các bạn,

Mình có đoạn code minh họa như sau:

[CommandMethod("BoundaryTest")]

public static void BoundaryTest()

{

Document doc = Application.DocumentManager.MdiActiveDocument;

Database db=doc.Database;

........

}

Các bạn cho mình hỏi, có cách nào gọi lệnh BoundaryTest 1 lần mà có thể sử dụng được nhiều lần sau trên autocad không. Ví dụ như thay vì mình gọi lệnh BoundaryTest sau đó vẽ được một hình vuông chẳng hạn, sau khi vẽ xong, muốn vẽ lại lần nữa mình phải lại gọi lệnh BoundaryTest và vẽ tiếp. Với cách này mình thấy khá bất tiện. Nếu muốn vẽ nhiều hình vuông như vậy chả lẽ phải đánh nhiều lệnh command. Mình xin cảm ơn các bạn.

 

[CommandMethod("BoundaryTest")]

public static void BoundaryTest()

{

 Document doc = Application.DocumentManager.MdiActiveDocument;

 Database db = doc.Database;

 Editor ed = doc.Editor;

 

 PromptPointOptions ptOptions =

                     new PromptPointOptions("Select point ");

 ptOptions.AllowNone = false;

 PromptPointResult ptResult = ed.GetPoint(ptOptions);

 

 if (ptResult.Status != PromptStatus.OK)

     return;

 

 DBObjectCollection collection =

                ed.TraceBoundary(ptResult.Value, true);

 

 using (Transaction Tx =

           db.TransactionManager.StartTransaction())

 {

     ObjectId ModelSpaceId =

            SymbolUtilityServices.GetBlockModelSpaceId(db);

 

      BlockTableRecord model = Tx.GetObject(ModelSpaceId,

                     OpenMode.ForWrite) as BlockTableRecord;

 

     foreach (DBObject obj in collection)

     {

         Entity ent = obj as Entity;

 

         if (ent != null)

         {

             //make the color as red.

             ent.ColorIndex = 1;

  

             model.AppendEntity(ent);

             Tx.AddNewlyCreatedDBObject(ent, true);

 

         }

     }

 

     Tx.Commit();

 }

}

[CommandMethod("BoundaryTest")]

public static void BoundaryTest()

{

 Document doc = Application.DocumentManager.MdiActiveDocument;

 Database db = doc.Database;

 Editor ed = doc.Editor;

 

 PromptPointOptions ptOptions =

                     new PromptPointOptions("Select point ");

 ptOptions.AllowNone = false;

 PromptPointResult ptResult = ed.GetPoint(ptOptions);

 

 if (ptResult.Status != PromptStatus.OK)

     return;

 

 DBObjectCollection collection =

                ed.TraceBoundary(ptResult.Value, true);

 

 using (Transaction Tx =

           db.TransactionManager.StartTransaction())

 {

     ObjectId ModelSpaceId =

            SymbolUtilityServices.GetBlockModelSpaceId(db);

 

      BlockTableRecord model = Tx.GetObject(ModelSpaceId,

                     OpenMode.ForWrite) as BlockTableRecord;

 

     foreach (DBObject obj in collection)

     {

         Entity ent = obj as Entity;

 

         if (ent != null)

         {

             //make the color as red.

             ent.ColorIndex = 1;

  

             model.AppendEntity(ent);

             Tx.AddNewlyCreatedDBObject(ent, true);

 

         }

     }

 

     Tx.Commit();

 }

}


  • 0

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 18 November 2013 - 10:11 AM

Chào bạn Chủ topic!

Bạn có thể dùng lệnh Multiple -> tiếp đến đánh lệnh bạn thực hiện BoundaryTest


  • 1