乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 132|回复: 7

polyline的 StartPoint 不支持写吗?请教

[复制链接]

7

主题

18

帖子

1

银币

初来乍到

Rank: 1

铜币
46
发表于 2016-1-18 10:55:00 | 显示全部楼层 |阅读模式
....
                    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
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2016-1-18 12:14:00 | 显示全部楼层
setpointat
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2016-1-18 15:03:00 | 显示全部楼层

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

使用道具 举报

7

主题

18

帖子

1

银币

初来乍到

Rank: 1

铜币
46
发表于 2016-1-18 19:45:00 | 显示全部楼层
Public Overridable Property StartPoint As Point3d
是这样的,不是readonlly
回复

使用道具 举报

7

主题

18

帖子

1

银币

初来乍到

Rank: 1

铜币
46
发表于 2016-1-18 19:49:00 | 显示全部楼层

setpointat   没这个方法
回复

使用道具 举报

9

主题

66

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
102
发表于 2016-1-18 23:24:00 | 显示全部楼层
1、因为你的Curve实际上是Polyline,那么你将类型转换为Polyline时,即可调用setpointat方法;
2、Polyline应该override了StartPoint属性。将其set方法改为抛出The method or operation is not implemented异常。StartPoint属性的get还是没问题的。
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2016-1-19 08:18:00 | 显示全部楼层
Dim myCurve As Polyline
....
myCurve.SetPointAt(0,New Point2d(0,0))
回复

使用道具 举报

7

主题

18

帖子

1

银币

初来乍到

Rank: 1

铜币
46
发表于 2016-1-19 21:46:00 | 显示全部楼层
ivde:
谢谢!
测试是这个原因,理解了。
        
        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
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 09:42 , Processed in 0.218750 second(s), 68 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表