2017-01-27 19 views
0

私は.NETとAutoCADで2017の開発を始めていると私は次のコードを使用して基本的な四角形を作成しました:.NETから簡単なAutoCad 2017ディメンションを作成する方法は?

[CommandMethod("AddSimpleRectangle")] 
public static void AddSimpleRectangle() 
{ 
    var acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; 
    acDoc.LockDocument(); 
    var acCurDb = acDoc.Database; 
    var pr = acDoc.Editor.GetPoint("\nEnter insertion point: "); 
    if (pr.Status != PromptStatus.OK) 
     return; 

    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) 
    { 
     var acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, 
             OpenMode.ForRead) as BlockTable; 

     var acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], 
             OpenMode.ForWrite) as BlockTableRecord; 

     using (var acPoly = new Polyline()) 
     { 
      acPoly.AddVertexAt(0, new Point2d(pr.Value.X, pr.Value.Y), 0, 10, 10); 
      acPoly.AddVertexAt(1, new Point2d(pr.Value.X + 2000, pr.Value.Y), 0, 10, 10); 
      acPoly.AddVertexAt(2, new Point2d(pr.Value.X + 2000, pr.Value.Y + 500), 0, 10, 10); 
      acPoly.AddVertexAt(3, new Point2d(pr.Value.X, pr.Value.Y + 500), 0, 10, 10); 
      acPoly.Closed = true; 
      acPoly.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(0, 125, 255); 

      acBlkTblRec.AppendEntity(acPoly); 
      acTrans.AddNewlyCreatedDBObject(acPoly, true); 
     } 
     acTrans.Commit(); 
    } 
} 

さて、私は高さを示すように(のは言わせて)一の側に寸法を追加する必要があります。 これは.NETからどのようにすることができますか? ありがとう!

答えて

1

コマンドがSessionコマンドフラグに登録されていないため、現在のドキュメントをロックする必要はありませんが、返されたDocumentLockインスタンスを明示的に処分する必要があります(this threadを参照)。

はここで、ディメンションの作成にあなたの例です:

[CommandMethod("AddSimpleRectangle")] 
    public static void AddSimpleRectangle() 
    { 
     var acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; 
     var acCurDb = acDoc.Database; 
     var pr = acDoc.Editor.GetPoint("\nEnter insertion point: "); 
     if (pr.Status != PromptStatus.OK) 
      return; 
     using (acDoc.LockDocument()) 
     using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) 
     { 
      var acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, 
              OpenMode.ForRead) as BlockTable; 

      var acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], 
              OpenMode.ForWrite) as BlockTableRecord; 

      using (var acPoly = new Polyline()) 
      { 
       acPoly.AddVertexAt(0, new Point2d(pr.Value.X, pr.Value.Y), 0, 10, 10); 
       acPoly.AddVertexAt(1, new Point2d(pr.Value.X + 2000, pr.Value.Y), 0, 10, 10); 
       acPoly.AddVertexAt(2, new Point2d(pr.Value.X + 2000, pr.Value.Y + 500), 0, 10, 10); 
       acPoly.AddVertexAt(3, new Point2d(pr.Value.X, pr.Value.Y + 500), 0, 10, 10); 
       acPoly.Closed = true; 
       acPoly.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(0, 125, 255); 

       acBlkTblRec.AppendEntity(acPoly); 
       acTrans.AddNewlyCreatedDBObject(acPoly, true); 
      } 

      using (var dim = new AlignedDimension(
       pr.Value, 
       pr.Value + new Vector3d(0.0, 500.0, 0.0), 
       pr.Value + new Vector3d(-100.0, 0.0, 0.0), 
       string.Empty, 
       acCurDb.Dimstyle)) 
      { 
       acBlkTblRec.AppendEntity(dim); 
       acTrans.AddNewlyCreatedDBObject(dim, true); 
      } 
      acTrans.Commit(); 
     } 
    } 
+0

どうもありがとう!ただし、ロックが解除されると、コマンドがセッションコマンドフラグとして登録されていないにもかかわらずeLockViolationがスローされます。 –

関連する問題