1、Walk 程序结构Document Frame ViewGeoset 工作空间LayersLayerFeaturesFeatureTargetSelectionAnnotationsDBsDBStylesGM_ObjectLabelPropertiesAttributesAnnotationStyleMetaDataWalkSQLWalkLayersSymbolFactoryLayerFeaturesLayerAnnotationsLayerSymbolsLayer Extend .WalkGIS 工具包工作空间 CWalkMapGeoset基类:无成员变量:层集合:m_layers数据库集合
2、:m_oWOBsUNDO/REDO:m_undoStack地图坐标系统:m_numbericCoordsys成员函数:Walk 数据库管理层管理Wks 访问和存盘函数绘图和绘图环境管理函数构造/析构函数:CWalkMapGeoset(BOOL fInitializeUserSymbol=TRUE);CWalkMapGeoset();获取主要成员:CWalkOdbcBase* GetWOB(const int i) const;遍历 Geoset 中的 DB:int i=0;CWalkOdbcBase *pWob;while (pWob=GetWOB(i+);CWalkMapLayers* Ge
3、tLayers();CWalkUndoStacks m_undostacks;CwalkMapCoordSys m_numbericCoordsys;层遍历CWalkMapLayer* GetLayerByName(LPCTSTR layername,CWalkOdbcBase *pInWob);CWalkMapLayer* GetFirstVisibleLayer();CWalkMapLayer* GetNextVisibleLayer(const CWalkMapLayer*pLastVisibleLayer);CWalkMapLayer* GetFirstAutoLabelLayer()
4、;CWalkMapLayer* GetNextAutoLabelLayer(const CWalkMapLayer*pLastAutoLabelLayer);CWalkMapLayer* GetFirstSelectableLayer();CWalkMapLayer* GetNextSelectableLayer(const CWalkMapLayer*pLastSelectableLayer);CWalkMapLayer* GetEditableLayer();CWalkMapLayer* GetFirstLayer();CWalkMapLayer* GetNextLayer(const C
5、WalkMapLayer* pLastLayer);WKS 和层加载 /卸载、保存、创建WKS file. CFrameWnd 的 OpenDocument 和 SaveDocument 的 Serialize 将给出 CArchivevoid Save(CArchiveBOOL Load(CArchiveBOOL AddJoinWks(CArchiveCWalkOdbcBase *OpenDb(wkDBType dbtType, LPCTSTR dbName);从数据库中加载层和数据CWalkMapLayer* AddLayerbyProperty(LPCTSTR sLayerName,CW
6、alkOdbcBase *pWob,LPCTSTR sFeaProperty, LPCTSTR sAnnProperty);若层不存在库中则创建,加载层bHadLoad:函数执行前层是否已加载pFlds:若不为 NULL,将字段加入层结构中bEmpty:是否清空层内数据noCreate:不创建层CWalkMapLayer* MakeAndAddOneLayer(LPCTSTR sLayerName,BOOL卸载层BOOL RemoveOneLayer(LPCTSTR sLayerName, CWalkOdbcBase *pWob);void SaveAllLayers();/保存层数据(由 S
7、ave 调用)BOOL ReCreateFeatureIndex(CWalkOdbcBase* pWob, LPCTSTR strLayerName,LPCTSTR strFilterFeature, LPCTSTR strFilterAnnotation);BOOL CreateFeatureIndexForAllLayers_LimitHide();BOOL CreateFeatureIndexForOneLayer_LimitHide(CWalkMapLayer *pLayer);当前面积和长度单位的几何量测double GetArea(GM_Object* pObj);double G
8、etPerimeter(GM_Object* pObj);显示图形Tips Initial tips for windowvoid TipsInitial(CWnd *pWnd);iShowTipsState: 1-显示的属性,2-显示式样名和层名void TipsShow(CPoint tipPos, int iShowTipsState);设置为全图绘制void SetDrawWholeView(CView *pView, CWalkMapLayer *pLayer=NULL);图形绘制 Draw.byWalk: 0不漫游, 1漫游, 2不漫游,并释放漫游所占内存空间void Draw(C
9、DC *pDC, CView *pView, int byWalk=0);Draw 的调用等价于分别调用下列各 Draw.设置绘图裁剪区void SetClip(CRectClip *pClip);准备绘制环境void DrawInitial(CDC *pDC, CRect 绘制地物/文字void Draw2(CWalkDrawBase 绘制选中的地物void DrawAllSelection(CWalkDrawBase *pDraw);绘制选中的文字void DrawAllAnSelection(CWalkDrawBase *pDraw);绘制目标地物void DrawAllTarget(C
10、WalkDrawBase *pDraw);绘制标签void DrawLabel(CDC *pDC, CRect 绘制标尺void DrawScaleRuler(CDC *pDC, CRect 数据库漫游int DrawByWalk(Boxvoid UndrawByWalk();void SetWalkLoadRange(int n);int GetWalkLoadRrange();绘图比例尺与中心位置系统比例尺void SetSysScale(double scale);double GetSysScale(BOOL bFromIni = FALSE);坐标和尺度换算工具CWalkDrawCo
11、ordEx* GetDrawCoordEx();显示比例尺:每 0.1mm 所对应的实数尺度void SetScale(const double fScale);double GetScale();显示中心的实数坐标void SetPosition(const PointPoint GetPosition();当前设备坐标与实数坐标换算void Device2Real(POINT *lpDevice, Point* lpReal);void Real2Device(Point* lpReal, POINT *lpDevice);计算一个系统坐标系单位(如:度)所对应的米数double CalR
12、ealScale();选中地物或文字的表达式样CWalkMapStyle* GetFocusStyle(const short iType);目标地物的表达式样CWalkMapStyle* GetTargetStyle(const short iType);层 CWalkMapLayer层集:CWalkMapLayers基类:CTypedPtrArray主要成员:CWalkMapLayer* GetLayer(LPCTSTR Name,CWalkOdbcBase *pRefWob=NULL);层在工作空间中的属性 CWorkspaceLayerSetclass CWorkspaceLayerS
13、etWORD m_ReserveType; / 保留wkDBType m_MasterDbType; / 层表属主库的类型:dbtMsAccess, dbtDSNchar m_MasterDbName256; / 层表属主库名。/ 若为 ODBC 库,则为 DSN;若为 MDB,则为库名char m_Name32; / 层名DWORD m_ReserveID; / 保留BYTE m_visualable; / 可见BYTE m_editable; / 可编辑BYTE m_selectable; / 可选择BYTE m_autolabeled; / 自动标注LabelProperty m_lab
14、elProperty; / 标注属性DWORD m_defaultLine; / 默认线样式 IDDWORD m_defaultRegion; / 默认区域样式 IDDWORD m_defaultSymbolBitmap; / 默认多媒体样式 IDDWORD m_defaultSymbol; / 默认符号样式 IDDWORD m_defaultText; / 默认文字样式 IDdouble m_minZoom; / 可见范围的左值double m_maxZoom; / 可见范围的右值BYTE m_Zoomable; / 按显示比例进行可见范围的控制WORD m_LayerOrder; / 层的
15、显示序号BYTE m_bOverrideStyle;BYTE m_bDrawLabelsAfter;short m_nPredominantFeatureType;char m_Reserved256; / 系统使用;成员函数CWalkMapLayer();virtual CWalkMapLayer();层所属的数据库void SetWalkOdbcBase(CWalkOdbcBase* pWob);CWalkOdbcBase* GetWalkOdbcBase();BOOL GetDefaultDataset(CWalkMapDataset属性的访问下标int GetPropertyIndex
16、(CString strPropertyName);访问基本要素:Feature 、Annotation 、StyleCWalkMapFeature *GetFeatureByID(long FeatureID);CWalkMapFeaturesCWalkMapAnnotation *GetAnnotationByID(long AnnotationID);CWalkMapAnnotationsCWalkMapStyle *GetStyleByID(long StyleID);CWalkMapStyles增删改基本要素:Feature、Annotation地物的增删改CWalkMapFeatu
17、re *AddFeature(CWalkMapFeaturevoid DelFeature(CWalkMapFeature* pFeature,CWalkUndoStacks * pStack =NULL,BOOL bFirst =TRUE);BOOL UpdateFeature(long FeatureID, GM_Object *pNewGeom,CArray *pNewAttrs,CWalkUndoStacks * pStack = NULL,BOOL bFirst = TRUE, BOOL bExtend = TRUE);添加影象CWalkMapAnnotation* AddDibAn
18、notation(LPCTSTR lpszPath,double X, double Y, double RotateAngle,DWORD StyleID, double scale,CView * pView, CWalkImage * pImage);文字的增删改CWalkMapAnnotation *AddAnnotation(CWalkMapAnnotationvoid DelAnnotation(CWalkMapAnnotation* pAnnotation,CWalkUndoStacks * pStack =NULL,BOOL bFirst =TRUE);BOOL UpdateA
19、nnotation(long AnnotationID, LPCTSTR pNewText,AnnotationLocationStr *pLoc,CWalkUndoStacks * pStack = NULL,BOOL bFirst = TRUE, BOOL bExtend = TRUE);式样操作:Style层中地物式样的批量修改/ modify style in layer according to three kinds of applyScheme:/ 0- apply to selection only/ 1- apply to all features with this sty
20、le/ 2- apply to features which have this geometry type/ if pFeature = NULL, apply style of selected features(m_oSelection)/ if pFeature != NULL, apply style of this featurevoid ApplyStyle(CWalkMapGeoset* pGeoset, CWalkMapStyle 层中文字式样的批量修改void ApplyAnStyle(CWalkMapGeoset* pGeoset, CWalkMapStyle 层中 BT
21、ext(系统中的主要文字类型)文字式样的批量修改void ApplyBTextFormat(CWalkMapGeoset* pGeoset,BTextSettingvoid ApplyTextFormat(CWalkMapGeoset* pGeoset,CWalkMapAnnotation *pBTann, int applyScheme,BOOL bCharHSet,/是否改变字高BOOL bExlineTypeSet = FALSE);/是否改变引出线类型void ModifyStyle(CWalkMapStyleCWalkMapStyle* AddStyleByTypeAndMemo(C
22、WalkMapGeoset *pGeoset,wkWalkStyleType type,CString name, CString note = “,BOOL bSetAsDefault=FALSE);Default 式样CWalkMapStyle *GetWorkspaceDefault(wkWalkStyleType type);CWalkMapStyle *SetWorkspaceDefault(CWalkMapGeoset *pGeoset,CWalkMapStyle *pStyle, BOOL bAddToTree = TRUE);内部索引void Reindex();Box Get
23、Box();void RecalBox(CWalkMapFeature *pFea = NULL);隐式索引层BOOL CreateFeaturesIndex(CWalkMapGeoset* pGeoset, MetaDataStr BOOL CreateFeaturesTable(CWalkSQLBase BOOL DeleteFeaturesIndex(CWalkSQLBase 选中和目标地物、选中文字CWalkMapSelectionCWalkMapSelectionCWalkMapSelectionvoid ClearAllSelections();层的属性层名CString GetN
24、ame();层的类型:1普通层,6具有图幅索引的层DWORD GetType();void GetLayerType(intint SetLayerType(int nIndex, int nExtend, int nDrilldown, int nOther);层的坐标系统CWalkMapCoordSys GetCoordSys();层在工作空间中的属性CWorkspaceLayerSetvoid SetLayerSet(CWorkspaceLayerSet层显示控制BOOL GetZoomLayer();void SetZoomLayer(BOOL bzoomlayer);double G
25、etZoomMin();void SetZoomMin(double fzoommin);double GetZoomMax();void SetZoomMax(double fzoommax);在当前工作空间窗口中是否要显示地物和文字BOOL IsDiscernable();影象显示控制BOOL GetImageZoomable();void SetImageZoomable(BOOL bZoomable);float GetImageMaxZoom();void SetImageMaxZoom(float fImageMaxZoom);float GetImageMinZoom();voi
26、d SetImageMinZoom(float fImageMinZoom);在当前工作空间窗口中是否要显示影象BOOL IsImageDiscernable();层的四态控制BOOL IsVisible();BOOL IsSelectable();BOOL IsEditable();BOOL IsAutoLabel();BOOL GetVisible();BYTE SetVisible(BOOL bvisible);BOOL GetSelectable();BYTE SetSelectable(BOOL selectable);BOOL GetEditable();BYTE SetEdita
27、ble(BOOL beditable);/该函数只允许 Geoset 调用BOOL GetAutoLabel();BYTE SetAutoLabel(BOOL bautolabel);层的标签设置LabelProperty void SetLabelProperty(LabelProperty 绘制void Draw(CWalkDrawBase *pDraw, CRectClip* pClip);void DrawFeature(CWalkDrawBase *pDraw,CWalkMapFeature* pFeature, CWalkMapStyle* pStyle);void DrawAnn
28、otation(CWalkDrawBase *pDraw,CWalkMapAnnotation* pAnnotation,CWalkMapStyle* pStyle);void DrawSelection(CWalkDrawBase *pDraw);void DrawAnSelection(CWalkDrawBase *pDraw);void DrawTarget(CWalkDrawBase *pDraw);void DrawAutoLabel(CRect BOOL ShowTips(CWalkMapGeoset* pGeoset, CPoint point,int nShowState, C
29、String层在工作空间中的显示顺序int GetDisplayOrder();int SetDisplayOrder(BOOL bAnnFirst);查找: Searchvoid SearchAtPoint(double x, double y, CDWordArrayvoid SearchWithinRectangle(Box Rectangle, CDWordArrayvoid SearchAnnotationWithinRectangle(Box Rectangle, CDWordArray层加载/卸载/保存/清空BOOL IsDirty();void SetDirty(BOOL bD
30、irty = TRUE);void Refresh();void EmptyLayer(CWalkMapGeoset* pGeoset);BOOL Save(CWalkMapCoordSys* pWorkspaceSys,CString sFeaUpdateEx=“, CString sAnnUpdateEx=“);sFeaUpdateEx: 正常保存后, Features 表字段值的附加赋值。sAnnUpdateEx: 正常保存后, Annotations 表字段值的附加赋值。如:Floor 的分户图层要求新增地物和文字的 所属幢 key=Update Features Set Where
31、FeatureID 因为用户保存时,系统将强制该事务不被打断,所以可保证 Where 有效BOOL LoadbyProperty(CWalkMapCoordSys* pWorkspaceSys,CString sFeaFilter, CString sAnnFilter);BOOL UnLoadbyProperty(CString sFeaFilter, CString sAnnFilter);BOOL LoadbyCellID(CWalkMapCoordSys* pWorkspaceSys,CDWordArray BOOL UnLoadbyCellID(CDWordArray 地物 CWal
32、kMapFeature地物集:CWalkMapFeatures基类:CTypedPtrArray主要成员:获取新 ID:int GetNewId();成员变量CwalkMapFeature 的数据成员DWORD m_FeatureID;DWORD m_StyleID;Box *m_pBox;GM_Object *m_pObj;CArray *m_pAttr;成员函数构造/析构CWalkMapFeature();CWalkMapFeature();Get/Set 属性函数DWORD GetFeatureID();void SetFeatureID(DWORD FeatureID);DWORD G
33、etStyleID();void SetStyle(DWORD StyleID);GM_Object* GetGM_Object();Void SetGM_Object(GM_Object BOOL FetchInfoData(CArray* pAttr,CWalkMapLayer* pLayer);BOOL StoreInfoData(CArray* pAttr,CWalkMapLayer* pLayer);CArray *GetAttr();void ReleaseAttr();CWalkMapFeature *Clone();void RecalBox();Box* GetpBox();
34、static void Variant2String(CDBVariant* pAttr, CStringstatic void String2Variant(CDBVariant* pAttr, CString strVal);式样 CWalkMapStyle集合:CWalkMapStyles基类:CTypedPtrArray成员变量LayerSymbolStr成员函数CWalkMapStyle(LayerSymbolStr* pLayerStyle=NULL, BOOL bUseID = FALSE);CWalkMapStyle();LayerSymbolStr* GetStyle(voi
35、d);BOOL GetModifyState();void SetModifyState(BOOL bmodify);void AddRef();void Release();void ClearRef();int GetRef();CString GetMemo();void SetMemo(CString memo);CString GetNamepart();void SetNamepart(CString namepart);CString GetNotepart();void SetNotepart(CString notepart);DWORD GetStyleID();void
36、SetStyleID(DWORD styleID);int GetType();void SetType(int type);LineDWORD GetLineColor();void SetLineColor(DWORD);DWORD GetLineStyle();void SetLineStyle(DWORD);DWORD GetLineWidth();void SetLineWidth(DWORD);short GetLineWidthUnit();void SetLineWidthUnit(short);/ 扩充WalkPenEx *GetLinePenEx();DWORD GetLi
37、neBKColor();void SetLineBKColor(DWORD rc);BOOL GetLineTransparent();void SetLineTransparent(BOOL);void SetLineLinearLen(int len); int GetLineLinearLen();void SetLineJoin(int join);int GetLineJoin();void SetLineAlign(int align);int GetLineAlign();RegionDWORD GetRegionColor();void SetRegionColor(DWORD
38、);DWORD GetRegionPattern();void SetRegionPattern(DWORD);BOOL GetRegionTransparent();void SetRegionTransparent(BOOL);DWORD GetRegionBackColor();void SetRegionBackColor(DWORD);DWORD GetRegionBorderStyle();void SetRegionBorderStyle(DWORD);DWORD GetRegionBorderColor();void SetRegionBorderColor(DWORD);DW
39、ORD GetRegionBorderWidth();void SetRegionBorderWidth(DWORD);short GetRegionBorderWidthUnit();void SetRegionBorderWidthUnit(short);/ 扩充WalkPenEx *GetRegionBorderPenEx();WORD GetRegionLinearLen();void SetRegionLinearLen(WORD);/ 扩充void SetRegionBorderGradientColor(DWORD);DWORD GetRegionBorderGradientCo
40、lor();void SetBorderTransparent(BOOL);BOOL GetBorderTransparent();void SetBorderLinearLen(WORD);WORD GetBorderLinearLen();void SetBorderJoin(WORD );WORD GetBorderJoin();void SetBorderAlign(WORD);WORD GetBorderAlign();SymbolDWORD GetSymbolCharacter();void SetSymbolCharacter(DWORD);LOGFONT GetSymbolFo
41、nt();void SetSymbolFont(LOGFONT font);DWORD GetSymbolFontColor();void SetSymbolFontColor(DWORD);DWORD GetSymbolFontBackColor();void SetSymbolFontBackColor(DWORD);BOOL GetSymbolFontOpaque();void SetSymbolFontOpaque(BOOL);BOOL GetSymbolFontHalo();void SetSymbolFontHalo(BOOL);BOOL GetSymbolFontShadow()
42、;void SetSymbolFontShadow(BOOL);WORD GetSymbolSizeUnit();void SetSymbolSizeUnit(WORD nNewValue);short GetSymbolFontRotation();void SetSymbolFontRotation(short nNewValue);TextLOGFONT GetTextFont();void SetTextFont(LOGFONT font);DWORD GetTextFontColor();void SetTextFontColor(DWORD);DWORD GetTextFontBa
43、ckColor();void SetTextFontBackColor(DWORD);BOOL GetTextFontOpaque();void SetTextFontOpaque(BOOL);BOOL GetTextFontHalo();void SetTextFontHalo(BOOL);BOOL GetTextFontShadow();void SetTextFontShadow(BOOL);BOOL GetTextFontAllCaps();void SetTextFontAllCaps(BOOL);BOOL GetTextFontDblSpace();void SetTextFont
44、DblSpace(BOOL);void SetTextFontRotation(short propVal);short GetTextFontRotation();SymbolBitmapBOOL GetSymbolBitmapTransparent();void SetSymbolBitmapTransparent(BOOL bNewValue);BOOL GetSymbolBitmapOverrideColor();void SetSymbolBitmapOverrideColor(BOOL bNewValue);DWORD GetSymbolBitmapColor();void Set
45、SymbolBitmapColor(DWORD nNewValue);CString GetSymbolBitmapName();void SetSymbolBitmapName(LPCTSTR lpszNewValue);long GetSymbolBitmapSize();void SetSymbolBitmapSize(long nNewValue);DWORD GetSymbolBitmapType();void SetSymbolBitmapType(DWORD nNewValue);/ Make full path for this bitmap symbolstatic CStr
46、ing MakeSymbolBitmapPath(LPCTSTR lpszName);其他/Returns a stand-alone Style object which is a copy of another Style object.void CopyContents(LayerSymbolStr* psrc,BOOL bUseID = TRUE, BOOL bUseMemo = TRUE);BOOL IsUserStyle();/ 得到自定义 style 的 IDint GetUserStyleID();void SetSysDefaultStyle(int type);void D
47、raw(CWalkDrawBase *pDraw, WorldParts* parts, CWalkMapLayer* pLayer, double ZoomIO = 1.0);void Draw(CWalkDrawBase *pDraw, WorldPoints *ps, CWalkOdbcBase *pWob, double ZoomIO);自定义式样 CWalkMapUserStyle集合:CWalkMapUserStyles基类:无成员变量:CTypedPtrArray m_pUserDbStyles;接口:属于 Workspace,整个 Workspace 中唯一。是 CWalkMa
48、pStyle 中作为静态 static 指针。成员函数:确定层所属数据库的函数地物绘制函数void Initialize(CWalkMapGeoset* pWks);void AddNewUserDBStyles(CWalkOdbcBase* pWob);CWalkMapUserDbStyles* GetUserDBStyles(CWalkMapLayer* pLayer);CWalkMapUserStyle* GetByID(DWORD UserStyleID, CWalkMapLayer* pLayer);long Pos(DWORD UserStyleID, CWalkMapLayer*
49、 pLayer);将自定义符号加入管理数组, 不存入库! void Add(CWalkMapUserStyle* pSt, CWalkMapLayer* pLayer);/ nMustMatchStyleType: -1 no care;/ wkStyleLine, wkStyleSymbol, wkStyleRegionBOOL GetUserStyle(CWalkOdbcBase* pWob, DWORD StyleID,CWalkMapUserStyle* 符号库:CWalkMapUserDbStyles负责符号库的管理CWalkMapUserDbStyles(CWalkOdbcBase* pWob) m_pWob = pWob; CWalkMapUserDbStyles();/ Get from m_pData, if not found then retreived from m_pWobCWalkMapUserStyle* GetByID(DWORD UserStyleID);/ Get CWalkMapUserStyle one by one, from m_pWob. / Note: Doesnt ca