关于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 来计算文字在图图形中的总宽度结果不正确。
给个思路:先生成任意大小、任意位置的文字,然后计算此文字的外框,再根据外框数据与目标点数据进行平移、旋转、缩放! 给个代码(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: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()是什么作用?
txt.TransformBy(Matrix3d.Displacement(New Point3d(0, 0, 0) - txt.GeometricExtents.MinPoint))
这句话的作用是把文字的左下角平移到矩形的左下角
你要求文字的宽高比是固定的,你能保证你给你的矩形宽高比与文字的宽高比是一样的吗?不一样怎么弄? 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是指哪两个点?是实体范围的左下点和右上点?? 通俗点讲,就是拿一下最小的矩形能套住那个实体,那么矩形的左下角就是minpoint ,右上角就是maxpoint
页:
[1]