zoomify 发表于 2016-1-18 10:55:17

polyline的 StartPoint 不支持写吗?请教

....
                  Using trans As Transaction = db.TransactionManager.StartTransaction()


                        Dim myCurve As Curve
                        myCurve = TryCast(trans.GetObject(resEnt.ObjectId, OpenMode.ForWrite), Curve)

                        myCurve.StartPoint = New Point3d(0, 0, 0)

......


最后一句报错 :The method or operation is not implemented





ivde 发表于 2016-1-18 12:14:50

setpointat   

雪山飞狐_lzh 发表于 2016-1-18 15:03:10

本帖最后由 雪山飞狐_lzh 于 2016-1-18 15:04 编辑

最好多研究下C#的继承、虚函数
StartPoint属性的set在polyline中应该是没有继承,或者直接抛出异常了

zoomify 发表于 2016-1-18 19:45:02

Public Overridable Property StartPoint As Point3d
是这样的,不是readonlly

zoomify 发表于 2016-1-18 19:49:47

ivde 发表于 2016-1-18 12:14 static/image/common/back.gif
setpointat

setpointat   没这个方法

cairunbin 发表于 2016-1-18 23:24:36

1、因为你的Curve实际上是Polyline,那么你将类型转换为Polyline时,即可调用setpointat方法;
2、Polyline应该override了StartPoint属性。将其set方法改为抛出The method or operation is not implemented异常。StartPoint属性的get还是没问题的。

ivde 发表于 2016-1-19 08:18:38

Dim myCurve As Polyline

....

myCurve.SetPointAt(0,New Point2d(0,0))

zoomify 发表于 2016-1-19 21:46:51

ivde:
谢谢!
测试是这个原因,理解了。
      <CommandMethod("ccc")>
      Public Sub ccc()
            Dim myCurve As Curve

            Dim db As Database = HostApplicationServices.WorkingDatabase
            Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
            Dim optEnt As New PromptEntityOptions(vbLf & "选择曲线:")
            Dim resEnt As PromptEntityResult = ed.GetEntity(optEnt)
            If (resEnt.Status = PromptStatus.OK) Then
                Using trans As Transaction = db.TransactionManager.StartTransaction()
                  Dim bt As BlockTable = CType(trans.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)

                  Dim btr As BlockTableRecord = CType(trans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)

                  myCurve = TryCast(trans.GetObject(resEnt.ObjectId, OpenMode.ForWrite), Curve)

                  If Not myCurve Is Nothing And TypeOf myCurve Is Polyline Then


                        CType(myCurve, Polyline).SetPointAt(0, New Point2d(0, 0))

                        trans.Commit()
                  End If


                End Using

            End If

      End Sub
页: [1]
查看完整版本: polyline的 StartPoint 不支持写吗?请教