如何绘制水平椭圆(AutoCAD 2014)

时间:2014-04-08 12:39:01

标签: vb.net winforms autocad

目标

在AutoCAD 2014中创建椭圆,可以水平旋转(如下面的红色矩形所示)。

Horizontal Ellipse


尝试

我能够创建椭圆,但我似乎无法找到如何水平旋转它。

CreateEllipse(AcadDoc)

Public Function CreateEllipse(ByRef AcadDoc As Document) As ObjectId
    Dim returnId As ObjectId
    Dim db As Database = AcadDoc.Database
    Dim x As Vector3d = db.Ucsxdir
    Dim y As Vector3d = db.Ucsydir
    Dim normalVec As Vector3d = x.CrossProduct(y)
    Dim axisvec As Vector3d = normalVec.GetNormal()
    Dim CenterPoint As New Point3d(Me.StartPoint.X + 50, Me.StartPoint.Y + 40, 0)
    Dim aEllipse As New Ellipse(CenterPoint, axisvec, New Vector3d(0, 20, 0), 0.5, 0, Math.PI * 2)

    returnId = Utils.CreateAcadObject(AcadDoc, aEllipse)
    aEllipse.Dispose()
    Utils.regenLayers()

    Return returnId
End Function

Utils.CreateAcadObject(AcadDoc,aEllipse)

Public Function CreateAcadObject(ByRef acDoc As Document, ByRef acObj As Object) As ObjectId
    Dim objId As ObjectId
    Dim acCurDb As Database = acDoc.Database 'Get the current database
    Dim acBlkTbl As BlockTable
    Dim acBlkTblRec As BlockTableRecord

    Using lock As DocumentLock = acDoc.LockDocument
        'Start a transaction
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            'Open Model space for write
            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
            acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
            acObj.SetDatabaseDefaults()

            'Add the object to the drawing
            objId = acBlkTblRec.AppendEntity(acObj)
            acTrans.AddNewlyCreatedDBObject(acObj, True)

            'Commit the changes and dispose of the transaction
            acTrans.Commit()
        End Using
    End Using

    Return objId
End Function

这是我得到的结果:

Vertical Ellipse


我会不断尝试解决这个问题,当我最终这样做时,我会发布我的答案。

1 个答案:

答案 0 :(得分:3)

在您创建椭圆的行上:

Dim aEllipse As New Ellipse(CenterPoint, axisvec, New Vector3d(0, 20, 0), 0.5, 0, Math.PI * 2)

您需要更改主轴的坐标,如下所示:

Dim aEllipse As New Ellipse(CenterPoint, axisvec, New Vector3d(20, 0, 0), 0.5, 0, Math.PI * 2)