ArcGIS 生成指北针

Step 1

   pPoint.CreateInstance(__uuidof(Point));

pPoint->PutX(pEnvelop->GetXMax()-2.5);

pPoint->PutY(pEnvelop->GetYMax()-3.5);

IUIDPtr pUID;

pUID.CreateInstance(__uuidof(UID));

varVal=L"esriCarto.MarkerNorthArrow";

pUID->PutValue(varVal);

 

pElementExtent.CreateInstance(__uuidof(Envelope));

pElementExtent->PutCoords(pPoint->GetX(),pPoint->GetY(),pPoint->GetX()+2,pPoint->GetY()+2);

pMapSurround = CreateSurround(pUID, pElementExtent, "North Arrow", pMap,   m_pPageLayoutControl->GetPageLayout());

pMarkerNorthArrow=pMapSurround;

 

//ESRI North -- 字体文件  117 是改文件中指北针的Unicode编码

  pSymbol=MakeNorthArrowSymbol(177,"ESRI North");

      

  if(pSymbol)

        pMarkerNorthArrow->PutMarkerSymbol((IMarkerSymbolPtr)pSymbol);

  pPoint=NULL;

  pUID=NULL;

pElementExtent=NULL;

 

step 2

IMapSurroundPtr CMapMakeLayoutHelper::CreateSurround(IUIDPtr pID,IEnvelopePtr pEnv,CString strName,IMapPtr pMap,IPageLayoutPtr pPagelayout)

{

    IGraphicsContainerPtr pGraphicsContainer;

    IMapFramePtr pMapFrame;

    IElementPtr pElement;

    IElementPropertiesPtr pElementProperties;

    IActiveViewPtr pActiveView;

    ITrackCancelPtr PTrack;

    IMapSurroundFramePtr pMapSurroundFrame;

    pGraphicsContainer=pPagelayout;

 

    _variant_t vt(pMap, true);

    pMapFrame=pGraphicsContainer->FindFrame(vt);

 

    pMapSurroundFrame=pMapFrame->CreateSurroundFrame(pID,NULL);

    pMapSurroundFrame->GetMapSurround()->PutName(_bstr_t(strName));

 

    pElement=pMapSurroundFrame;

    pElementProperties=pElement;

    pElementProperties->PutName(_bstr_t("North Arrow"));

 

    pActiveView=pPagelayout;

    pElement->PutGeometry(pEnv);

    pElement->Activate(pActiveView->GetScreenDisplay());

 

    PTrack.CreateInstance(__uuidof(CancelTracker));

    pElement->Draw(pActiveView->GetScreenDisplay(),PTrack);

    pGraphicsContainer->AddElement(pElement,0);

    pElement->PutGeometry(pEnv);

    return pMapSurroundFrame->GetMapSurround();

}

Step 3

ISymbolPtr CMapMakeLayoutHelper::MakeNorthArrowSymbol(int intStyle,CString sSymName)

{

    ICharacterMarkerSymbolPtr pCharSym;

    pCharSym.CreateInstance(__uuidof(CharacterMarkerSymbol));

    IRgbColorPtr pRgbColor(__uuidof(RgbColor));

    pRgbColor->PutRed(0);

    pRgbColor->PutGreen(0);

    pRgbColor->PutBlue(0);

    IFontPtr pFont(CLSID_StdFont);

    pFont->put_Name((_bstr_t)sSymName);

    pCharSym->PutColor(pRgbColor);

    pCharSym->PutSize(100);

    pCharSym->PutCharacterIndex(intStyle);

    pCharSym->PutFont(IFontDispPtr(pFont));

    return pCharSym;

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值