[CE Update6 C++]请问怎样用代码调整视图亮度?

上图怎样用代码来实现呢?

Parents
  • 我看SDK中有Light对象,其下有SetBrightness和SetIntensity等方法可以试试。



  • 尝试过如下方法,虽然亮度值改变了,但实际上没效果。

    void Test光照()
    {
    	LightManager& lightManager = LightManager::GetManagerR();
    	DgnModelP activeDgnModel = ISessionMgr::GetActiveDgnModelP();
    	LightSetupPtr pLightSetup = lightManager.GetActiveLightSetupPtrForModel(*activeDgnModel);
    	pLightSetup->SetBrightnessMultiplierForView(100);
    
    	mdlView_updateSingle(0);
    
    	ViewFlags viewFlags;
    	if (SUCCESS != mdlView_getFlags(&viewFlags, 0))
    	{
    		return;
    	}
    	// 打开默认光照
    	viewFlags.ignoreSceneLights = 1;
    	if (SUCCESS != mdlView_setFlags(&viewFlags, 0))
    	{
    		return;
    	}
    	// 关闭默认光照
    	viewFlags.ignoreSceneLights = 0;
    	if (SUCCESS != mdlView_setFlags(&viewFlags, 0))
    	{
    		return;
    	}
    	mdlView_updateSingle(0);
    }

Reply
  • 尝试过如下方法,虽然亮度值改变了,但实际上没效果。

    void Test光照()
    {
    	LightManager& lightManager = LightManager::GetManagerR();
    	DgnModelP activeDgnModel = ISessionMgr::GetActiveDgnModelP();
    	LightSetupPtr pLightSetup = lightManager.GetActiveLightSetupPtrForModel(*activeDgnModel);
    	pLightSetup->SetBrightnessMultiplierForView(100);
    
    	mdlView_updateSingle(0);
    
    	ViewFlags viewFlags;
    	if (SUCCESS != mdlView_getFlags(&viewFlags, 0))
    	{
    		return;
    	}
    	// 打开默认光照
    	viewFlags.ignoreSceneLights = 1;
    	if (SUCCESS != mdlView_setFlags(&viewFlags, 0))
    	{
    		return;
    	}
    	// 关闭默认光照
    	viewFlags.ignoreSceneLights = 0;
    	if (SUCCESS != mdlView_setFlags(&viewFlags, 0))
    	{
    		return;
    	}
    	mdlView_updateSingle(0);
    }

Children
  • 设置完值后调用LightManager下的SaveSetupToModel保存回去试一下。



  • 测试代码如下:

    void adjustViewBrightness()
    {
    	IndexedViewSetR viewSet = IViewManager::GetActiveViewSet();
    	IndexedViewportP pViewport = viewSet.GetSelectedViewport();
    	LightManagerR lightMgr = LightManager::GetManagerR();
    	DgnModelP     pDgnModel = ISessionMgr::GetActiveDgnModelP();
    	bool          bUseModelLight = pViewport->GetViewFlags()->ignoreSceneLights;
    	LightSetupCP  pSetup = lightMgr.GetActiveLightSetupForModel(bUseModelLight, *pDgnModel);
    	double brightness = pSetup->GetBrightnessMultiplierForView();
    	double adaptation = pSetup->GetAdaptationLevelForView();
    
    	double newBrightness = brightness * 5;
    	double newAdaptation = adaptation / 5;
    	LightSetupPtr pNewSetup = LightSetup::Create();
    	pNewSetup->Copy(*pSetup);
    	pNewSetup->SetBrightnessMultiplierForView(newBrightness);
    	pNewSetup->SetAdaptationLevelForView(newAdaptation);
    	lightMgr.SaveSetupToModel(*pNewSetup, true, *pDgnModel);
    
    	IndexedViewSet::FullUpdateInfo info;
    	info.SetStopEvents(StopEvents(false, true, true, true, false, false));
    	viewSet.UpdateView(pViewport, DgnDrawMode::DRAW_MODE_Normal, DrawPurpose::Update, info);
    }



    Answer Verified By: 某某 某