明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2567|回复: 6

关于DBText文字,熟悉的请进

[复制链接]
发表于 2011-11-22 21:47:34 | 显示全部楼层 |阅读模式
假如我想在一个a(0,0) b(200,0) c(200,50) d(0,50) 为四个顶点的矩形框中插入一个单行文字(内容:大家好才是真的好)。要求是插入后文字在矩形框的最中间,也就是水平和垂直都居中。这个怎么实现?是不是要涉及DBText.HorizontalMode和DBText.VerticalMode两个属性。

还有就是DBText.WidthFactor属性是指的文字的宽度/高度的值吗?我用这个公式 string.legth*DBText.Height*DBText.WidthFactor 来计算文字在图图形中的总宽度结果不正确。
发表于 2011-11-22 22:06:45 | 显示全部楼层
给个思路:先生成任意大小、任意位置的文字,然后计算此文字的外框,再根据外框数据与目标点数据进行平移、旋转、缩放!
发表于 2011-11-22 23:09:46 | 显示全部楼层
给个代码(2012中测试通过)
  1.    <CommandMethod("placetext")> _
  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
 楼主| 发表于 2011-11-23 10:38:20 | 显示全部楼层
本帖最后由 swjtu3428 于 2011-11-23 10:45 编辑
guohq 发表于 2011-11-22 23:09
给个代码(2012中测试通过)

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()是什么作用?
发表于 2011-11-23 12:14:19 | 显示全部楼层
txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
这句话的作用是把文字的左下角平移到矩形的左下角

你要求文字的宽高比是固定的,你能保证你给你的矩形宽高比与文字的宽高比是一样的吗?不一样怎么弄?
 楼主| 发表于 2011-11-23 15:53:50 | 显示全部楼层
guohq 发表于 2011-11-23 12:14
txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
这句话 ...

嗯,我知道你的意思。只是不懂为什么这么设置txt.Height和txt.WidthFactor  说白了就是不明白txt.GeometricExtents.MaxPoint和txt.GeometricExtents.MinPoint是指哪两个点?是实体范围的左下点和右上点??
发表于 2011-11-23 15:57:35 | 显示全部楼层
通俗点讲,就是拿一下最小的矩形能套住那个实体,那么矩形的左下角就是minpoint ,右上角就是maxpoint
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 18:31 , Processed in 0.161594 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表