2016-10-12 3 views
0

Das ProblemAutoCAD Länge von BlockReference abrufen.

im kämpfen, um die Länge von einem BlockReference in AutoCAD zu erhalten. Ich bin irgendwie ein Mathe-Noob bekam die Widh & Höhe, aber ich kann nicht die Länge so weit von einer BlockReference. Gibt es eine Möglichkeit, die Länge einer BlockReference zu erhalten. Ich habe die AutoCad API durchgesehen, aber ohne Erfolg. Vielleicht kann mir jemand die Richtung zeigen.

Was ive Done

public static double GetBlockWidthAndHeight(BlockReference blockReference) { 
      try { 
       var db = HostApplicationServices.WorkingDatabase; 
       var blockname = blockReference.Name; 
       double width = 0; 

       using (var tr = db.TransactionManager.StartTransaction()) { 
        var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; 
        if (!bt.Has(blockname)) { 
         return 0; 
        } 

        var btrec = (BlockTableRecord)tr.GetObject(bt[blockname], OpenMode.ForRead, false); 
        Extents3d? bounds; 
        bounds = btrec.Bounds; 
        if (bounds.HasValue) { 
         var ext = bounds.Value; 
         width = ext.MaxPoint.X - ext.MinPoint.X; 
         double height = ext.MaxPoint.Y - ext.MinPoint.Y; 
        } 
        else { 
         var bref = new BlockReference(Point3d.Origin, bt[blockname]); 
         bounds = bref.Bounds; 
         var ext = bounds.Value; 
         width = ext.MaxPoint.X - ext.MinPoint.X; 
         double height = ext.MaxPoint.Y - ext.MinPoint.Y; 
         bref.Dispose(); 
        } 
        tr.Commit(); 
       } 

       return width; 
      } 
      catch (Exception ex) { 
       Debug.WriteLine(ex.Message); 
      } 
      return 0; 
     } 

Antwort

1

Ist Ihre Blockreferenz ein 3D-Objekt? Wenn ja. Ich habe bemerkt, dass Sie derzeit die Grenzen des Objekts entlang der X-Achse (Breite) und Y-Achse (Höhe) erhalten, aber Sie vermissen die Verwendung der Z-Achse. Wenn die Blockreferenz ein 2D-Objekt ist, funktioniert die beschriebene Methode nicht, da diese Information einfach nicht vorhanden ist.

Sie können auch versuchen, die Eigenschaften der Blockreferenz in der AutoCAD-Eigenschaftenpalette zu betrachten. Je nachdem, wie die Blockreferenz erstellt wurde, sind möglicherweise bereits Werte für ihre Dimensionen vorhanden, auf die Sie einfach über die API zugreifen können.

Hier ist ein Link zu Kean Wamsley Blog einige kurze Beispiele zu geben, wie man die API zu verwenden, direkt den Block Informationen zuzugreifen - http://through-the-interface.typepad.com/through_the_interface/2009/03/accessing-the-properties-of-a-dynamic-autocad-block-using-net.html

+0

Dank für Ihre Zeit. Ich habe eine 2D-Zeichnung. Danke für den Link gibt es einen Weg, um die Länge mit der gleichen Methode zu erhalten? - –

+0

Wieder, als ein 2D-Objekt, können Sie nicht die Grenzen des Objekts, um etwas außerhalb der Grenzen des X und zu bekommen Y-Achse, da diese Information einfach nicht existiert. Ihre beste Wette wird sein, wenn es einen "Länge" -Wert irgendeiner Art gibt, die in den Eigenschaften der Blockreferenz definiert ist. Dies ist jedoch vollständig abhängig. darüber, wie die Blockreferenz erstellt wurde und ob der Ersteller diesen Wert dort angegeben hat oder nicht. –