Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#.NET在AutoCAD中以编程方式拉伸块_C#_.net_Autocad Plugin - Fatal编程技术网

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

如何使用C#.NET在AutoCAD中以编程方式拉伸块,c#,.net,autocad-plugin,C#,.net,Autocad Plugin,我试着写一个方法,通过图形中的块参照来获取块,并将其拉伸。到目前为止,我的方法如下所示: public static void stretchBlockWithId(ObjectId passedIdOfObjectToUpdate, Distance newXScale, Distance newYScale, Distance newZScale) { using (Transaction transaction = database.Transac

我试着写一个方法,通过图形中的块参照来获取块,并将其拉伸。到目前为止,我的方法如下所示:

 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();
            }
        }

我通过它的块参照来拉伸对象,但似乎无论如何都没有变换块,使其更宽和/或更长(我在二维平面上工作)。执行此操作的最佳方法是什么?

我在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。重新定义块(定义)或2。更改BlockReference ScaleFactors属性。
更改ScaleFactors可能无法获得所需的结果。查看它是否能满足您的要求的一种方法是创建块,将其插入到AutoCAD图形中,然后在特性编辑器中使用比例X、Y和Z值。

不应尝试拉伸现有块。相反,您应该找到所有要拉伸的块,并插入尺寸正确的新块来代替旧块。