在Revit中,生成文字用的是Autodesk.Revit.Creation下的Document 类的NewTextNote(View, XYZ, XYZ, XYZ, Double, TextAlignFlags, String)方法。
下面是一个例子
//生成文字
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
public class CreateText : IExternalCommand
{
public Result Execute(ExternalCommandData CommandData,
ref string message, Autodesk.Revit.DB.ElementSet elements)
{
UIApplication uiApp = CommandData.Application;
Autodesk.Revit.ApplicationServices.Application app = uiApp.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Transaction transaction = new Transaction(doc, "create text note"); //created by Joe Ye
transaction.Start();
string str = "123456789";
TextNote tn = doc.Create.NewTextNote(doc.ActiveView, new XYZ(0, 0, 0), new XYZ(1, 0, 0), new XYZ(1, 0, 0), 0.001, TextAlignFlags.TEF_ALIGN_LEFT, str);
transaction.Commit();
return Result.Succeeded;
}
接下来,我们研究一下NewTextNote的几个参数。
对于第一、二和最后一个参数,含义应该是很明显的,这里就不说了。而中间那几个参数呢?
对于第三个参数,如果是(1, 0, 0),则结果是这样的。
如果是(0, 1, 0),则结果是这样的。
如果是(1, 1, 0),则结果是这样的。
所以,第三个参数应该是文字方向的一个矢量,文字是沿着这个矢量的方向去创建的。
对于第四个参数,这里有一个概念,BoundaryBox。对于上面我们生成的文字,只要单击文字,文字就会显示成:
可以看出,文字是在一个框中显示出来的。这个框围起来的范围,就是一个BoundaryBox。
把第四个参数改成(1, 1, 0),则结果是这样的。
可见,这个参数改变的是BoundaryBox的形状。
同时改变第三第四个参数,如下:
new XYZ(1, 1, 0), new XYZ(1, 0, 0)
new XYZ(1, 1, 0), new XYZ(0, 1, 0)
对于第五个参数,API手册中说的是:The width of the rectangle bounding the note text.看着不太清楚说的什么意思,没关系,我们实验一下看看。
把这个值改成0.001,0.01,和0.1看看。
看着应该是BoundaryBox的宽度。
最后来看第六个参数,看API手册,应该是对齐的意思。不过,本来一行文字,没个参照物,就谈不上对齐。不过这里有个BoundaryBox,那很自然可以想到是文字在BoundaryBox中的对齐方式。是不是这样呢?
把第六个参数改成:TextAlignFlags.TEF_ALIGN_LEFT,结果如下:
把第六个参数改成:TextAlignFlags.TEF_ALIGN_RIGHT,结果如下:
把第六个参数改成:TextAlignFlags.TEF_ALIGN_CENTER,结果如下:
显然,这个参数即是文字对于BoundaryBox中的对齐方式。