如何使用 C#.NET 在 AutoCAD 中以编程方式拉伸块
How to stretch a block programmatically in AutoCAD with C#.NET
我正在尝试编写一种方法,通过它的块引用在图形中获取一个块并将其拉伸。到目前为止,我的方法如下所示:
public static void stretchBlockWithId(ObjectId passedIdOfObjectToUpdate, Distance newXScale, Distance newYScale, Distance newZScale)
{
using (Transaction transaction = database.TransactionManager.StartTransaction())
using (DocumentLock docLock = doc.LockDocument())
{
BlockReference objectToStretch = transaction.GetObject(passedIdOfObjectToUpdate, OpenMode.ForWrite) as BlockReference;
transaction.Commit();
}
}
我通过它的 BlockReference 来拉伸对象,但似乎无论如何都无法转换块以使其更宽 and/or 更长(我在 2D 平面上工作)。执行此操作的最佳方法是什么?
我在 VB.net 中做了类似的事情来创建一个函数来在 x、y、z 方向缩放(多个)对象。这是代码的业务部分,如果需要,请将其转换为 C#
Using myDwg.LockDocument
Using tr = myDwg.TransactionManager.StartTransaction
'Open the database for Write
myBT = myDwg.Database.BlockTableId.GetObject(OpenMode.ForRead)
myBTR = myBT(BlockTableRecord.ModelSpace).GetObject(OpenMode.ForWrite)
Dim myBlockRef As BlockReference = tr.GetObject(MyIdsCol(0), OpenMode.ForWrite)
myBlockRef.ScaleFactors = New Scale3d(CType(Xscale, Double), CType(Yscale, Double), CType(Zscale, Double))
myBlockRef.ExplodeToOwnerSpace()
myBlockRef.Erase(True)
Dim btr As BlockTableRecord = tr.GetObject(myBT(Bloknaam), OpenMode.ForWrite, True, True)
Dim idcoll As ObjectIdCollection = New ObjectIdCollection()
idcoll.Add(btr.ObjectId)
myDwg.Database.Purge(idcoll)
btr.Erase(True)
tr.Commit()
End Using
End Using
您不能"stretch" 块引用。
要更改它的大小,您需要 1. 重新定义块(定义)或 2. 更改 BlockReference ScaleFactors 属性。
更改 ScaleFactors 可能不会给您想要的结果。查看它是否符合您的要求的一种方法是创建块,将其插入 AutoCAD 绘图,然后在 属性 编辑器中使用缩放 X、Y 和 Z 值。
我正在尝试编写一种方法,通过它的块引用在图形中获取一个块并将其拉伸。到目前为止,我的方法如下所示:
public static void stretchBlockWithId(ObjectId passedIdOfObjectToUpdate, Distance newXScale, Distance newYScale, Distance newZScale)
{
using (Transaction transaction = database.TransactionManager.StartTransaction())
using (DocumentLock docLock = doc.LockDocument())
{
BlockReference objectToStretch = transaction.GetObject(passedIdOfObjectToUpdate, OpenMode.ForWrite) as BlockReference;
transaction.Commit();
}
}
我通过它的 BlockReference 来拉伸对象,但似乎无论如何都无法转换块以使其更宽 and/or 更长(我在 2D 平面上工作)。执行此操作的最佳方法是什么?
我在 VB.net 中做了类似的事情来创建一个函数来在 x、y、z 方向缩放(多个)对象。这是代码的业务部分,如果需要,请将其转换为 C#
Using myDwg.LockDocument
Using tr = myDwg.TransactionManager.StartTransaction
'Open the database for Write
myBT = myDwg.Database.BlockTableId.GetObject(OpenMode.ForRead)
myBTR = myBT(BlockTableRecord.ModelSpace).GetObject(OpenMode.ForWrite)
Dim myBlockRef As BlockReference = tr.GetObject(MyIdsCol(0), OpenMode.ForWrite)
myBlockRef.ScaleFactors = New Scale3d(CType(Xscale, Double), CType(Yscale, Double), CType(Zscale, Double))
myBlockRef.ExplodeToOwnerSpace()
myBlockRef.Erase(True)
Dim btr As BlockTableRecord = tr.GetObject(myBT(Bloknaam), OpenMode.ForWrite, True, True)
Dim idcoll As ObjectIdCollection = New ObjectIdCollection()
idcoll.Add(btr.ObjectId)
myDwg.Database.Purge(idcoll)
btr.Erase(True)
tr.Commit()
End Using
End Using
您不能"stretch" 块引用。 要更改它的大小,您需要 1. 重新定义块(定义)或 2. 更改 BlockReference ScaleFactors 属性。 更改 ScaleFactors 可能不会给您想要的结果。查看它是否符合您的要求的一种方法是创建块,将其插入 AutoCAD 绘图,然后在 属性 编辑器中使用缩放 X、Y 和 Z 值。