|
在walkscript脚本编写中,往往对wkAnnotation, wkStyle等一些式样、类型的setInfo函数设置,一般人都会觉得比较困难。
有个简单的办法就是,可以根据已有的式样,反推脚本语句!
例如,在三值标注中,可以先在Walk主界面中,对文字的位置、文字、栏、绘线等进行设置好
然后,通过一个脚本,把这种式样生成一个脚本;
最后,只需要拷贝代码即可!
#include "wcAnnoConstant.h"
wkGeoset geoset;
wkView view;
array oAnnInfo =
{
{10, "wcAnnoInsPos" , "插入位置"},
{11, "wcAnnoInsPntX" , "插入点与插入位置的偏移X"},
{12, "wcAnnoInsPntY" , "插入点与插入位置的偏移Y"},
{13, "wcAnnoAngle" , "旋转角度(以0.1度为单位)"},
{14, "wcAnnoFix" , "块大小是否随比例缩放"},
{15, "wcAnnoCharH" , "字符高度(以0.1mm为单位)"},
{16, "wcAnnoLineI" , "文本行间隔"},
{17, "wcAnnoCharI" , "文本的字符间隔"},
{18, "wcAnnoCharLeft" , "文本字头的朝向:倾斜方向,分为左斜/右斜/垂直/不斜"},
{19, "wcAnnoCharAngle" , "文本字头的倾斜角度"},
{20, "wcAnnoColTwo" , "是否使用双栏"},
{21, "wcAnnoColStager" , "两栏是否错行"},
{22, "wcAnnoColWidthSet", "是否使用栏宽设定"},
{23, "wcAnnoCol1Width" , "第一栏的栏宽"},
{24, "wcAnnoCol2Width" , "获取标注的第二栏的栏宽"},
{25, "wcAnnoRowAlian" , "文本左栏对齐方式"},
{26, "wcAnnoRow2Alian" , "文本右栏是对齐方式"},
{27, "wcAnnoBlkBox" , "是否绘制外包盒"},
{28, "wcAnnoLinGapLine" , "左栏是否绘制行间线"},
{29, "wcAnnoLineWidth" , "线宽"},
{30, "wcAnnoColLine" , "是否绘制栏间线"},
{31, "wcAnnoLineRGapLin", "右栏是否绘制双数行间线"},
{32, "wcAnnoExline" , "引出线类型"},
{33, "wcAnnoExlineGap" , "引出线距参考点间距"},
{34, "wcAnnoExlinePos" , "引出线引向区位选择因子1"},
{35, "wcAnnoExlinePos2" , "引出线引向区位选择因子2"},
{36, "wcAnnoCircle" , "取标注是否显示边框外接圆"},
{37, "wcAnnoFeatureID" , "地物来源(FeatureID),若无参考地物返回0"},
{38, "wcAnnoImageWidth" , "图像宽度"},
{39, "wcAnnoImageHeight", "图像高度"}
};
void PutScript(wkFile& file, wkLayer& layer, wkAnnotation oAnn)
{
string s;
file.puts("wkAnnotation AddAnnotation(wkLayer& layer, string strText, wkPoint ptRef) \n");
file.puts("{\n");
s.format("\twkAnnotation ann = layer.addAnnotation(strText, ptRef, %d);\n", oAnn.getInfo(wcAnnoCharH));
file.puts(s);
for (int i = 0; i < oAnnInfo.getSize(); ++i)
{
if (!oAnn.isDib())
{
if (oAnnInfo[ i ][0] == 38 || oAnnInfo[ i ][0] == 39)
continue;
}
s.format("\tann.setInfo(%d/*%s*/,%d); //%s\n",
oAnnInfo[ i ][0], oAnnInfo[ i ][1],
oAnn.getInfo(oAnnInfo[ i ][0]), oAnnInfo[ i ][2]);
file.puts(s);
}
file.puts("\n\treturn ann; \n");
file.puts("}\n");
}
void main()
{
string fileName = "c:\\script_ann.txt";
wkFile file;
if (!file.open(fileName, "wt"))
return;
array ids;
for (int i = 0; i < geoset.getLayerCount(); ++i)
{
wkLayer layer = geoset.getLayerAt(i);
for (int j = 0; j < layer.getASelectionCount(); ++j)
{
wkAnnotation ann = layer.getASelectionAt(j);
PutScript(file, layer, ann);
}
}
file.close();
view.shell(fileName);
}
例如,根据以上代码反推生成一个脚本代码:
现在,只需要拷贝上面的代码即可。
walkscript生成创建文字脚本语句.rar
(16.11 KB, 下载次数: 9)
|
|