badboy518 发表于 2011-11-26 13:05:42

[已解决]还是关于DBtext的问题,不解

本帖最后由 badboy518 于 2011-11-26 13:13 编辑

代码如下:

Transaction tr = Tools.Database.TransactionManager.StartTransaction();
    Polyline curLine = tr.GetObject(polyid, OpenMode.ForRead) as Polyline;
   
    DBText mText = new DBText();
    mText.SetDatabaseDefaults();
    mText.TextString = "面积:"+Math.Round(curLine.Area, 3).ToString();
    mText.Position = curLine.GeometricExtents.MaxPoint;
    ObjectId mid = Tools.AddToCurrentSpace(mText);
    mText = tr.GetObject(mid, OpenMode.ForWrite) as DBText;
    mText.VerticalMode = TextVerticalMode.TextVerticalMid;//问题就出在这两句
    mText.HorizontalMode = TextHorizontalMode.TextCenter;
    mText.Height = 5.0;
   
    mText.Position = curLine.GeometricExtents.MaxPoint;
   
   
    tr.Commit();


当指定text的对齐方式,加入数据库后,文字的position总是在原点,试了好多办法都行不通。
请高手指点一下
自己找到解决办法了。。晕,刚发的贴。

mText.VerticalMode = TextVerticalMode.TextVerticalMid;
      mText.HorizontalMode = TextHorizontalMode.TextCenter;
      mText.AlignmentPoint = curLine.GeometricExtents.MaxPoint;//这句是关键


badboy518 发表于 2011-11-26 13:19:36

经多次测试,得出如下结论,供大家参考:
DBText对象当设置VerticalMode   HorizontalMode后,文本的Position属性已无用。重新赋值也没有用,此时需指定AlignmentPoint来决定文本的位置!

河伯 发表于 2011-11-26 22:50:23

你的理解有问题。

If vertical mode is set to any value other than .TextBase, then the text object's alignment point is used to determine the text's position. The position point is recalculated based on the text string and the alignment point's value. If vertical mode is .TextBase, then the position point is used to determine the text's position. The alignment point is recalculated based on the text string and the position point's value.

badboy518 发表于 2011-11-27 20:00:57

楼上能否写明白点,我的英语确实太差了些,看不太明白。只明白前面几句:
如果垂直方式被设置值,文本对象的对齐点被用来确定文本的位置
页: [1]
查看完整版本: [已解决]还是关于DBtext的问题,不解