swjtu3428 发表于 2011-11-22 21:47:34

关于DBText文字,熟悉的请进

假如我想在一个a(0,0) b(200,0) c(200,50) d(0,50) 为四个顶点的矩形框中插入一个单行文字(内容:大家好才是真的好)。要求是插入后文字在矩形框的最中间,也就是水平和垂直都居中。这个怎么实现?是不是要涉及DBText.HorizontalMode和DBText.VerticalMode两个属性。

还有就是DBText.WidthFactor属性是指的文字的宽度/高度的值吗?我用这个公式 string.legth*DBText.Height*DBText.WidthFactor 来计算文字在图图形中的总宽度结果不正确。

guohq 发表于 2011-11-22 22:06:45

给个思路:先生成任意大小、任意位置的文字,然后计算此文字的外框,再根据外框数据与目标点数据进行平移、旋转、缩放!

guohq 发表于 2011-11-22 23:09:46

给个代码(2012中测试通过)   <CommandMethod("placetext")> _
    Sub placetext()
      'a(0,0) b(200,0) c(200,50) d(0,50)

      Using Trans As Transaction = DB.TransactionManager.StartTransaction
            Dim txt As New DBText
            txt.TextString = "大家好才是真的好"
            Dim BT As BlockTable = Trans.GetObject(DB.BlockTableId, OpenMode.ForRead)
            Dim BTR As BlockTableRecord = Trans.GetObject(BT(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
            BTR.AppendEntity(txt)
            Trans.AddNewlyCreatedDBObject(txt, True)
            '一定要先改高度
            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)

            txt.UpgradeOpen()
            txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
            Trans.Commit()
      End Using
    End Sub

swjtu3428 发表于 2011-11-23 10:38:20

本帖最后由 swjtu3428 于 2011-11-23 10:45 编辑

guohq 发表于 2011-11-22 23:09 static/image/common/back.gif
给个代码(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()是什么作用?

guohq 发表于 2011-11-23 12:14:19

txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
这句话的作用是把文字的左下角平移到矩形的左下角

你要求文字的宽高比是固定的,你能保证你给你的矩形宽高比与文字的宽高比是一样的吗?不一样怎么弄?

swjtu3428 发表于 2011-11-23 15:53:50

guohq 发表于 2011-11-23 12:14 static/image/common/back.gif
txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
这句话 ...

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

guohq 发表于 2011-11-23 15:57:35

通俗点讲,就是拿一下最小的矩形能套住那个实体,那么矩形的左下角就是minpoint ,右上角就是maxpoint
页: [1]
查看完整版本: 关于DBText文字,熟悉的请进