天天看點

【二次開發】CityMaker互動操作——顯隐顯示/隐藏對象

**

顯示/隐藏對象

**

一、原理

可渲染對象IRenderable通過設定VisibleMask屬性可實作顯示與隐藏。順便提一下,平台可實作三維窗體的多視口展示,支援四個視口及畫中畫的顯示。IRenderable::VisibleMask可擷取或設定可繪制對象在多個視口中是否可見的掩碼。其中,gviViewportMask 視口掩碼,枚舉值如下:

  

  gviViewNone 所有視口都不顯示

  gviView0 僅在第一個視口顯示

  gviView1 僅在第二個視口顯示

  gviView2 僅在第三個視口顯示

  gviView3 僅在第四個視口顯示

  gviViewAllNormalView 正常的四個視口都顯示(預設值)。注意:不包含PIP視口!

  gviViewPIP 僅在畫中畫視口顯示。

IRenderable可見性掩碼預設值為gviViewAllNormalView(0xF), 可以用“|”進行組合。例如隻想在前兩個視口可見,這個掩碼就應該設成gviView0|gviView1。

對于繼承IRenderable的矢量圖層IFeatureLayer在可見性設定上具有以下幾個方法,

(1)SetGroupVisibleMask (LONG GroupId, gviViewportMask VisibleMask) 設定渲染組的可見性。

(2)SetFeaturesVisibleMask (SAFEARRAY(LONG) FIDs, gviViewportMask VisibleMask,[out, retval] VARIANT_BOOL *pVal) 通過FID數組設定若幹feature的visiblemask。(可用于實作現狀隐藏)除了trimesh和貼地,其他類型的都實作了。

(3)SetFeatureVisibleMask (LONG FeatureId, gviViewportMask VisibleMask,[out, retval] VARIANT_BOOL *pVal) 通過FID設定某一個feature的visiblemask。(可用于實作現狀隐藏)除了trimesh和貼地,其他類型的都實作了。

(4) ResetAllVisibleMask ([out, retval] VARIANT_BOOL *pVal) 取消所有feature的visiblemask設定。

(5) ResetFeatureVisibleMask (LONG FeatureId,[out, retval] VARIANT_BOOL *pVal) 取消某一feature的visiblemask設定。

可見性設定起作用的優先級如下:GeometryRenderScheme的VisibleMask、FeatureLayer的VisibleMask、GroupVisible優先起作用,通過要素fid或要素fid數組設定的VisibleMask優先級最低。如第二次和第一次調用SetFeaturesVisibleMask傳入的FIDs不同,之前隐藏的要素依舊隐藏。

  如需重置請調用ResetFeatureVisibleMask/ResetAllVisibleMask方法。 也就是說通過SetFeaturesVisibleMask來設定某些要素的顯隐,可以實作隐藏,不能實作顯示,想要實作某些要素的顯示,應該首先設定FeatureLayer的visibleMask為全顯示,再設定其他要素隐藏。

二、實作代碼

1. .net

//fl為某個圖層IFeatureLayer
//fc為fl對應的要素類
           

1)圖層的顯隐

fl.ResetAllVisibleMask();//取消所有feature的visiblemask設定
    fl.VisibleMask = gviViewportMask.gviViewNone;//隐藏圖層fl
    fl.ResetAllVisibleMask();
    fl.VisibleMask = gviViewportMask.gviViewAllNormalView; //顯示圖層fl
       
           

2)模型的隐藏

fl.ResetAllVisibleMask();
    fl.VisibleMask = gviViewportMask.gviViewAllNormalView;//設定圖層fl顯示
    fl.SetFeaturesVisibleMask(array, gviViewportMask.gviViewNone);//将要素id在array内的要素設定隐藏
        
           

2. JS

1)要素圖層的顯隐

fl.resetAllVisibleMask();
    fl.visibleMask =15;//設定圖層可見 gviViewportMask.gviViewAllNormalView 
    fl.resetAllVisibleMask();
    fl.visibleMask =0;//設定圖層隐藏 gviViewportMask.gviViewNone 
           

2)要素的隐藏

fl.resetAllVisibleMask();
   fl.visibleMask =15;//設定圖層在四個視口可見 gviViewportMask.gviViewAllNormalView
   fl.setFeatureVisibleMask(fid,gviViewportMask.gviViewNone);//設定Id為fid的要素不可見