Thank you for this question.With a custom Python script, there is a way to accomplish this task.
Copy the attached script into your workspace, and add it to the scrips menu:
<SPAN class="string token">''' Created on Oct 31, 2017 Modified on Apr 4, 2018 @author: Esri R&D Zurich '''</SPAN> <SPAN class="keyword token">from</SPAN> scripting <SPAN class="keyword token">import</SPAN> <SPAN class="operator token">*</SPAN> <SPAN class="keyword token">import</SPAN> math <SPAN class="comment token"># get a CityEngine instance</SPAN> ce <SPAN class="operator token">=</SPAN> CE<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> hRes <SPAN class="operator token">=</SPAN> <SPAN class="number token">1080</SPAN> <SPAN class="keyword token">def</SPAN> <SPAN class="token function">getCamera</SPAN><SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> camPos <SPAN class="operator token">=</SPAN> view<SPAN class="punctuation token">.</SPAN>getCameraPosition<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> camRot <SPAN class="operator token">=</SPAN> view<SPAN class="punctuation token">.</SPAN>getCameraRotation<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> camAoV <SPAN class="operator token">=</SPAN> view<SPAN class="punctuation token">.</SPAN>getCameraAngleOfView<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> camPoI <SPAN class="operator token">=</SPAN> view<SPAN class="punctuation token">.</SPAN>getCameraPoI<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> camPoIDist <SPAN class="operator token">=</SPAN> math<SPAN class="punctuation token">.</SPAN>sqrt<SPAN class="punctuation token">(</SPAN>math<SPAN class="punctuation token">.</SPAN>pow<SPAN class="punctuation token">(</SPAN>camPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>camPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN> \ math<SPAN class="punctuation token">.</SPAN>pow<SPAN class="punctuation token">(</SPAN>camPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>camPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN> \ math<SPAN class="punctuation token">.</SPAN>pow<SPAN class="punctuation token">(</SPAN>camPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>camPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> camPersp <SPAN class="operator token">=</SPAN> view<SPAN class="punctuation token">.</SPAN>getCameraPerspective<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">return</SPAN> camPos<SPAN class="punctuation token">,</SPAN>camRot<SPAN class="punctuation token">,</SPAN>camAoV<SPAN class="punctuation token">,</SPAN>camPoIDist<SPAN class="punctuation token">,</SPAN>camPersp <SPAN class="keyword token">def</SPAN> <SPAN class="token function">setCamera</SPAN><SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">,</SPAN>camPos<SPAN class="punctuation token">,</SPAN>camRot<SPAN class="punctuation token">,</SPAN>camAoV<SPAN class="punctuation token">,</SPAN>camPoIDist<SPAN class="punctuation token">,</SPAN>camPersp <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> view<SPAN class="punctuation token">.</SPAN>setCameraPosition<SPAN class="punctuation token">(</SPAN>camPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>camPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>camPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> view<SPAN class="punctuation token">.</SPAN>setCameraRotation<SPAN class="punctuation token">(</SPAN>camRot<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>camRot<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>camRot<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> view<SPAN class="punctuation token">.</SPAN>setPoIDistance<SPAN class="punctuation token">(</SPAN>camPoIDist<SPAN class="punctuation token">)</SPAN> view<SPAN class="punctuation token">.</SPAN>setCameraAngleOfView<SPAN class="punctuation token">(</SPAN>min<SPAN class="punctuation token">(</SPAN><SPAN class="number token">160.0</SPAN><SPAN class="punctuation token">,</SPAN>camAoV<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> view<SPAN class="punctuation token">.</SPAN>setCameraPerspective<SPAN class="punctuation token">(</SPAN>camPersp<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">def</SPAN> <SPAN class="token function">getViewshed</SPAN><SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> vsPos <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getObserverPoint<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN> vsRot <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="number token">0.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0.0</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">if</SPAN> ce<SPAN class="punctuation token">.</SPAN>isViewshed<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> vsRot<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getTiltAndHeadingAngles<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> vsRot<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="operator token">-</SPAN>ce<SPAN class="punctuation token">.</SPAN>getTiltAndHeadingAngles<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> vsAoV <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getAnglesOfView<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> vsPoIDist <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getViewDistance<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN> vsRatio <SPAN class="operator token">=</SPAN> vsAoV<SPAN class="operator token">/</SPAN>ce<SPAN class="punctuation token">.</SPAN>getAnglesOfView<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">elif</SPAN> ce<SPAN class="punctuation token">.</SPAN>isViewDome<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> vsAoV <SPAN class="operator token">=</SPAN> <SPAN class="number token">360.0</SPAN> vsPoIDist <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getViewDistance<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN> vsRatio <SPAN class="operator token">=</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="keyword token">elif</SPAN> ce<SPAN class="punctuation token">.</SPAN>isViewCorridor<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> vsPoI <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getPOI<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN> vsRot<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> math<SPAN class="punctuation token">.</SPAN>atan2<SPAN class="punctuation token">(</SPAN>vsPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>vsPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> \ math<SPAN class="punctuation token">.</SPAN>sqrt<SPAN class="punctuation token">(</SPAN>math<SPAN class="punctuation token">.</SPAN>pow<SPAN class="punctuation token">(</SPAN>vsPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>vsPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN> \ math<SPAN class="punctuation token">.</SPAN>pow<SPAN class="punctuation token">(</SPAN>vsPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>vsPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">*</SPAN><SPAN class="number token">180</SPAN><SPAN class="operator token">/</SPAN>math<SPAN class="punctuation token">.</SPAN>pi vsRot<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="operator token">-</SPAN>math<SPAN class="punctuation token">.</SPAN>atan2<SPAN class="punctuation token">(</SPAN>vsPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>vsPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> \ <SPAN class="operator token">-</SPAN><SPAN class="punctuation token">(</SPAN>vsPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>vsPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">*</SPAN><SPAN class="number token">180</SPAN><SPAN class="operator token">/</SPAN>math<SPAN class="punctuation token">.</SPAN>pi vsAoV <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getAnglesOfView<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> vsPoIDist <SPAN class="operator token">=</SPAN> math<SPAN class="punctuation token">.</SPAN>sqrt<SPAN class="punctuation token">(</SPAN>math<SPAN class="punctuation token">.</SPAN>pow<SPAN class="punctuation token">(</SPAN>vsPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>vsPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN> \ math<SPAN class="punctuation token">.</SPAN>pow<SPAN class="punctuation token">(</SPAN>vsPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>vsPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN> \ math<SPAN class="punctuation token">.</SPAN>pow<SPAN class="punctuation token">(</SPAN>vsPoI<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="operator token">-</SPAN>vsPos<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> vsRatio <SPAN class="operator token">=</SPAN> vsAoV<SPAN class="operator token">/</SPAN>ce<SPAN class="punctuation token">.</SPAN>getAnglesOfView<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">return</SPAN> vsName <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getName<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">return</SPAN> vsPos<SPAN class="punctuation token">,</SPAN>vsRot<SPAN class="punctuation token">,</SPAN>vsAoV<SPAN class="punctuation token">,</SPAN>vsPoIDist<SPAN class="punctuation token">,</SPAN>vsRatio<SPAN class="punctuation token">,</SPAN>vsName <SPAN class="keyword token">def</SPAN> <SPAN class="token function">snapshot360</SPAN><SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">,</SPAN>vsName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># make six square snapshots</SPAN> view<SPAN class="punctuation token">.</SPAN>setCameraAngleOfView<SPAN class="punctuation token">(</SPAN><SPAN class="number token">90.0</SPAN><SPAN class="punctuation token">)</SPAN> vdAoV <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">90</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">180</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">90</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">90</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">90</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN> suffixes <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">"_f"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"_l"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"_b"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"_r"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"_u"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"_d"</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">for</SPAN> i<SPAN class="punctuation token">,</SPAN> suffix <SPAN class="keyword token">in</SPAN> enumerate<SPAN class="punctuation token">(</SPAN>suffixes<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> view<SPAN class="punctuation token">.</SPAN>setCameraRotation<SPAN class="punctuation token">(</SPAN>vdAoV<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>vdAoV<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN> view<SPAN class="punctuation token">.</SPAN>snapshot<SPAN class="punctuation token">(</SPAN>ce<SPAN class="punctuation token">.</SPAN>toFSPath<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'images/'</SPAN><SPAN class="operator token">+</SPAN>vsName<SPAN class="operator token">+</SPAN>suffix<SPAN class="operator token">+</SPAN><SPAN class="string token">'.png'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>hRes<SPAN class="punctuation token">,</SPAN>hRes<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">def</SPAN> <SPAN class="token function">snapshotViewshed</SPAN><SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">,</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># get initial camera parameters</SPAN> camPos<SPAN class="punctuation token">,</SPAN>camRot<SPAN class="punctuation token">,</SPAN>camAoV<SPAN class="punctuation token">,</SPAN>camPoIDist<SPAN class="punctuation token">,</SPAN>camPersp <SPAN class="operator token">=</SPAN> getCamera<SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># get viewshed parameters</SPAN> vsPos<SPAN class="punctuation token">,</SPAN>vsRot<SPAN class="punctuation token">,</SPAN>vsAoV<SPAN class="punctuation token">,</SPAN>vsPoIDist<SPAN class="punctuation token">,</SPAN>vsRatio<SPAN class="punctuation token">,</SPAN>vsName <SPAN class="operator token">=</SPAN> getViewshed<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">if</SPAN> ce<SPAN class="punctuation token">.</SPAN>isViewDome<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> snapshot360<SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">,</SPAN>vsName<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># set camera to viewshed parameters</SPAN> setCamera<SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">,</SPAN>vsPos<SPAN class="punctuation token">,</SPAN>vsRot<SPAN class="punctuation token">,</SPAN>vsAoV<SPAN class="punctuation token">,</SPAN>vsPoIDist<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># make a snapshot</SPAN> view<SPAN class="punctuation token">.</SPAN>snapshot<SPAN class="punctuation token">(</SPAN>ce<SPAN class="punctuation token">.</SPAN>toFSPath<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'images/'</SPAN><SPAN class="operator token">+</SPAN>vsName<SPAN class="operator token">+</SPAN><SPAN class="string token">'.png'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>hRes<SPAN class="operator token">*</SPAN>vsRatio<SPAN class="punctuation token">,</SPAN>hRes<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># reset camera to initial camera parameters</SPAN> setCamera<SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">,</SPAN>camPos<SPAN class="punctuation token">,</SPAN>camRot<SPAN class="punctuation token">,</SPAN>camAoV<SPAN class="punctuation token">,</SPAN>camPoIDist<SPAN class="punctuation token">,</SPAN>camPersp<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">if</SPAN> __name__ <SPAN class="operator token">==</SPAN> <SPAN class="string token">'__main__'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># get selected viewsheds, view domes and view corridors</SPAN> view <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getObjectsFrom<SPAN class="punctuation token">(</SPAN>ce<SPAN class="punctuation token">.</SPAN>get3DViews<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> viewsheds <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getObjectsFrom<SPAN class="punctuation token">(</SPAN>ce<SPAN class="punctuation token">.</SPAN>selection<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>ce<SPAN class="punctuation token">.</SPAN>isViewshed<SPAN class="punctuation token">)</SPAN> viewdomes <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getObjectsFrom<SPAN class="punctuation token">(</SPAN>ce<SPAN class="punctuation token">.</SPAN>selection<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>ce<SPAN class="punctuation token">.</SPAN>isViewDome<SPAN class="punctuation token">)</SPAN> viewCorridors <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>getObjectsFrom<SPAN class="punctuation token">(</SPAN>ce<SPAN class="punctuation token">.</SPAN>selection<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>ce<SPAN class="punctuation token">.</SPAN>isViewCorridor<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># preparations</SPAN> initialSelection <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>selection<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> ce<SPAN class="punctuation token">.</SPAN>setSelection<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> al <SPAN class="keyword token">in</SPAN> ce<SPAN class="punctuation token">.</SPAN>getObjectsFrom<SPAN class="punctuation token">(</SPAN>ce<SPAN class="punctuation token">.</SPAN>scene<SPAN class="punctuation token">,</SPAN>ce<SPAN class="punctuation token">.</SPAN>isAnalysisLayer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> ce<SPAN class="punctuation token">.</SPAN>setLayerPreferences<SPAN class="punctuation token">(</SPAN>al<SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Visible"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">)</SPAN> tmpLayer <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>addAnalysisLayer<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'TEMP Analysis Layer'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># make snapshots</SPAN> <SPAN class="keyword token">for</SPAN> viewshed <SPAN class="keyword token">in</SPAN> <SPAN class="punctuation token">(</SPAN>viewsheds<SPAN class="operator token">+</SPAN>viewdomes<SPAN class="operator token">+</SPAN>viewCorridors<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">if</SPAN> ce<SPAN class="punctuation token">.</SPAN>isViewCorridor<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> ce<SPAN class="punctuation token">.</SPAN>setLayerPreferences<SPAN class="punctuation token">(</SPAN>tmpLayer<SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Visible"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN> ce<SPAN class="punctuation token">.</SPAN>setLayerPreferences<SPAN class="punctuation token">(</SPAN>tmpLayer<SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Visible"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">)</SPAN> tmpViewshed <SPAN class="operator token">=</SPAN> ce<SPAN class="punctuation token">.</SPAN>copy<SPAN class="punctuation token">(</SPAN>viewshed<SPAN class="punctuation token">,</SPAN><SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">,</SPAN>tmpLayer<SPAN class="punctuation token">)</SPAN> snapshotViewshed<SPAN class="punctuation token">(</SPAN>view<SPAN class="punctuation token">,</SPAN>tmpViewshed<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> ce<SPAN class="punctuation token">.</SPAN>delete<SPAN class="punctuation token">(</SPAN>tmpViewshed<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># clean up</SPAN> ce<SPAN class="punctuation token">.</SPAN>delete<SPAN class="punctuation token">(</SPAN>tmpLayer<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> al <SPAN class="keyword token">in</SPAN> ce<SPAN class="punctuation token">.</SPAN>getObjectsFrom<SPAN class="punctuation token">(</SPAN>ce<SPAN class="punctuation token">.</SPAN>scene<SPAN class="punctuation token">,</SPAN>ce<SPAN class="punctuation token">.</SPAN>isAnalysisLayer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> ce<SPAN class="punctuation token">.</SPAN>setLayerPreferences<SPAN class="punctuation token">(</SPAN>al<SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Visible"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN> ce<SPAN class="punctuation token">.</SPAN>setSelection<SPAN class="punctuation token">(</SPAN>initialSelection<SPAN class="punctuation token">)</SPAN> <SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Hi Thomas
EDIT: How it works? I´m just trying to use the script and after add and run were the snapshot was saved?
I found the snapshot. It´s not the same image from View Dome (360 perspective).
I´m not python expert but...it´s possible to get exactly the same view? Here my printscreen (I got poor quality from printscreens)
I´m creating 360 panoramas from my project using printscreens from DomeView (low quality) and the script will be really usefull.
Here a sample of my CityEngine project in 360 panorama(Low quality) Roundme - create Stock 360 VR panoramic pictures virtual tour online . Also it´s possible to upload the same image on Facebook to view 360 on smartphones.
Hi Luiz
Thank you for your input. I changed the script in my post above to add export support for 360 panoramas from CityEngine View Domes.
For View Domes it now creates six 90° x 90° square snapshots (back, down, front, left, right, up).
These can be stitched and re-projected from cubemap to equirectangular format with common VR/panorama tools.
Here is a link to a free online tool: 360Toolkit - Convert and View Panorama Pictures Instantly
Amazing
I´ll try in few minutes and I´ll share here the result
It works very well
Here the new panorama Roundme - create Stock 360 VR panoramic pictures virtual tour online
Thank you so much.
I have been looking for this as well! Thanks Thomas!
Hi Thomas, Is there any concern with me adapting this as a distributed script?geodesign-toolkit-gis-cityengine-integration-tools/Scripts at master · Holisticnature/geodesign-toolkit-gis-cityengine-i…
I was thinking about put a folder call "Esri Scripts". One concern that I had is a lot of the geonet snippits have no license attached. Should I assume it is Apache 2.0 like most esri projects?
Code snippets published on Esri GeoNet protected by any license, need to respect the associated usage rights. They must be marked accordingly by the publisher. Any license violations need to be reported to the forum administrator.
Generally, CityEngine CGA and Python snippets published by Esri employees, are meant to support our customers in achieving their goals in accordance with the product's software license. For further information please visit Esri Legal Information | Overview
In your case distribution of GeoNet snippets under the Apache 2.0 license in a folder called "Esri Scripts" is appropriate.
Hi Thomas,
Understood. This is the set up I did. If you have any required edits you can let me know.
geodesign-toolkit-gis-cityengine-integration-tools/snapshotSelectedViewsheds.py at master · Holisticnature/geodesign-too…
I made minor edits to the script (I think for domes I need a small edit or two). I might work with it a little more to iterate through layers/ scenarios (not sure the API exposes scenarios yet). Thanks for sharing this. I have a sample image I did in a street scene.
This is awesome, and I wish it was a one button click feature.
Thank you Thomas, David, Luiz and Amna. I was just about to screen-grab all my viewsheds when I noticed this timely and awesome post. Much appreciated everyone.
Alan K.
Hi Alan, Do you think it would help if I had it export these types of images based on where bookmarks are located rather than where the analysis layers are?
David
Heya David,
I'm just testing both these scripts on view domes but not exactly sure what you mean ? As in the actual naming convention of View Dome VS the geo location ?
Hi Alan, I meant that currently the 360 script will take a 360 photo from the perspective of an analysis layer (where the view dome object is). I was curious if it would be helpful if it did so from a bookmark instead? The drawback here is you can't view the images before export.
Largely just asking for multiple scenarios.
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.