AE: 显示注记

来源:互联网 发布:php 空白页面 编辑:程序博客网 时间:2024/04/29 14:33

    //附:1.注记可显示,但和图形对齐的方式没找到;2.没加注释---有愿意的不愿意。

    HRESULT hr = E_FAIL;
    IGeoFeatureLayerPtr pGeoFeaLyr;
    IMapControl2Ptr pMapControl; 
    pMapControl=m_MapCtrl.get_Object();

    pGeoFeaLyr=pMapControl->GetLayer(2);//层索引
    if(pGeoFeaLyr  == NULL) return;
    //////////////////////////////////////////////////////////////////////////
    ILineLabelPlacementPrioritiesPtr pLineLabPlaPrior(__uuidof(LineLabelPlacementPriorities));
    hr = pLineLabPlaPrior->put_AboveAfter(3);
    hr = pLineLabPlaPrior->put_AboveAlong(1);
    hr = pLineLabPlaPrior->put_AboveBefore(3);
    hr = pLineLabPlaPrior->put_AboveEnd(3);
    hr = pLineLabPlaPrior->put_AboveStart(3);
    hr = pLineLabPlaPrior->put_BelowAfter(3);
    hr = pLineLabPlaPrior->put_BelowAlong(3);
    hr = pLineLabPlaPrior->put_BelowBefore(3);
    hr = pLineLabPlaPrior->put_BelowEnd(3);
    hr = pLineLabPlaPrior->put_BelowStart(3);
    hr = pLineLabPlaPrior->put_CenterAfter(3);
    hr = pLineLabPlaPrior->put_CenterAlong(3);
    hr = pLineLabPlaPrior->put_CenterBefore(3);
    hr = pLineLabPlaPrior->put_CenterEnd(3);
    hr = pLineLabPlaPrior->put_CenterStart(3);
    //////////////////////////////////////////////////////////////////////////
    
    //////////////////////////////////////////////////////////////////////////
    ILineLabelPositionPtr pLineLabPos(__uuidof(LineLabelPosition));
    hr = pLineLabPos->put_Above(TRUE);
    hr = pLineLabPos->put_AtEnd(FALSE);
    hr = pLineLabPos->put_AtStart(FALSE);
    hr = pLineLabPos->put_Below(FALSE);
    hr = pLineLabPos->put_InLine(FALSE);
    hr = pLineLabPos->put_Left(FALSE);
    hr = pLineLabPos->put_OnTop(FALSE);
    hr = pLineLabPos->put_Right(FALSE);
    hr = pLineLabPos->put_Parallel(TRUE);
    hr = pLineLabPos->put_Perpendicular(FALSE);
    hr = pLineLabPos->put_Horizontal(FALSE);

    //////////////////////////////////////////////////////////////////////////
   
    //////////////////////////////////////////////////////////////////////////
    IPointPlacementPrioritiesPtr pPtPlacePrior(__uuidof(PointPlacementPriorities));
    hr = pPtPlacePrior->put_AboveCenter(2);
    hr = pPtPlacePrior->put_AboveLeft(3);
    hr = pPtPlacePrior->put_AboveRight(1);
    hr = pPtPlacePrior->put_BelowCenter(3);
    hr = pPtPlacePrior->put_BelowLeft(3);
    hr = pPtPlacePrior->put_BelowRight(3);
    hr = pPtPlacePrior->put_CenterLeft(30);
    hr = pPtPlacePrior->put_CenterRight(2);
    //////////////////////////////////////////////////////////////////////////
    IBasicOverposterLayerPropertiesPtr pBasicOverLyrProps(__uuidof(BasicOverposterLayerProperties));
    hr = pBasicOverLyrProps->put_NumLabelsOption(esriNoLabelRestrictions);
    hr = pBasicOverLyrProps->put_PointPlacementPriorities(pPtPlacePrior);
    hr = pBasicOverLyrProps->put_LineLabelPosition(pLineLabPos);
    hr = pBasicOverLyrProps->put_LineLabelPlacementPriorities(pLineLabPlaPrior);
    //////////////////////////////////////////////////////////////////////////
    CString sExpress;
    //sExpress.Format("Function FindLabel([Name],[Rank]) /n/rFindLabel=Right([Name],1)&[Rank]/n/rEnd Function");//复杂标到式,下面的IsExpressionSimple需设为FALSE
    sExpress = _T("[ObjectID]& [Name]");//

    ILabelEngineLayerPropertiesPtr pLabEngLyrProps(__uuidof(LabelEngineLayerProperties));
    IAnnotateLayerPropertiesCollectionPtr pAnnoLyrPropsColl;
    pGeoFeaLyr->get_AnnotationProperties(&pAnnoLyrPropsColl);
    if(pAnnoLyrPropsColl == NULL) return;
    pAnnoLyrPropsColl->Clear();
    IAnnotateLayerPropertiesPtr pAnnoLyrProps = pLabEngLyrProps;
    pAnnoLyrProps->put_WhereClause((_bstr_t)"[ObjectID] <= 3");

    //////////////////////////////////////////////////////////////////////////
    hr = pLabEngLyrProps->put_Expression(sExpress.AllocSysString());
    hr = pLabEngLyrProps->put_IsExpressionSimple(VARIANT_TRUE);
    //hr = pLabEngLyrProps->put_IsExpressionSimple(VARIANT_FALSE);
    hr = pLabEngLyrProps->putref_BasicOverposterLayerProperties(pBasicOverLyrProps);

    IAnnotationExpressionEnginePtr pAnnoExpEng(__uuidof(AnnotationVBScriptEngine));
    IAnnotationExpressionParserPtr pAnnoExpParser;
    hr = pAnnoExpEng->raw_SetExpression(_bstr_t(""),sExpress.AllocSysString(),&pAnnoExpParser);
    hr = pLabEngLyrProps->putref_ExpressionParser(pAnnoExpEng);

 

    IColorPtr pColor(__uuidof(RgbColor));
    pColor->put_RGB(RGB(255,0,0));

    IFontPtr pFont;
    pFont.CreateInstance("StdFont");
    pFont->put_Name((_bstr_t)"仿宋_GB2321");
    pFont->put_Bold(TRUE);
    CY cy;
    cy.Hi = 10 * 80;
    cy.Lo = 8 * 80;
    pFont->put_Size(cy);
    pFont->put_Italic(FALSE);
    pFont->put_Underline(FALSE);
    pFont->put_Strikethrough(FALSE);

    IFontDispPtr pFontDisp(pFont);


    ITextSymbolPtr pTextSym(__uuidof(TextSymbol));
    pTextSym->put_Font(pFontDisp);
    pTextSym->put_Size(18);
    pTextSym->put_Color(pColor);
    pTextSym->put_HorizontalAlignment(esriTHALeft);
    pTextSym->put_RightToLeft(VARIANT_TRUE);

    pLabEngLyrProps->putref_Symbol(pTextSym);
   
    pAnnoLyrPropsColl->Add(pAnnoLyrProps);
    pGeoFeaLyr->put_DisplayAnnotation(VARIANT_TRUE);
    IActiveViewPtr pAV;
    pAV=pMapControl->GetActiveView();
    pAV->Refresh();

 

///////////////////////////////////////////////////////////////////////////////////////////

如下为C#代码

IAnnotateLayerPropertiesCollection pAnnoProps = null;
//得到图层的标注属性集合对象

IAnnotateLayerProperties pAnnoLayerProps = null; ;
ILineLabelPosition pPosition = null;
ILineLabelPlacementPriorities pPlacement = null;
IBasicOverposterLayerProperties pBasic = null;
ILabelEngineLayerProperties pLabelEngine = null;

pAnnoProps = pGeoFeaLyr.AnnotationProperties;
pAnnoProps.Clear();
//新建标注文本的文本编号
ITextSymbol pTextSyl = null;
pTextSyl = new TextSymbolClass();

stdole.StdFont pFont;
pFont = new stdole.StdFontClass();
pFont.Name = "宋体";
pFont.Size = 5;//字体大小
pTextSyl.Font = pFont as stdole.IFontDisp;

IRgbColor pRGB = new RgbColorClass();
pRGB.Red = 110; pRGB.Blue = 200; pRGB.Green = 60;
pTextSyl.Color = pRGB;

//设置标注文本的位置
pPosition = new LineLabelPositionClass();
pPosition.Parallel = false;
pPosition.Perpendicular = true;
pPlacement = new LineLabelPlacementPrioritiesClass();
pBasic = new BasicOverposterLayerPropertiesClass();
pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;

pBasic.LineLabelPlacementPriorities = pPlacement;
pBasic.LineLabelPosition = pPosition;
//新建一个图层标注引擎对象,设置它的属性
pLabelEngine = new LabelEngineLayerPropertiesClass();
pLabelEngine.Symbol = pTextSyl;
pLabelEngine.BasicOverposterLayerProperties = pBasic;

//field必须是这种样式,如”[STATE_NAME]”
pLabelEngine.Expression = sAnnoField;
pLabelEngine.Expression = "[" + sAnnoField + "]";
pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;
pAnnoProps.Add(pAnnoLayerProps);
pGeoFeaLyr.DisplayAnnotation = true;

原创粉丝点击