2

ブロック参照を介して図面内のブロックを取得し、それを伸ばすメソッドを作成しようとしています。これまでのところ、私の方法は次のようになります。

 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平面で作業しています)。これを行う最善の方法は何ですか?

4

2 に答える 2

0

X、Y、Z方向に(複数の)オブジェクトをスケーリングする関数を作成するために、VB.netで同様のことを行いました。これがコードのビジネス部分です。必要に応じて 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
于 2015-04-14T10:01:21.137 に答える
0

ブロック参照を「引き伸ばす」ことはできません。サイズを変更するには、1. ブロック (定義) を再定義するか、2. BlockReference ScaleFactors プロパティを変更する必要があります。ScaleFactors を変更しても、探している結果が得られない場合があります。希望どおりに動作するかどうかを確認する 1 つの方法は、ブロックを作成し、それを AutoCAD 図面に挿入してから、プロパティ エディタで X、Y、および Z のスケール値を調整することです。

于 2015-04-15T17:46:10.027 に答える