文本元素原点设置


我们在Mstn中放置文本元素时,会通过文本元素的原点以及文本样式中的对齐方式来控制文本元素的位置,其中对齐方式有很多种,如下图所示:

当对齐方式调整为不同的值时,“Geometry”中“Origin”是不会变化的,但是文本元素的位置是会发生变化的。例如当“Origin”的值为(0,0,0),对齐方式为“Center Middle”时,文本元素如下图所示:

当将对齐方式修改为“Left Top”,而“Origin”的值仍为(0,0,0)时,文本元素的位置就变成如下图所示的样子了:

可以看到文本元素对齐方式指的就是“Origin”位于文本元素的哪个位置上,我们使用C#语言开发时可以通过如下代码来创建文本元素:

                DgnModel dgnModel = Session.Instance.GetActiveDgnModel();
                DgnTextStyle dgnTextStyle = DgnTextStyle.GetSettings(dgnModel.GetDgnFile());
                TextBlockProperties textBlockProperties = new TextBlockProperties(dgnTextStyle, dgnModel);
                ParagraphProperties paragraphProperties = new ParagraphProperties(dgnTextStyle, dgnModel);
                RunProperties runProperties = new RunProperties(dgnTextStyle, dgnModel);
                dgnTextStyle.SetProperty(TextStyleProperty.Justification, (uint)TextElementJustification.RightTop);
                TextBlock textBlock = new TextBlock(dgnTextStyle, dgnModel);
                textBlock.AppendText("This is a Text");
                TextHandlerBase textHandlerBase = TextHandlerBase.CreateElement(null, textBlock);
                textHandlerBase.AddToModel();

这段代码创建出来的文本元素其位置跟我们上边的第二张图中的位置是一样的,不管我们在代码中通过dgnTextStyle.SetProperty将对齐方式设成哪一种方式,其位置都是一样的。新创建出来的文本元素的“Origin”属性值会随着对齐方式的改变而改变,进而始终保持其左上角一直在原点(0,0,0)位置。如果我们需要指定文本元素的“Origin”属性值进而控制文本元素的位置该如何实现呢?例如在将对齐方式设置为“Center Middle”,还需要使新创建出来的文本元素的中心位于原点(0,0,0)时如何实现呢?我们可以通过调用TextBlock的SetUserOrigin函数来指定“Origin”的值,其原型如下所示:

如果我们的文本样式的对齐方式设置为“Center Middle”,只要我们在创建出TextBlock的实例以后调用一下此函数,参数传递一个(0,0,0)点就可以了。这样创建出来的文本元素在对齐方式为“Center Middle“时,其位置也同我们前面图一中的一样了。