讀cad-.DWG圖到MapObject裡,主要分四層[CADArea]、[CADLine]、[CADPoint] 、[CADText]

在讀text時主要在lbrend->set_Field(WideString("TEXT"));這一行,是讀field。

========================================================== 

        AnsiString CADType[4];
        CADType[0] = "[CADArea]";
        CADType[1] = "[CADLine]";
        //CADType[2] = "[CADPoint]";
        CADType[2] = "[CADText]";

        for (unsigned short int i=0 ; i<3 ; i++)
        {
            IMoDataConnectionPtr dc;
            IMoGeoDatasetPtr GeoData;
            IMoMapLayerPtr lyr;
            IMoLayersPtr lyrs(Map1->Layers);
            IMoSymbolPtr sym;

            dc = (IDispatch*)CreateOleObject("MapObjects2.DataConnection");
            dc->Database = WideString(CADType[i]+"D:\\map\\").Detach();
            if(!(bool)dc->Connect())
                return;

            GeoData = dc->FindGeoDataset(WideString("SIPA97.DWG").Detach());
            lyr = (IDispatch*)CreateOleObject("MapObjects2.MapLayer");
            lyr->GeoDataset = GeoData;

            if (i==2)
            {
                IMoLabelRendererPtr lbrend;
                lbrend = (IDispatch*)CreateOleObject("MapObjects2.LabelRenderer");
                lbrend->set_HeightField(WideString("HeightText"));
                lbrend->set_Field(WideString("TEXT"));

                TFont* ft = new TFont();
                _di_IFontDisp  oleFt;
                ft->Name = "Times New Romans";
                GetOleFont(ft, oleFt);
                IMoTextSymbolPtr tsym(lbrend->get_Symbol(0));
                tsym->Font = (IFontDisp**)(IDispatch*)oleFt;

                lyr->set_Renderer(lbrend);
                lbrend.Release();
                ft->Free();
            }
            lyrs->Add(lyr);
            lyr.Release();
        }

=============以下code來自網路轉貼===============================

CString CMyGISView::AddCadLayer(const CString & path)
{
CString CADType[4];
CADType[0] = "[CADArea]";
CADType[1] = "[CADLine]";
CADType[2] = "[CADPoint]";
CADType[3] = "[CADText]";
for(int i = 0;i < 4; i++)
{
  CMoDataConnection Conn;
  if(!Conn.CreateDispatch(TEXT("MapObjects2.DataConnection")))
   return "";

  Conn.SetDatabase(CADType[i] + GetFileDirectory(path));
  if(!Conn.Connect())
   return "";

  CMoLayers layers(m_map.GetLayers());
  CMoMapLayer layer;
  if(!layer.CreateDispatch(TEXT("MapObjects2.MapLayer")))
   return "";
  CMoGeoDataset geoDataset(Conn.FindGeoDataset(GetFileName(path)));

  layer.SetGeoDataset(geoDataset);


  if(i == 3)
  {
   CMoLabelRenderer LabelRend;
   LabelRend.CreateDispatch("MapObjects2.LabelRenderer");
   LabelRend.SetDrawBackground(false);
   LabelRend.SetHeightField("HeightText");
   LabelRend.SetField("Text");
   layer.SetRenderer(LabelRend);
  }
  layers.Add(layer);
}
return CString();
}

arrow
arrow
    全站熱搜

    chen412 發表在 痞客邦 留言(0) 人氣()