1

ユーザーのプレビューとして図面領域にエンティティを表示したいのですが、ユーザーがプログラムを受け入れた場合は、エンティティをデータベースに追加するか、変更を加えます。

私はトランザクションを使用してトランザクションをコミットするために使用されますトランザクションをコミットする前にエンティティを表示させることができれば、エンティティが表示されます

using (Transaction tr = db.TransactionManager.StartTransaction())
{
    BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
    BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
    int i = poly2TxtSetting.currentFormat.IndexFormat.startWith;
    List<ObjectId> ListTextId = new List<ObjectId>();
    List<ObjectId> ListPointId = new List<ObjectId>();
    foreach (var po in Points)
    {
        i += poly2TxtSetting.currentFormat.IndexFormat.step;
        DBText dtext = new DBText();
        dtext.TextString = i.tostring();
        dtext.Position = po;

        dtext.SetDatabaseDefaults();
        DBPoint point = new DBPoint(po);

        btr.AppendEntity(dtext);
        tr.AddNewlyCreatedDBObject(dtext, true);

        btr.AppendEntity(point);
        tr.AddNewlyCreatedDBObject(point, true);

    }
    tr.Commit();
}
4

2 に答える 2

2

モデルをAutoCADモデル空間に表示する場合は、2つのオプションがあります。

1)データベースに挿入します。2)それをTransientManagerに追加します。

必要なのは2番目のオプションだと思います。

一時的なグラフィックを検索します。

以下のコードを確認してください。

Solid3d solid=new Solid(0);
solid.CreateSphere(10);
TransientManager.CurrentTransientManager.AddTransient(solid, TransientDrawingMode.Main, 128, new IntegerCollection());

これにより、半径=10の原点に球が表示されます。

于 2013-02-19T19:43:30.290 に答える
1

グラフィックフラッシュを待つことができます:

 tr.TransactionManager.QueueForGraphicsFlush();

次に、入力を求めるプロンプトを表示して、ユーザーが更新を確認できるようにします。

PromptKeywordOptions pko = new PromptKeywordOptions("\nKeep Changes?");
pko.AllowNone = true;
pko.Keywords.Add("Y");
pko.Keywords.Add("N");
pko.Keywords.Default = "Y";

PromptResult pkr = ed.GetKeywords(pko);
if (pkr.StringResult == "Y") {
    tr.Commit();
} else {
    tr.Abort();
}

このリンクは、この手法を使用したサンプルアプリケーションを提供します。

于 2012-05-11T00:46:03.163 に答える