乐筑天下

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

获取文字角点坐标有没有更简洁一点的方法

[复制链接]

8

主题

26

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2011-2-10 22:09:00 | 显示全部楼层 |阅读模式
有没有比以下代码更简洁一点的方法,或者以下代码如何再简练一点?
  1.     '''
  2.     ''' 获取单行文字或多行文字的外包矩形角点坐标
  3.     ''' 0为左下角点,1为右下角点,2为右上角点,3为左上角点
  4.     '''
  5.     ''' 单行文字或多行文字的ID
  6.     '''
  7.     '''
  8.     Public Shared Function GetTextBounds(ByVal id As ObjectId) As Point3dCollection
  9.         Dim tmpPoint As New Point3dCollection
  10.         Using trans As Transaction = db.TransactionManager.StartTransaction
  11.             Dim ent As Entity = trans.GetObject(id, OpenMode.ForWrite)
  12.             Dim Angle As Double
  13.             If TypeOf ent Is DBText Then
  14.                 Dim tmpText As DBText = ent
  15.                 Angle = tmpText.Rotation
  16.                 tmpText.Rotation = 0
  17.                 With tmpPoint
  18.                     .Add(tmpText.GeometricExtents.MinPoint)
  19.                     .Add(New Point3d(tmpText.GeometricExtents.MaxPoint.X, tmpText.GeometricExtents.MinPoint.Y, tmpText.GeometricExtents.MinPoint.Z))
  20.                     .Add(tmpText.GeometricExtents.MaxPoint)
  21.                     .Add(New Point3d(tmpText.GeometricExtents.MinPoint.X, tmpText.GeometricExtents.MaxPoint.Y, tmpText.GeometricExtents.MinPoint.Z))
  22.                 End With
  23.                 tmpText.Rotation = Angle
  24.                 For i As Integer = 0 To tmpPoint.Count - 1
  25.                     tmpPoint.Item(i) = tmpPoint.Item(i).RotateBy(Angle, Vector3d.ZAxis, tmpText.Position)
  26.                 Next
  27.             ElseIf TypeOf ent Is MText Then
  28.                 Dim tmpText As MText = ent
  29.                 Angle = tmpText.Rotation
  30.                 tmpText.Rotation = 0
  31.                 With tmpPoint
  32.                     .Add(tmpText.GeometricExtents.MinPoint)
  33.                     .Add(New Point3d(tmpText.GeometricExtents.MaxPoint.X, tmpText.GeometricExtents.MinPoint.Y, tmpText.GeometricExtents.MinPoint.Z))
  34.                     .Add(tmpText.GeometricExtents.MaxPoint)
  35.                     .Add(New Point3d(tmpText.GeometricExtents.MinPoint.X, tmpText.GeometricExtents.MaxPoint.Y, tmpText.GeometricExtents.MinPoint.Z))
  36.                 End With
  37.                 tmpText.Rotation = Angle
  38.                 For i As Integer = 0 To tmpPoint.Count - 1
  39.                     tmpPoint.Item(i) = tmpPoint.Item(i).RotateBy(Angle, Vector3d.ZAxis, tmpText.Location)
  40.                 Next
  41.             End If
  42.             trans.Commit()
  43.         End Using
  44.         Return tmpPoint
  45.     End Function

回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2011-2-10 22:42:00 | 显示全部楼层
tmpText.GeometricExtents就是范围了
搞的这么麻烦
回复

使用道具 举报

8

主题

26

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2011-2-10 23:06:00 | 显示全部楼层

因为考虑了文字的旋转角度,所以我也感觉烦,用tmpText.GeometricExtents得出来的范围好象不行

24jhdtntj3j.jpg

24jhdtntj3j.jpg


回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2011-2-10 23:30:00 | 显示全部楼层

哦,简单的方法?
你的是把文本角度置0,再获取GeometricExtents
应该有直接计算的方法
回复

使用道具 举报

8

主题

26

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2011-2-10 23:56:00 | 显示全部楼层
在Lisp里是先根据文字对象旋转坐标系,然后获取角点坐标,接着画矩形框,再还原坐标系。但在.net里不知如何实现?
回复

使用道具 举报

8

主题

17

帖子

2

银币

初来乍到

Rank: 1

铜币
49
发表于 2011-2-11 09:17:00 | 显示全部楼层
学习,GeometricExtents这个属性求出的好像不行啊?就是在旋转角度是0的情况下求出的还是有问题,不知道是我设置有问题还是一个bug?
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2011-2-11 11:07:00 | 显示全部楼层

q15dfcdadas.JPG

q15dfcdadas.JPG


直接解方程
回复

使用道具 举报

8

主题

26

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2011-2-11 16:57:00 | 显示全部楼层
因X1和Y1为未知,当α为45,135,225,315度时有无穷多个解,当α为其它角度时有唯一的解。
X1不等于文字高度,因为“f,j"这些字母还要考虑上升和下沉的距离。
回复

使用道具 举报

5

主题

15

帖子

2

银币

初来乍到

Rank: 1

铜币
35
发表于 2011-2-22 10:27:00 | 显示全部楼层
将dbtext的角度设置为0,然后获取矩形框,然后将矩形框4个点,再使用其文字角度计算(以文字的基点)旋转计算其旋转后的坐标。
回复

使用道具 举报

8

主题

26

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2011-3-3 08:54:00 | 显示全部楼层
9楼的朋友,我上面的程序就是按这个思路的。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 12:54 , Processed in 0.636180 second(s), 75 queries .

© 2020-2025 乐筑天下

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