讀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();
}