NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

renderer_planetary_pin.py (2696B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\iconrendering2\renderers\renderer_planetary_pin.py
      2 from __future__ import absolute_import
      3 import trinity
      4 from .utils_scene import *
      5 from .utils_renderer import RenderToBitmapFromScene
      6 from .renderer_base import IconRenderer
      7 from iconrendering2.const import Language
      8 from iconrendering2.utils import Pump
      9 
     10 class PlanetaryPinIconRenderer(IconRenderer):
     11 
     12     def __init__(self, objectPath, language = Language.ENGLISH):
     13         super(PlanetaryPinIconRenderer, self).__init__(language)
     14         self._objectPath = objectPath
     15         self._scene = None
     16         self._object = None
     17         self._shaderModel = trinity.GetShaderModel()
     18 
     19     def __str__(self):
     20         return 'Planetary Pin Icon Renderer <%s>' % hex(id(self))
     21 
     22     def _PrepareRender(self):
     23         self._shaderModel = trinity.GetShaderModel()
     24         trinity.SetShaderModel('SM_3_0_DEPTH')
     25         FreezeTime()
     26         self._scene = trinity.EveSpaceScene()
     27         self._object = blue.resMan.LoadObject(self._objectPath)
     28         blue.resMan.Wait()
     29         Pump()
     30         if self._object:
     31             self._InitializeObject()
     32             self._scene.objects.append(self._object)
     33 
     34     def _FinishRender(self):
     35         del self._object
     36         self._object = None
     37         del self._scene
     38         self._scene = None
     39         trinity.SetShaderModel(self._shaderModel)
     40 
     41     def _Render(self, renderInfo):
     42         if not self._scene or not self._object or not renderInfo:
     43             return
     44         view, projection = self._PrepareSceneForRender()
     45         self._DoRendering(renderInfo, view, projection)
     46 
     47     def _DoRendering(self, renderInfo, view, projection):
     48         bitmap = RenderToBitmapFromScene(renderInfo, self._scene, view, projection, postProcessingQuality=2)
     49         bitmap.Save(renderInfo.outputPath)
     50 
     51     def _InitializeObject(self):
     52         if hasattr(self._object, 'curveSets'):
     53             self._object.curveSets.removeAt(-1)
     54 
     55     def _PrepareSceneForRender(self):
     56         self._scene.sunDirection = (-0.5, -0.5, -0.6)
     57         bBoxMin = (0.0, 0.0, 0.0)
     58         bBoxMax = (0.0, 0.0, 0.0)
     59         for i in range(self._object.mesh.geometry.GetMeshAreaCount(0)):
     60             boundingBoxMin, boundingBoxMax = self._object.mesh.geometry.GetAreaBoundingBox(0, i)
     61             if abs(boundingBoxMax[1] - boundingBoxMin[1]) > 0.005:
     62                 if geo2.Vec3Length(bBoxMin) < geo2.Vec3Length(boundingBoxMin):
     63                     bBoxMin = boundingBoxMin
     64                 if geo2.Vec3Length(bBoxMax) < geo2.Vec3Length(boundingBoxMax):
     65                     bBoxMax = boundingBoxMax
     66 
     67         return GetViewAndProjectionUsingBoundingBox(bBoxMin, bBoxMax)