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)