0

私はトランザクションクラスを使用して線を引いています

    Public Sub CreateLine()
    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
    Dim acCurDb As Database = acDoc.Database
    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
        Dim acBlkTbl As BlockTable
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
        Dim acBlkTblRec As BlockTableRecord
        acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                        OpenMode.ForWrite)
       procedure(acTrans, acBlkTblRec, 11, 3, 0, 5, 5, 0)
       acTrans.Commit()
    End Using
  End Sub
Private Sub procedure(ByVal var1 As Transaction, ByVal var2 As BlockTableRecord, ByVal                       x As Double, ByVal y As Double, ByVal z As Double, ByVal x1 As Double, ByVal y1 As Double, ByVal z1 As Double)
    Dim ac As Line = New Line(New Point3d(x, y, z), _
                                      New Point3d(x1, y1, z1))
    var2.AppendEntity(ac)
    var1.AddNewlyCreatedDBObject(ac, True)

End Sub

私の仕事は、トランザクションを使用せずに行を作成することです...

4

2 に答える 2

1

ActiveX API を使用できます。

<CommandMethod("DRAWLINE")> _
Public Sub DrawLine()
    Dim acadApp As Object
    acadApp = Application.AcadApplication
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double
    startPoint(0) = 1.0 : startPoint(1) = 1.0 : startPoint(2) = 0.0
    endPoint(0) = 5.0 : endPoint(1) = 5.0 : endPoint(2) = 0.0
    acadApp.ActiveDocument.ModelSpace.AddLine(startPoint, endPoint)
End Sub
于 2013-04-26T05:40:20.493 に答える
0

Autodesk.Autocad.InteropおよびAutodesk.Autocad.Interop.Common参照と名前空間を使用します。

目的のドキュメントにアクセスしますas AcadDocument

Dim Doc as AcadDocument 'and set it to the document you want
Doc.ModelSpace.AddLine(...parameters...)

使用している Autocad のバージョンに応じて、アプリケーションにアクセスできますas AcadApplication。(そして、取得した acadapplication インスタンスからDocuments)

于 2013-04-26T19:21:35.873 に答える