Я пытаюсь написать метод для изменения существующего блока в чертеже AutoCAD. В этом случае я хочу изменить длину блока, изменив его масштабные коэффициенты. Метод, который я написал, выполнит это, удалив старый блок и создав новый с новыми желаемыми масштабными коэффициентами.Программно получить расположение блока в AutoCAD с его ObjectId
private static ObjectId _adjustCapPlate(ObjectId capPlateID, bool isHorizontal, Distance left = null, Distance right = null)
{
BlockReference capPlate = EntityMethods.GetBlockById(capPlateID); //Getting the block to be replaced
Scale3d oldScales = capPlate.ScaleFactors; //Getting the scales of the old block
Point3d originalLocation = capPlate.Location; // ToDo: Replace capPlate.Location with code that will return the coordinates of the insertion point of the block
EntityMethods.DeleteBlockFromDrawingWithId(capPlate.Id); //Deleting the old block
//Using specified splice plate length if method does not specify something else
if (left == null)
{
left = new Distance(SettingsController.SplicePlateLength/2);
}
if (right == null)
{
right = new Distance(SettingsController.SplicePlateLength);
}
Distance newXScale, newYScale, newZScale;
Point3d newLocation;
if (isHorizontal) //If wall is oriented horizontally
{
newXScale = new Distance(DistanceType.Inch, oldScales.X - right.Inches);
newYScale = new Distance(DistanceType.Inch, oldScales.Y);
newLocation = new Point3d(originalLocation.X + left.Inches, originalLocation.Y, originalLocation.Z);
}
else
{
newXScale = new Distance(DistanceType.Inch, oldScales.X);
newYScale = new Distance(DistanceType.Inch, oldScales.Y - right.Inches);
newLocation = new Point3d(originalLocation.X, originalLocation.Y + left.Inches, originalLocation.Z);
}
newZScale = new Distance(DistanceType.Inch, oldScales.Z);
BlockReference newCapPlate = EntityMethods.InsertBlock("member", newLocation, "0", null, newXScale, newYScale, newZScale);
}
Все, что мне нужно сделать этот метод, чтобы работать, чтобы заменить capPlate.Location с чем-то, что будет получить XYZ существующего блока координат в AutoCAD чертежа. Кажется смешным, что нет очевидного способа получить программные коды блока.
Я не буду принимать ответы, которые меняют мой подход. Это нужно сделать, удалив старый блок и заменив его, вставив новый блок с новыми свойствами, где был старый блок.
Это ['BlockReference.Position'] (http://through-the-interface.typepad.com/through_the_interface/2015/05/jigging-an-autocad-block-with-attributes-using-net-redux .html)? – dbc
Что именно вам нужно - расположение точки вставки, верхняя левая точка описанного прямоугольника вокруг блока или другой точки? –