Changeset 1203 in main


Ignore:
Timestamp:
06/08/12 14:18:26 (7 years ago)
Author:
pcosquer
Message:

document3D: 3D view: improve rendering

Location:
trunk/openPLM/document3D
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/openPLM/document3D/mesh.py

    r1142 r1203  
    5757 
    5858    quality_factor=0.3 
    59     opacity=0.5 
     59    opacity=0.8 
    6060    a_mesh = QuickTriangleMesh(shape.shape,quality_factor) 
    6161 
  • trunk/openPLM/document3D/templates/Display3D.htm

    r1020 r1203  
    44 
    55{% block css %} 
    6 <style> 
    7  
    8 .ajustar { 
    9 clear: both; 
    10 } 
    11 .menu { 
    12         margin: 10px; 
    13         height: 100px; 
    14         font-size: 9pt; 
    15         font-family: roman; 
    16 } 
    17 .menu ul { 
    18  
    19         margin: 0pt; 
    20         padding: 0pt; 
    21         position: relative; 
    22         z-index: 500; 
    23         list-style-type: none; 
    24         width: 11em; 
    25  
    26 } 
    27 .menu li { 
    28  
    29         background-color: #cccc99; 
    30         float: left; 
    31 } 
    32 .menu li.sub { 
    33         background-color: #cccc99; 
    34 } 
    35  
    36 .menu a, .menu a:visited { 
    37         border: 1px solid #ffffff; 
    38         overflow: hidden; 
    39         text-overflow: ellipsis; 
    40         display: block; 
    41         text-decoration: none; 
    42         height: 2em; 
    43         line-height: 2em; 
    44         width: 11em; 
    45         color: #000000; 
    46         padding-left: 1em; 
    47         font-weight: normal; 
    48         font-style: normal; 
    49         font-variant: normal; 
    50         text-transform: none; 
    51 } 
    52 .menu b { 
    53         float: right; 
    54         margin-right: 5px; 
    55 } 
    56 * html .menu a, * html .menu a:visited { 
    57         width: 11em; 
    58 } 
    59 * html .menu a:hover { 
    60         color: #ccff66; 
    61         background-color: #999966; 
    62         position: relative; 
    63         font-weight: normal; 
    64         font-style: normal; 
    65         font-variant: normal; 
    66         text-decoration: none; 
    67         text-transform: none; 
    68 } 
    69 .menu li:hover { 
    70         position: relative; 
    71 } 
    72 .menu a:active, .menu a:focus { 
    73         color: #ccff66; 
    74         background-color: #999966; 
    75         font-weight: normal; 
    76         font-style: normal; 
    77         font-variant: normal; 
    78         text-decoration: none; 
    79         text-transform: none; 
    80 } 
    81 .menu li:hover > a { 
    82         color: #ccff66; 
    83         background-color: #999966; 
    84         font-weight: normal; 
    85         font-style: normal; 
    86         font-variant: normal; 
    87         text-decoration: none; 
    88         text-transform: none; 
    89 } 
    90 .menu li ul { 
    91         padding: 2em; 
    92         visibility: hidden; 
    93         position: absolute; 
    94         top: -2em; 
    95         left: 7em; 
    96         background-color: transparent; 
    97 } 
    98 .menu li:hover > ul { 
    99         visibility: visible; 
    100 } 
    101 .menu ul a:hover ul ul { 
    102         visibility: hidden; 
    103 } 
    104 .menu ul a:hover ul a:hover ul ul { 
    105         visibility: hidden; 
    106 } 
    107 .menu ul a:hover ul a:hover ul a:hover ul ul { 
    108         visibility: hidden; 
    109 } 
    110 .menu ul a:hover ul { 
    111         visibility: visible; 
    112 } 
    113 .menu ul a:hover ul a:hover ul { 
    114         visibility: visible; 
    115 } 
    116 .menu ul a:hover ul a:hover ul a:hover ul { 
    117         visibility: visible; 
    118 } 
    119 .menu ul a:hover ul a:hover ul a:hover ul a:hover ul { 
    120         visibility: visible; 
    121 } 
    122 .trans{     
    123 position:absolute; 
    124 z-index:10;       
    125  
    126 #zoom { 
    127   position:absolute; 
    128   height:40%; 
    129   top: 30%; 
    130   right: 5%; 
    131   z-index:10;   
    132 } 
    133 div#main_content { 
    134     background-color: #848484; 
    135     box-shadow: 0 0 115px 80px #545454 inset; 
    136 }  
    137 div#main_content p { 
    138     color: white; 
    139 } 
    140 </style> 
    141       
     6    <style> 
     7 
     8        .ajustar { 
     9            clear: both; 
     10        } 
     11        .menu { 
     12            margin: 10px; 
     13            height: 100px; 
     14            font-size: 9pt; 
     15            font-family: roman; 
     16        } 
     17        .menu ul { 
     18 
     19            margin: 0pt; 
     20            padding: 0pt; 
     21            position: relative; 
     22            z-index: 500; 
     23            list-style-type: none; 
     24            width: 11em; 
     25 
     26        } 
     27        .menu li { 
     28 
     29            background-color: #cccc99; 
     30            float: left; 
     31        } 
     32        .menu li.sub { 
     33            background-color: #cccc99; 
     34        } 
     35 
     36        .menu a, .menu a:visited { 
     37            border: 1px solid #ffffff; 
     38            overflow: hidden; 
     39            text-overflow: ellipsis; 
     40            display: block; 
     41            text-decoration: none; 
     42            height: 2em; 
     43            line-height: 2em; 
     44            width: 11em; 
     45            color: #000000; 
     46            padding-left: 1em; 
     47            font-weight: normal; 
     48            font-style: normal; 
     49            font-variant: normal; 
     50            text-transform: none; 
     51        } 
     52        .menu b { 
     53            float: right; 
     54            margin-right: 5px; 
     55        } 
     56        * html .menu a, * html .menu a:visited { 
     57            width: 11em; 
     58        } 
     59        * html .menu a:hover { 
     60            color: #ccff66; 
     61            background-color: #999966; 
     62            position: relative; 
     63            font-weight: normal; 
     64            font-style: normal; 
     65            font-variant: normal; 
     66            text-decoration: none; 
     67            text-transform: none; 
     68        } 
     69        .menu li:hover { 
     70            position: relative; 
     71        } 
     72        .menu a:active, .menu a:focus { 
     73            color: #ccff66; 
     74            background-color: #999966; 
     75            font-weight: normal; 
     76            font-style: normal; 
     77            font-variant: normal; 
     78            text-decoration: none; 
     79            text-transform: none; 
     80        } 
     81        .menu li:hover > a { 
     82            color: #ccff66; 
     83            background-color: #999966; 
     84            font-weight: normal; 
     85            font-style: normal; 
     86            font-variant: normal; 
     87            text-decoration: none; 
     88            text-transform: none; 
     89        } 
     90        .menu li ul { 
     91            padding: 2em; 
     92            visibility: hidden; 
     93            position: absolute; 
     94            top: -2em; 
     95            left: 7em; 
     96            background-color: transparent; 
     97        } 
     98        .menu li:hover > ul { 
     99            visibility: visible; 
     100        } 
     101        .menu ul a:hover ul ul { 
     102            visibility: hidden; 
     103        } 
     104        .menu ul a:hover ul a:hover ul ul { 
     105            visibility: hidden; 
     106        } 
     107        .menu ul a:hover ul a:hover ul a:hover ul ul { 
     108            visibility: hidden; 
     109        } 
     110        .menu ul a:hover ul { 
     111            visibility: visible; 
     112        } 
     113        .menu ul a:hover ul a:hover ul { 
     114            visibility: visible; 
     115        } 
     116        .menu ul a:hover ul a:hover ul a:hover ul { 
     117            visibility: visible; 
     118        } 
     119        .menu ul a:hover ul a:hover ul a:hover ul a:hover ul { 
     120            visibility: visible; 
     121        } 
     122        .trans{     
     123            position:absolute; 
     124            z-index:10;       
     125         
     126        #zoom { 
     127            position:absolute; 
     128            height:40%; 
     129            top: 30%; 
     130            right: 5%; 
     131            z-index:10;   
     132        } 
     133        div#main_content { 
     134            background-color: #848484; 
     135            box-shadow: 0 0 115px 80px #545454 inset; 
     136        }  
     137        div#main_content p { 
     138            color: white; 
     139        } 
     140    </style> 
     141 
    142142{% endblock %} 
    143143 
     
    151151        </p> 
    152152    {% else %} 
    153     <div class="trans" > 
    154         <div class="menu" id="menu_">   </div> 
    155     </div>  
    156  
    157  
    158     <div id="webgl_warning" class="main" style="display:none;"> 
    159         <div class="warning_container"> 
    160             <div class="warning"> 
    161  
    162                 <p><strong>WARNING:</strong> Your browser does not support <a target="_top" href="http://www.khronos.org/webgl/wiki/Main_Page">WebGL</a>. Thingiview works best with WebGL support, which is available in the following browsers:</p> 
    163                 <ul> 
    164                     <li><a target="_top" href="http://www.google.com/chrome">Google Chrome 9+</a> (Recommended)</li> 
    165                     <li><a target="_top" href="http://www.khronos.org/webgl/wiki/Getting_a_WebGL_Implementation">Firefox 4.0+</a></li> 
    166  
    167                     <li><a target="_top" href="http://www.khronos.org/webgl/wiki/Getting_a_WebGL_Implementation">Safari Nightly (OS X 10.6+ only)</a></li> 
    168                 </ul> 
    169                 <p>Or, you can <a href="javascript: show_thingiview();">try Thingiview at your own risk</a>. It may lock up your computer!</p> 
     153        <div class="trans" > 
     154            <div class="menu" id="menu_">   </div> 
     155        </div>  
     156 
     157 
     158        <div id="webgl_warning" class="main" style="display:none;"> 
     159            <div class="warning_container"> 
     160                <div class="warning"> 
     161 
     162                    <p><strong>WARNING:</strong> Your browser does not support <a target="_top" href="http://www.khronos.org/webgl/wiki/Main_Page">WebGL</a>. Thingiview works best with WebGL support, which is available in the following browsers:</p> 
     163                    <ul> 
     164                        <li><a target="_top" href="http://www.google.com/chrome">Google Chrome 9+</a> (Recommended)</li> 
     165                        <li><a target="_top" href="http://www.khronos.org/webgl/wiki/Getting_a_WebGL_Implementation">Firefox 4.0+</a></li> 
     166 
     167                        <li><a target="_top" href="http://www.khronos.org/webgl/wiki/Getting_a_WebGL_Implementation">Safari Nightly (OS X 10.6+ only)</a></li> 
     168                    </ul> 
     169                    <p>Or, you can <a href="javascript: show_thingiview();">try Thingiview at your own risk</a>. It may lock up your computer!</p> 
     170                </div> 
    170171            </div> 
    171172        </div> 
    172     </div> 
    173173 
    174174    {% endif %} 
     
    179179 
    180180{% block scripts %}  
    181    
     181 
    182182    <script type="text/javascript" src="/media/js/3D/three-min.js"></script>  
    183183    {% for item in GeometryFiles %} 
     
    188188 
    189189 
    190 if ( !window.requestAnimationFrame ) { 
    191  
    192     window.requestAnimationFrame = ( function() { 
    193  
    194         return window.webkitRequestAnimationFrame || 
    195         window.mozRequestAnimationFrame || 
    196         window.oRequestAnimationFrame || 
    197         window.msRequestAnimationFrame || 
    198         function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element ) { 
    199  
    200             window.setTimeout( callback, 1000 / 60 ); 
    201  
    202         }; 
    203  
    204 } )(); 
    205  
    206 }                
     190        if ( !window.requestAnimationFrame ) { 
     191 
     192            window.requestAnimationFrame = ( function() { 
     193 
     194                    return window.webkitRequestAnimationFrame || 
     195                    window.mozRequestAnimationFrame || 
     196                    window.oRequestAnimationFrame || 
     197                    window.msRequestAnimationFrame || 
     198                    function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element ) { 
     199 
     200                    window.setTimeout( callback, 1000 / 60 ); 
     201 
     202                    }; 
     203 
     204                    } )(); 
     205 
     206        }                
    207207 
    208208{% if javascript_arborescense %} 
    209 {{javascript_arborescense|safe}}                 
    210 {% endif %} 
    211  
    212 var zoom_var=50  
    213 var camera, scene, renderer; 
    214 var container; 
    215 var main_content;             
    216 var width ; 
    217 var height ; 
    218 var deep ; 
    219 var controls;    
    220 $(document.getElementById( 'main_content' )).ready(init); 
    221 animate(); 
    222  
    223 function init() { 
    224  
    225  
    226  
    227 if (!has_webgl()){ 
    228  
    229 document.getElementById("webgl_warning").style.display = 'block';  
    230  
    231 } 
    232 else{ 
    233 container=document.getElementById('main_content'); 
    234          
    235 scene = new THREE.Scene(); 
    236 scene.add( new THREE.AmbientLight( 0x0ff20 ) ); 
    237 light1 = new THREE.PointLight( 0xff0040 ); 
    238 scene.add( light1 ); 
    239 centrer_objet(object3D); 
    240  
    241 scene.add( object3D); 
    242  
    243  
    244  
    245 camera = new THREE.PerspectiveCamera( 40, $(container).width() / $(container).height(), 0.1, radius*200 ); 
    246 camera.position.z = radius*1.5; 
    247  
    248  
    249 renderer = new THREE.WebGLRenderer(); 
    250 renderer.setSize( $(container).width(), $(container).height() ); 
    251 container.appendChild( renderer.domElement ); 
    252  
    253 zoom = document.createElement("div"); 
    254 zoom.id = 'zoom'; 
    255 container.appendChild( zoom ); 
    256  
    257  
    258          
    259 controls = new THREE.TrackballControls( camera, renderer.domElement ); 
    260 controls.rotateSpeed = 1.0; 
    261 controls.zoomSpeed = 1.2; 
    262 controls.panSpeed = 0.2; 
    263 controls.noZoom = true; 
    264 controls.noPan = false; 
    265 controls.staticMoving = false; 
    266 controls.dynamicDampingFactor = 0.3; 
    267 controls.minDistance = 0; 
    268 controls.maxDistance = radius * 100; 
    269 controls.keys = [ 65, 83, 68 ]; // [ rotateKey, zoomKey, panKey ] [A,S,D]                
    270      
    271 menu(); 
    272 container.focus() 
    273      
    274  
    275 renderer.render(scene, camera);  
    276  
    277  
    278  
    279 $(function() { 
    280         $( "#zoom" ).slider({ 
    281                 orientation: "vertical", 
    282                 min: 0, 
    283                 max: 100, 
    284                 value: 50, 
    285             start: function() { /*$('#zoom_bar').data('sliding', true )*/ }, 
    286         stop:  function() {  }, 
    287                 slide: function( event, ui ) { 
    288             total=zoom_var-ui.value; 
    289             zoom_var=ui.value; 
    290                     camera.translateZ(1.49999*radius*(total/50)); 
    291                     if($('#zoom_bar .ui-slider-handle:focus').length){ 
    292                     } 
    293             else{ 
     209    {{javascript_arborescense|safe}}             
     210 
     211    var zoom_var=50      
     212    var camera, scene, renderer; 
     213    var container; 
     214    var main_content;             
     215    var width ; 
     216    var height ; 
     217    var deep ; 
     218    var controls = null;         
     219    $(document.getElementById( 'main_content' )).ready(init); 
     220    animate(); 
     221 
     222    function init() { 
     223 
     224        if (!has_webgl()){ 
     225            document.getElementById("webgl_warning").style.display = 'block';  
     226        } 
     227        else{ 
     228            container=document.getElementById('main_content'); 
     229 
     230            scene = new THREE.Scene(); 
     231            // init the lights 
     232 
     233            var ambient = new THREE.AmbientLight( 0xffffff ); 
     234            scene.add( ambient ); 
     235 
     236            var light   = new THREE.DirectionalLight( 0xffffff ); 
     237            light.position.set(1, 1, 4 ).normalize(); 
     238            spot1 = light; 
     239            scene.add( light ); 
     240 
     241            var light   = new THREE.SpotLight( 0xffffff, 2 ); 
     242            spot2   = light; 
     243            light.target.position.set( 0, 8, 0 ); 
     244            light.shadowCameraNear      = 0.01;      
     245            light.castShadow        = true; 
     246            light.shadowDarkness        = 0.1; 
     247            scene.add( light ); 
     248 
     249            centrer_objet(object3D); 
     250            for (var i=0; i < object3D.children.length; i++) { 
     251                var obj = object3D.children[i]; 
     252                obj.receiveShadow=true; 
     253                obj.castShadow=true; 
     254                obj.material =  new THREE.MeshPhongMaterial({ 
     255                    ambient             : 0x000000, 
     256                    shininess   : 1000,  
     257                    specular    : 0x000000, 
     258                    shading             : THREE.SmoothShading, 
     259                    color: obj.material.color.getHex(), 
     260                    opacity: 0.8//  obj.material.opacity 
     261                }); 
    294262            } 
    295  
    296                 } 
    297                  
    298  
    299                  
    300                  
    301         }); 
    302          
    303 });   
    304  
    305  
    306 } 
    307 }                        
    308  
    309  
    310 function has_webgl(){ 
    311 return !!window.WebGLRenderingContext; 
    312 } 
    313  
    314 function centrer_objet(object3D){        
    315          
    316 boundingBox=computeGroupBoundingBox(object3D); 
    317                          
    318 width =Math.abs(boundingBox.x[ 1 ]-boundingBox.x[ 0 ]); 
    319 height =Math.abs(boundingBox.y[ 1 ]-boundingBox.y[ 0 ]); 
    320 deep =Math.abs(boundingBox.z[ 1 ]-boundingBox.z[ 0 ]); 
    321  
    322 radius=Math.max(width,height,deep); 
    323  
    324 object3D.position.x=-(boundingBox.x[ 0 ]+boundingBox.x[ 1 ])/2; 
    325 object3D.position.y=-(boundingBox.y[ 0 ]+boundingBox.y[ 1 ])/2;   
    326 object3D.position.z=-(boundingBox.z[ 0 ]+boundingBox.z[ 1 ])/2;  
    327  
    328 } 
    329                          
    330 function animate() { 
    331  
    332 requestAnimationFrame(animate); 
    333  
    334 controls.update(); 
    335 renderer.render( scene, camera ); 
    336  
    337  
    338 }; 
    339  
    340  
    341                                  
    342 function computeGroupBoundingBox(Object_Group) {    
    343     var boundingBox; 
    344     for ( var v = 0 ;v  < Object_Group.children.length; v ++ ) { 
    345     var geo=THREE.GeometryUtils.clone(Object_Group.children[v].geometry); 
    346     geo.applyMatrix(Object_Group.children[v].matrix); 
    347     geo.computeBoundingBox(); 
    348     BB=geo.boundingBox; 
    349     if (BB){     
    350     if(!boundingBox){ 
    351     boundingBox= {  
    352     'x':[BB.min.x, BB.max.x], 
    353     'y':[BB.min.y, BB.max.y], 
    354     'z':[BB.min.z, BB.max.z] 
    355     };  
     263            object3D.castShadow = true; 
     264            object3D.receiveShadow = true; 
     265            scene.add( object3D); 
     266 
     267            camera = new THREE.PerspectiveCamera( 40, $(container).width() / $(container).height(), 0.1, radius*200 ); 
     268            camera.position.z = radius*1.5; 
     269 
     270            renderer = new THREE.WebGLRenderer({ 
     271                antialias               : true, // to get smoother output 
     272                preserveDrawingBuffer   : true  // to allow screenshot 
     273            }); 
     274            renderer.setSize( $(container).width(), $(container).height() ); 
     275            renderer.shadowMapEnabled   = true; 
     276            renderer.shadowMapSoft              = true; 
     277            container.appendChild( renderer.domElement ); 
     278 
     279            controls = new THREE.TrackballControls( camera, renderer.domElement ); 
     280            spot1_controls = new THREE.TrackballControls( spot1, renderer.domElement ); 
     281            spot2_controls = new THREE.TrackballControls( spot2, renderer.domElement ); 
     282             
     283            var ctrls = [controls, spot1_controls, spot2_controls ]; 
     284            for (var i = 0; i < ctrls.length; i++) { 
     285                var ctrl = ctrls[i]; 
     286                ctrl.rotateSpeed = 1.0; 
     287                ctrl.zoomSpeed = 1.2; 
     288                ctrl.panSpeed = 0.2; 
     289                ctrl.noZoom = true; 
     290                ctrl.noPan = false; 
     291                ctrl.staticMoving = false; 
     292                ctrl.dynamicDampingFactor = 0.3; 
     293                ctrl.minDistance = 0; 
     294                ctrl.maxDistance = radius * 100; 
     295                ctrl.keys = [ 65, 83, 68 ]; // [ rotateKey, zoomKey, panKey ] [A,S,D]                
     296            } 
     297                
     298 
     299            menu(); 
     300            container.focus() 
     301            renderer.render(scene, camera);  
     302 
     303            zoom = document.createElement("div"); 
     304            zoom.id = 'zoom'; 
     305            container.appendChild( zoom ); 
     306            $( "#zoom" ).slider({ 
     307                orientation: "vertical", 
     308                min: 0, 
     309                max: 100, 
     310                value: 50, 
     311                start: function() { /*$('#zoom_bar').data('sliding', true )*/ }, 
     312                stop:  function() {  }, 
     313                slide: function( event, ui ) { 
     314                    total=zoom_var-ui.value; 
     315                    zoom_var=ui.value; 
     316                    camera.translateZ(1.49999*radius*(total/50)); 
     317 
     318                } 
     319 
     320 
     321            }); 
     322 
     323        } 
     324    }                    
     325 
     326 
     327    function has_webgl(){ 
     328        return !!window.WebGLRenderingContext; 
    356329    } 
    357     else{ 
    358     boundingBox.x[0]=Math.min(BB.min.x, boundingBox.x[0]); 
    359     boundingBox.y[0]=Math.min(BB.min.y, boundingBox.y[0]); 
    360     boundingBox.z[0]=Math.min(BB.min.z, boundingBox.z[0]); 
    361     boundingBox.x[1]=Math.max(BB.max.x, boundingBox.x[1]); 
    362     boundingBox.y[1]=Math.max(BB.max.y, boundingBox.y[1]); 
    363     boundingBox.z[1]=Math.max(BB.max.z, boundingBox.z[1]); 
     330 
     331    function centrer_objet(object3D){    
     332 
     333        boundingBox=computeGroupBoundingBox(object3D); 
     334 
     335        width =Math.abs(boundingBox.x[ 1 ]-boundingBox.x[ 0 ]); 
     336        height =Math.abs(boundingBox.y[ 1 ]-boundingBox.y[ 0 ]); 
     337        deep =Math.abs(boundingBox.z[ 1 ]-boundingBox.z[ 0 ]); 
     338 
     339        radius=Math.max(width,height,deep); 
     340 
     341        object3D.position.x=-(boundingBox.x[ 0 ]+boundingBox.x[ 1 ])/2; 
     342        object3D.position.y=-(boundingBox.y[ 0 ]+boundingBox.y[ 1 ])/2;   
     343        object3D.position.z=-(boundingBox.z[ 0 ]+boundingBox.z[ 1 ])/2;  
     344 
    364345    } 
    365     }    
     346 
     347    function animate() { 
     348        requestAnimationFrame(animate); 
     349        if (controls != null ){ 
     350            controls.update(); 
     351            spot1_controls.update(); 
     352            spot2_controls.update(); 
     353            renderer.render( scene, camera ); 
     354        } 
     355    }; 
     356 
     357 
     358    function computeGroupBoundingBox(Object_Group) {    
     359        var boundingBox; 
     360        for ( var v = 0 ;v  < Object_Group.children.length; v ++ ) { 
     361            var geo=THREE.GeometryUtils.clone(Object_Group.children[v].geometry); 
     362            geo.applyMatrix(Object_Group.children[v].matrix); 
     363            geo.computeBoundingBox(); 
     364            BB=geo.boundingBox; 
     365            if (BB){     
     366                if(!boundingBox){ 
     367                    boundingBox= {  
     368                        'x':[BB.min.x, BB.max.x], 
     369                        'y':[BB.min.y, BB.max.y], 
     370                        'z':[BB.min.z, BB.max.z] 
     371                    };  
     372                } 
     373                else{ 
     374                    boundingBox.x[0]=Math.min(BB.min.x, boundingBox.x[0]); 
     375                    boundingBox.y[0]=Math.min(BB.min.y, boundingBox.y[0]); 
     376                    boundingBox.z[0]=Math.min(BB.min.z, boundingBox.z[0]); 
     377                    boundingBox.x[1]=Math.max(BB.max.x, boundingBox.x[1]); 
     378                    boundingBox.y[1]=Math.max(BB.max.y, boundingBox.y[1]); 
     379                    boundingBox.z[1]=Math.max(BB.max.z, boundingBox.z[1]); 
     380                } 
     381            }    
     382        } 
     383        return boundingBox; 
    366384    } 
    367 return boundingBox; 
    368 } 
    369          
    370          
    371  
    372 </script> 
    373  
    374 {% endblock %} 
     385 
     386 
     387    {% endif %} 
     388 
     389    </script> 
     390 
     391    {% endblock %} 
Note: See TracChangeset for help on using the changeset viewer.