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;
}
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? - –
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. –