/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 6 . ĠSee ĠAUTHORS Ġfile . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . m br labs . m und us . editor . ui . modules . dialogs . importer Ċ Ċ import Ġcom . badlogic . gdx . G dx Ċ import Ġcom . badlogic . gdx . files . File Handle Ċ import Ġcom . badlogic . gdx . graphics . GL 2 0 Ċ import Ġcom . badlogic . gdx . graphics . Perspective Camera Ċ import Ġcom . badlogic . gdx . graphics . g 3 d . Environment Ċ import Ġcom . badlogic . gdx . graphics . g 3 d . Model Ċ import Ġcom . badlogic . gdx . graphics . g 3 d . Model Batch Ċ import Ġcom . badlogic . gdx . graphics . g 3 d . Model Instance Ċ import Ġcom . badlogic . gdx . graphics . g 3 d . attributes . Color Attribute Ċ import Ġcom . badlogic . gdx . graphics . g 3 d . environment . Direction al Light Ċ import Ġcom . badlogic . gdx . math . Vector 3 Ċ import Ġcom . badlogic . gdx . math . collision . BoundingBox Ċ import Ġcom . badlogic . gdx . scenes . scene 2 d . Input Event Ċ import Ġcom . badlogic . gdx . scenes . scene 2 d . ui . Table Ċ import Ġcom . badlogic . gdx . scenes . scene 2 d . utils . ClickListener Ċ import Ġcom . badlogic . gdx . utils . Disposable Ċ import Ġcom . badlogic . gdx . utils . G dx RuntimeException Ċ import Ġcom . badlogic . gdx . utils . UB Json Reader Ċ import Ġcom . kot cr ab . vis . ui . util . dialog . Dialog s Ċ import Ġcom . kot cr ab . vis . ui . widget . Vis Label Ċ import Ġcom . kot cr ab . vis . ui . widget . Vis Table Ċ import Ġcom . kot cr ab . vis . ui . widget . Vis Text Button Ċ import Ġcom . m br labs . m und us . commons . assets . Model Asset Ċ import Ġcom . m br labs . m und us . commons . assets . meta . Meta Model Ċ import Ġcom . m br labs . m und us . commons . g 3 d . MG 3 d Model Loader Ċ import Ġcom . m br labs . m und us . editor . M und us Ċ import Ġcom . m br labs . m und us . editor . assets . Asset AlreadyExists Exception Ċ import Ġcom . m br labs . m und us . editor . assets . Meta Saver Ċ import Ġcom . m br labs . m und us . editor . assets . Model Importer Ċ import Ġcom . m br labs . m und us . editor . core . project . Project Manager Ċ import Ġcom . m br labs . m und us . editor . events . Asset Import Event Ċ import Ġcom . m br labs . m und us . editor . ui . UI Ċ import Ġcom . m br labs . m und us . editor . ui . modules . dialogs . Base Dialog Ċ import Ġcom . m br labs . m und us . editor . ui . widgets . FileChooser Field Ċ import Ġcom . m br labs . m und us . editor . ui . widgets . Render Widget Ċ import Ġcom . m br labs . m und us . editor . utils . Log Ċ import Ġcom . m br labs . m und us . editor . utils . is Coll ada Ċ import Ġcom . m br labs . m und us . editor . utils . is FB X Ċ import Ġcom . m br labs . m und us . editor . utils . is Wave font Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* Ġ@ author ĠMar cus ĠBr um mer Ċ Ġ* Ġ@ version Ġ 0 7 - 0 6 - 2 0 1 6 Ċ Ġ*/ Ċ class ĠImport Model Dialog Ġ: ĠBase Dialog (" Import ĠMesh "), ĠDis posable Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠImport Model Dialog :: class . java . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġimport Mesh Table : ĠImport Model Table ĊĊĠĠĠ Ġprivate Ġval Ġmodel Importer : ĠModel Importer Ġ= ĠM und us . inject () ĊĠĠĠ Ġprivate Ġval Ġproject Manager : ĠProject Manager Ġ= ĠM und us . inject () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġis Modal Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Mov able Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠVis Table () ĊĠĠĠĠĠĠĠ Ġadd < Table >( root ). expand (). fill () ĊĠĠĠĠĠĠĠ Ġimport Mesh Table Ġ= ĠImport Model Table () ĊĊĠĠĠĠĠĠĠ Ġroot . add ( import Mesh Table ). min Width ( 6 0 0 f ). expand (). fill (). left (). top () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġimport Mesh Table . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠImport Model Table Ġ: ĠVis Table (), ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUI Ġelements ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġrender Widget : ĠRender Widget ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġimport Btn Ġ= ĠVis Text Button (" IMPORT ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmodel Input Ġ= ĠFile Chooser Field ( 3 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġpreview Ġmodel Ġ+ Ġinstance ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġpreview Model : ĠModel ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġpreview Instance : ĠModel Instance ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġimported Model : ĠModel Importer . Imported Model ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmodel Batch : ĠModel Batch Ġ= ĠModel Batch () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcam : ĠPers pective Camera Ġ= ĠPers pective Camera () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġenv : ĠEnvironment ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcam . position . set ( 0 f , Ġ 5 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcam . look At ( 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcam . near Ġ= Ġ 0 . 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcam . far Ġ= Ġ 1 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcam . update () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġenv Ġ= ĠEnvironment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenv . set ( Color Attribute ( Color Attribute . Ambient Light , Ġ 0 . 4 f , Ġ 0 . 4 f , Ġ 0 . 4 f , Ġ 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenv . add ( Direction al Light (). set ( 0 . 8 f , Ġ 0 . 8 f , Ġ 0 . 8 f , Ġ- 1 f , Ġ- 0 . 8 f , Ġ- 0 . 2 f )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setup UI () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setup Listener () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsetup UI () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠTable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġroot . debug All (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . pad Top ( 6 f ). pad Right ( 6 f ). pad Bottom ( 2 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( root ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Table Ġ= ĠVis Table () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Widget Ġ= ĠRender Widget ( cam ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Widget !!. set Renderer Ġ{ Ġcamera Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preview Instance Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG dx . gl . gl Clear ( GL 2 0 . GL _ DEPTH _ BUFFER _ BIT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Instance !!. transform . rotate ( 0 f , Ġ 0 f , Ġ 1 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Batch . begin ( camera ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Batch . render ( preview Instance !! , Ġenv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Batch . end () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . add ( input Table ). width ( 3 0 0 f ). height ( 3 0 0 f ). pad Right ( 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . add < Render Widget >( render Widget ). width ( 3 0 0 f ). height ( 3 0 0 f ). expand (). fill () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Table . left (). top () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Table . add ( Vis Label (" Model ĠFile ")). left (). pad Bottom ( 5 f ). row () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Table . add ( model Input ). fill X (). expand X (). pad Bottom ( 1 0 f ). row () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Table . add ( import Btn ). fill X (). expand (). bottom () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Input . set Editable ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsetup Listener () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmodel Ġcho oser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Input . set Callback Ġ{ Ġfile Handle Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Handle . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload And Show Preview ( model Input . file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġimport Ġbtn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Btn . addListener ( object Ġ: ĠClick Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclicked ( event : ĠInput Event ?, Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preview Model Ġ!= Ġnull Ġ&& Ġpreview Instance Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel Asset Ġ= Ġimport Model () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM und us . post Event ( Asset Import Event ( model Asset )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI . to aster . success (" Mesh Ġimported ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI . to aster . error (" Error Ġwhile Ġcreating Ġa ĠModel Asset ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ee : ĠAsset AlreadyExists Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . exception ( TAG , Ġee ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI . to aster . error (" Error : ĠThere Ġalready Ġexists Ġa Ġmodel Ġwith Ġthe Ġsame Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI . to aster . error (" There Ġis Ġnothing Ġto Ġimport ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class , ĠAsset AlreadyExists Exception :: class ) ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġimport Model (): ĠModel Asset Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġmodel Ġasset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Manager Ġ= Ġproject Manager . current (). asset Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel Asset Ġ= Ġasset Manager . create Model Asset ( imported Model !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġmaterials ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Asset . meta . model Ġ= ĠMeta Model () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( mat Ġin Ġmodel Asset . model . materials ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaterial Asset Ġ= Ġasset Manager . create Material Asset ( model Asset . id . substring ( 0 , Ġ 4 ) Ġ+ Ġ"_" Ġ+ Ġmat . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Asset . meta . model . default Materials . put ( mat . id , Ġmaterial Asset . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Asset . default Materials . put ( mat . id , Ġmaterial Asset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġmeta Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsa ver Ġ= ĠMeta Saver () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsa ver . save ( model Asset . meta ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Asset . apply Dependencies () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmodel Asset ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġload And Show Preview ( model : ĠFile Handle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . imported Model Ġ= Ġmodel Importer . import To Temp Folder ( model ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( imported Model Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Coll ada ( model ) Ġ|| Ġis FB X ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġis Wave font ( model )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog s . show Error Dialog ( stage , Ġ" Import Ġerror \ n Please Ġmake Ġsure Ġyou Ġspecified Ġthe Ġright Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" files Ġ& Ġhave Ġset Ġthe Ġcorrect Ġf bc - conv Ġbinary Ġin Ġthe Ġsettings Ġmenu .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog s . show Error Dialog ( stage , Ġ" Import Ġerror \ n Please Ġmake Ġsure Ġyou Ġspecified Ġthe Ġright Ġfiles ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġload Ġand Ġshow Ġpreview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( imported Model Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Model Ġ= ĠMG 3 d Model Loader ( UB Json Reader ()). load Model ( imported Model !!. g 3 db File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Instance Ġ= ĠModel Instance ( preview Model !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠG dx RuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog s . show Error Dialog ( stage , Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshow Preview () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Instance Ġ= ĠModel Instance ( preview Model !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġscale Ġto Ġ 2 Ġopen Ġgl Ġunits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounding Box Ġ= Ġpreview Instance !!. calculate BoundingBox ( BoundingBox ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġbounding Box . getMax ( Vector 3 ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Dim Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max . x Ġ> Ġmax Dim ) Ġmax Dim Ġ= Ġmax . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max . y Ġ> Ġmax Dim ) Ġmax Dim Ġ= Ġmax . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max . z Ġ> Ġmax Dim ) Ġmax Dim Ġ= Ġmax . z ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Instance !!. transform . scl ( 2 f Ġ/ Ġmax Dim ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preview Model Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Model !!. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Model Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Instance Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Input . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ