如何使用C#.NET在AutoCAD中以编程方式拉伸块

时间:2015-03-17 20:59:33

标签: c# .net autocad-plugin

我正在尝试编写一个方法,通过它的块引用在图形中获取块并将其拉伸。到目前为止,我的方法看起来像这样:

 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让对象伸展,但似乎无论如何都没有变换块以使它更宽和/或更长(我正在2D平面上工作)。这样做的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我在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

答案 1 :(得分:0)

你不能"伸展"块参考。 要更改它的大小,您需要1.重新定义块(定义)或2.更改BlockReference ScaleFactors属性。 更改ScaleFactors可能无法为您提供所需的结果。查看它是否符合您的要求的一种方法是创建块,将其插入AutoCAD图形,然后在属性编辑器中使用Scale X,Y和Z值。