乐筑天下

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

关于DBText文字,熟悉的请进

[复制链接]

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2011-11-22 21:47:00 | 显示全部楼层 |阅读模式
假如我想在一个a(0,0) b(200,0) c(200,50) d(0,50) 为四个顶点的矩形框中插入一个单行文字(内容:大家好才是真的好)。要求是插入后文字在矩形框的最中间,也就是水平和垂直都居中。这个怎么实现?是不是要涉及DBText.HorizontalMode和DBText.VerticalMode两个属性。
还有就是DBText.WidthFactor属性是指的文字的宽度/高度的值吗?我用这个公式 string.legth*DBText.Height*DBText.WidthFactor 来计算文字在图图形中的总宽度结果不正确。
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2011-11-22 22:06:00 | 显示全部楼层
给个思路:先生成任意大小、任意位置的文字,然后计算此文字的外框,再根据外框数据与目标点数据进行平移、旋转、缩放!
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2011-11-22 23:09:00 | 显示全部楼层
给个代码(2012中测试通过)
  1.     _
  2.     Sub placetext()
  3.         'a(0,0) b(200,0) c(200,50) d(0,50)
  4.         Using Trans As Transaction = DB.TransactionManager.StartTransaction
  5.             Dim txt As New DBText
  6.             txt.TextString = "大家好才是真的好"
  7.             Dim BT As BlockTable = Trans.GetObject(DB.BlockTableId, OpenMode.ForRead)
  8.             Dim BTR As BlockTableRecord = Trans.GetObject(BT(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
  9.             BTR.AppendEntity(txt)
  10.             Trans.AddNewlyCreatedDBObject(txt, True)
  11.             '一定要先改高度
  12.             txt.Height = (50 - 0) * txt.Height / (txt.GeometricExtents.MaxPoint.Y - txt.GeometricExtents.MinPoint.Y)
  13.             txt.WidthFactor = (200 - 0) / (txt.GeometricExtents.MaxPoint.X - txt.GeometricExtents.MinPoint.X)
  14.             txt.UpgradeOpen()
  15.             txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
  16.             Trans.Commit()
  17.         End Using
  18.     End Sub
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2011-11-23 10:38:00 | 显示全部楼层

txt.Height = (50 - 0) * txt.Height / (txt.GeometricExtents.MaxPoint.Y - txt.GeometricExtents.MinPoint.Y)
txt.WidthFactor = (200 - 0) / (txt.GeometricExtents.MaxPoint.X - txt.GeometricExtents.MinPoint.X)为什么这样设置高和宽度比例?这样设置后是文字填充了整个矩形框,我原本的意思是文字高度和宽度比例是固定,比如height=6.5,widthFactor=0.65 然后把文字放在矩形框的中间。
  txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
这句代码中的Entity.TransformBy()是什么作用?
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2011-11-23 12:14:00 | 显示全部楼层
txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
这句话的作用是把文字的左下角平移到矩形的左下角
你要求文字的宽高比是固定的,你能保证你给你的矩形宽高比与文字的宽高比是一样的吗?不一样怎么弄?
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2011-11-23 15:53:00 | 显示全部楼层

嗯,我知道你的意思。只是不懂为什么这么设置txt.Height和txt.WidthFactor  说白了就是不明白txt.GeometricExtents.MaxPoint和txt.GeometricExtents.MinPoint是指哪两个点?是实体范围的左下点和右上点??
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2011-11-23 15:57:00 | 显示全部楼层
通俗点讲,就是拿一下最小的矩形能套住那个实体,那么矩形的左下角就是minpoint ,右上角就是maxpoint
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 21:08 , Processed in 0.349567 second(s), 66 queries .

© 2020-2025 乐筑天下

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