| 
 | 
 
在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, 下载次数: 11)
 |   
 
 
 
 |