gH]kDwP$Rosetta Beta 7.61[VS_O93YJClinton Reese, Clintons 3D Creations`d8pM*#ͺO2PNG  IHDR@@% IDATxُ]וÙ\YUdLjEInm +F$@$O~_txl$(DR*|V{ϸ@e5٦vq}ƍoo9MRv73 D՛oIuמyz㝋oO'Ӽ,VwwmnX\ʲ j%Y+4u}ww{[\\xm]`ƫHuJk`U43ñ$ϹQʟ5kz1`w߹x믽l֍Q`o_>3g\򲎣h?kڽ)-Fe$QGJ Dd "֫zt$*kEM#DXCv l{~)b)BV23 "" >`  d(iMxw?_\ZW2Y<㓢;k)jLΛ94T"bT(MUr+3!_w#"& &pi ~vБq!C+KDr`jE5Y@MS8 tDVK< >/ [ RHMtW.@, (msɬ+H2V9v!`$N fDF} qQL8q$PDD;@D`6^uU$T2GJG_RB/\JI0n4E,xSRRt,JӘ>P`]R $y v.kW9\{gBp"%@BJGQe R<瞹JHF D(E^8?}WWPR88NRj@`,|PHHL{(umۜNr"T"/K%4{DR@Iq8M=02GJGQ9 3 `:wܙف>$^zO@a_΃=ꏂ1Vˆy $gyk ᜣf;\aLU@k3;3K_t{_?bNt0;Gfgg]m+So?nGR3m:@$ieQ2@}&e_~koǕ+R򩲪"%Sb=>:\X]]}x</--f.nC+KQ# $0J@[|:yB"JڑcGD%U]*ғ;:~p8ŭ57FQܛQ~(jT_zg}͛e4nomn+936&uρYC!{}DB8MpX;rĝՏ[}+?~ݭvUk_uB!x2YX?ѧb| 0L0#37u (E&J*^J6@X?\COl^\Xw;OmÞ)>kPnzGRÇ;3yɫǏlo Xbzkuʓ++ `vнrh~ocgkwv0c}u烊Bؘ;8ËgduwYs#+)mmL:O85-&,`os?ï9wv{{s<>RJ""(jg{78888wtvov1,KQ o.MH%JHJ眎#"_WnɭQ1|`vowXZ;ٴq2>V&LQLO_:-8Ļy_t婫W=19w-G fB`ݾP$B*@@U] A'0{f@彃êtf?9mDvƵ{d09܁Ψv[[= o{e5\xpm%gdʘ"n۸uV+ŒNy{ʣyQĭ#I7HmM3\Ǻ*\~xgo:ћ1DuC:U_GC7WօVB`D9;8:ϧyయe1`SׯJǎt(kTii_޻~wMitـDN5;P^^MFyqh:98::" $(Sԭ}`po۬Yju9$J  NPP׾^yg7nLN&?lwEG+ '##o7M7WS'GSb|hǁA)e3ޝGU] 0 C(A+ٲ,bb N$wv_+5NWw_֍tBe<5M@ {o?)]v'qQz"&|4HƐT+_}t'2EɁ )BIa/KO]/XG)Yo_xwo^VWyzQt U;Q։N'-j{W.J/éj/.,[`eqGY(0 t$i4px`yy%Mu}l~.8gϟɫbt8/|s)88M$RJDcau\8:tfaqӗN.?۷N[o%#罐 Lc==`&vuŏR+ҝS`TUӬ>ޝ݋wa:g4NS -!0֢ےbjOW/_xB.|w*({&Fm|` Xqnn{F:ZS~X:[3+ F*˻"vgNi!ePG2(gVN_?__RD-^Zg(jLDJVi! ,JE{!0#Uu 3Ky x|4uNGRJm@SOç:y$NTlON uOά|G^UU>ZF)cj!&Ӊ*y"PJ@c)AR30sf=Gɥ,ͦImLEՔ!: xzJ͝rѝnUm۲N| VuQjRJ23 |R#29됁XDT(}D@@y:cB =J}ȔMmRF}MpToܾ+)Rp?37"3 K%tDVOTRB9HB8? Yb'R{S U`<+,,~hwf"!ToNU($K)bD<64UDGY#FȰgdJ "~'SF'Z#,OARD,Bg=إn!XiEq@(4&P`4RH9P>Eiєi+inw>=rkFQֽAOhc}#sQ'q W9c}N cm~=3ΗSIxRc (2xRQ<7;R ^+)Um!}ft*n !|rzR:/,8 CD)!;[["Nqs4AFc=oE`:e$)T QJRx)LDYTC]{ODNxk1z{{^fƙA9d86&Zk-'E:w‹Q~Zg1`.Ѿ5u 6VODR:.EJZYUkS(UUy88rb䣏9{XY[ke]9wQJn (CP$ibwD\j-~QvPT)@ .QGёcOBx@(/Q=ԇ{̠dt4_L3_W>ևO?Nӟ޼yʕg}w/_{擪 "}IENDB`/tfѭ8Lwb"qD܂dKu=! @install statistics Button v1.01`3.;]kI 忞@.;]kI 忞@"SubObject*Encapsulated objects"7Wb`'NG 34W}@O{4W}@O{$ Owner4Owner of the Encapsulator$(XFҦV(XFҦV"LE2Data$LE2 Data for node >g'JNjn*p" zFAa| zFAa|DhelpText\vRm)EC!avRm)EC!aD leftClickScript\1V {E!Y1V {E!YD name\!K0}q!K0}qD"rightClickScript\-1OSM n-1OSM n"LayoutLayout 럆L<_ї"1V {E!YsayHello!K0}q2System.Alert("goodbye");(XFҦV>g'JNjn*pFDCr@@P@)C?vRm)EC!a<System.Alert("hello there!"); zFAa|say hello-1OSM n 럆L<_ї%DefaultOˁ CRih[  h }}LActivity.Run('%THIS_NAME%' + "/doIt")8install buttons and scriptsZ`Ez]UO}}< Lm X `._E#ބ6 CustomFrame(`7.;]kI 忞@"`L74W}@O{$*O΢C}*O΢C} WinIDWindow ID8-pϗO 0)t-pϗO 0)PositionShelf Position mz!OHwc`9`9>-MD'zZt>-MD'zZRectangle"Screen Rectangle THj6F 2s*9RÒGbDeC tRÒGbDeC  WidthWindow width`9`:[FB%n*jt[FB%n*jHeightWindow height`9 [GDJM [GDJMMin Width$Min. Window width%]GJ7ψ%]GJ7ψMin Height&Min. Window height^^Dy^^DyMax Width$Max. Window widthv43N tv43N tMax Height&Max. Window height~൱D@ j#^c~൱D@ j#^cMaximized(Window Is Maximized 9@'s9@'sRootNodeRootNode{Q !aOt {Q !aOt  TitleTitle Text6*Mv46*Mv4View Index$View window indexf$I `7f$I `7Frame TypeFrame Typej^G@!,j^G@!,"ViewersViewers array 2bOdA)f "I)LL !I)LL ! Def1D Default 1D GUID8M0cry8M0cry Def2D Default 2D GUIDF L$3F L$3 Def3D Default 3D GUIDobFFJL}obFFJL}SnappedTo$Snapped To WindowBXPjKɸtEBXPjKɸtE SnappedToTarget@Snapped To Window Target CornerkJHx(V@WkJHx(V@W SnappedToSource@Snapped To Window Source CornerKTLA7~fKTLA7~f"SnappedToOffsetX6Snapped To Window Offset XK8Y8O#=gtMK8Y8O#=gtM"SnappedToOffsetY6Snapped To Window Offset Ymk~_Lb.mk~_Lb.SnappedToWidth0Snapped To Window Width|7EId |7EId  SnappedToHeight2Snapped To Window HeightKXtO LKXtO L,StartSnappedToOffsetXBStart Snapped To Window Offset XVG))jHETVG))jHET,StartSnappedToOffsetYBStart Snapped To Window Offset Y?V{N7l?V{N7lSnappedToRatio,Snapped To Ratio Mode 86*n^HD9t 86*n^HD9t OwnedByOwned By|_ D|_ DTabsAsButtons Tabs As Buttons _N>G1_N>G1HiddenHidden Flag \q^2FII3w\q^2FII3wPreference,View Preference Panel >=жaMpT>=жaMpT&HideDockedTitlebarJHide Title bar when window is docked N'D)L-N'D)L-MinimizedBHJWindow Is Minimized into Blue Handle ϕ`&FSx9wϕ`&FSx9wSizeLockPrevent horizontal and/or vertical size change. 0x01 - horizontal, 0x02 - vertical˽OS˽OSDispTitleText,Display Titlebar Text Ī8mݧC>!7Ī8mݧC>!7SmallerTabs*Display smaller Tabs (XFҦV"&BXPjKɸtEkJHx(V@W|_ D8M0cryN{485B725E-A69D-4AD5-A876-B3BBA72D2C0A}mk~_Lb.[FB%n*jRÒGbDeC 1 [GDJM6*Mv4K8Y8O#=gtM\q^2FII3w{Q !aOt f$I `7v43N t I)LL !obFFJL}Ī8mݧC>!7^^Dy(XFҦV>g'JNjn*pFBCX@1@?*O΢C}N{5FDDFE6E-518F-464A-B4B9-8D24B556E36C}9@'s_N>G1-pϗO 0)mz!OHwc ˽OSF L$3>=жaMpTϕ`&FSx9w>-MD'zZ%]GJ7ψj^G@!,2bOdA)f 6^r[HJv-, ^r[HJv-, KXtO LVG))jHET?V{N7l ~൱D@ j#^cKTLA7~f|7EId 86*n^HD9t N'D)L-^r[HJv-,  Toolbar.;]kI 忞@"`L4W}@O{$n_<&KES Qn_<&KES Q NameItem nameo(K ]p do(K ]p dHelpTextHelp text8Cechg8Cechg RowsToolbar RowsNL {NL {$Dimension$Toolbar dimension$Z_IFL!OSZ_IFL!OSHorizontal Horizontal Flag .S)A2UЍc.S)A2UЍcIsSubToolbar$IsSubToolbar Flag =JM@hM Q3=JM@hM Q3IsImportant2IsImportant Toolbar Flag .UuwO e.UuwO eIDToolbar ID'0#ԪC'X/9}'0#ԪC'X/9}$ IndexItem Index$_N>G1JdWJc~JdWJc~PrototypePrototype name<9BH@b\<9BH@b\IsMinimizedPTrue/False flag if toolbar is minimized m O1Wwm O1Ww$IsAspectT(Aspect Toolbar Flag $(XFҦV".UuwO e'0#ԪC'X/9}=JM@hM Q3 m O1Ww(XFҦV>g'JNjn*pFBCb@ f@?NL {Z_IFL!OS _N>G18CechgJdWJc~n_<&KES Q.S)A2UЍc o(K ]p d<9BH@b\ R/$ķKniaW statsButton'0#ԪC'X/9}]8teO?s]8teO?s"MaxItemTxtHeight.Maximal item text size% sH?DC sH?DCTagTag%IlfāA>ˁwIlfāA>ˁwTagAliasTag Alias%/ru|GF0/ru|GF0AgentIDUpdate agentID(XFҦVLE2Data, 1"-1OSM n".;]kI 忞@"W4W}@O{$n_<&KES Qo(K ]p dQm6l3Ll/V^Qm6l3Ll/V^CommandAction commandN="QEj%:N="QEj%:RClickCommand,RClick Action Command$ܿORE bi$ܿORE biPreview2D8Item preview 2D resource id*S]?G[~x;*S]?G[~x;Preview3D8Item preview 3D resource idSr)B8Sr)B8Package"Package class idDNOQsP'ѭDNOQsP'ѭBitmap.Item preview 3D bitmap eSBgciDsL[wiDsL[wRadio Group(Radio buttons group4E*4E*ControlID2D&User Control ID 2Dh>ǑJ]@<h>ǑJ]@<ControlID3D&User Control ID 3D+fyOA7XC+fyOA7XC MaxItemBmpWidth2Maximal item bitmap sizeTl@fC.^&GZTl@fC.^&GZ"MaxItemBmpHeight2Maximal item bitmap sizeh0OY~ C h0OY~ C  MaxItemTxtWidth.Maximal item text size%?Aυ D)7t?Aυ D)7tGrayPercentxGray icon about specified percents if it is not highlighted][D+Iv(][D+Iv( MenuAct As Menu 8{Nm(!8{Nm(!IsMenuButtonIs Menu Button ko6ǑJ]@<N{2BBC850E-6EEF-4364-9265-A4A606AE464B}4W}@O{/ru|GF0N{00000000-0000-0000-0000-000000000000}$ܿORE bi/(XFҦV>g'JNjn*pFCAb@v@p8B?+fyOA7XCko6ˁwn_<&KES Q statisticsPanelo(K ]p dvleft click object stats panel, right click for scene statsTl@fC.^&GZ?Aυ D)7tU]8teO?s-1OSM n 럆L<_ї0Sr)B8.;]kI 忞@ sH?DCDNOQsP'ѭeSBgcU VC:\Users\Clint\Pictures\statisticsIcon.bmpP I` x?X4bܽ4sD4< UM߲ PpΖQh}ԞQ{8늣=E@Fg@ 9py=d|(xT'tʞQ G* 4\xb]n(8cΥo޲Qy$Te48@J g'JNjn*pceZU@䑧rceZU@䑧r$_scriptData*Internal Script data [җJs@ %b4W}@O{$(XFҦVLE2Data, 1#J@#QLJ@#QLLE2Data$LE2 Data for node >g'JNjn*pLE2Data, 3MT^RwL~YYTMT^RwL~YYTޢLE2Data$LE2 Data for node >g'JNjn*pLE2Data, 22|=Bynj2|=Bynj Control OutTransitionOutz@Hoz@Ho Control InTransitionIn 2|=Bynj2AEHM'>g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommand\// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here owner = System.ThisOwner(); button1 = "statsButton"; theScript1 = "objectStats"; theScript2 = "sceneStats"; // if(Node.Exists("/Project/Windows Manager Space/CustomFrame/Toolbar/" + button1)) { replaceLeft = System.Question(button1 + " button already exists in the toolbar. Would you like to replace it?"); if(replaceLeft) Node.Delete("/Project/Windows Manager Space/CustomFrame/Toolbar/" + button1); else return; } //check for and create customframe if(!Node.Exists("/Project/Windows Manager Space/CustomFrame")) Node.Copy(owner + "/CustomFrame","/Project/Windows Manager Space"); //copy buttons to custom frame oldButt = Node.Copy(owner + "/" + button1,"/Project/Windows Manager Space/CustomFrame/Toolbar"); //copy script to custom commands //create CustomCommands if(!Node.Exists("/Scripts/CustomCommands")) { temp = Node.Create("Kernel Package/Object","/Scripts"); custcom = Node.Rename(temp,"CustomCommands"); } if(Node.Exists("/Scripts/CustomCommands/" + theScript1)) { replaceLeft = System.Question(theScript1 + " script already exists. Would you like to replace it?"); if(replaceLeft) Node.Delete("/Scripts/CustomCommands/" + theScript1); else return; } Node.Copy(owner + "/" + theScript1,"/Scripts/CustomCommands"); if(Node.Exists("/Scripts/CustomCommands/" + theScript2)) { replaceLeft = System.Question(theScript2 + " script already exists. Would you like to replace it?"); if(replaceLeft) Node.Delete("/Scripts/CustomCommands/" + theScript2); else return; } Node.Copy(owner + "/" + theScript2,"/Scripts/CustomCommands"); //activate it WindowsManager.Activate(); WindowsManager.UpdateWindowsStructure(); //reset the toolbar //1D Aspect WindowsManager.SetWindowAspect('/Project/Windows Manager Space/CustomFrame', 1); //2D Aspect WindowsManager.SetWindowAspect('/Project/Windows Manager Space/CustomFrame', 2); } NScript Object Package/jScript language4W}@O{(XFҦV>g'JNjn*pn7C`b@H@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_їjControlOˁ CRih[ Ca8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Ca:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho܂dKu= sceneStats&.;]kI 忞@"/`'4W}@O{$(XFҦV" J(M⢝x9 J(M⢝x9B overt overtB ]Lӵ oU ]Lӵ oUB oedge oedgeBu8E'u8E'B otri otriBa A(a A(B oface ofaceB  BJ  BJBoface3oface3BuǫiIMkuǫiIMkBoface4oface4B&UWKI ̙&UWKI ̙BofacemofacemB-1OSM n": wh&LEO-x~: wh&LEO-x~BtotalCounttotalCountB]i I+rB]i I+rBBlightCountlightCountB9(@_imփ9(@_imփBcameraCountcameraCountB~5FO*ޗh~5FO*ޗhBmeshCountmeshCountB u8E'~5FO*ޗhuǫiIMk ]Lӵ oU(XFҦV>g'JNjn*pF@!D^@x@CJ?a A(: wh&LEO-x~&UWKI ̙  BJ J(M⢝x9]i I+rB9(@_imփ-1OSM n 럆L<_їˆDefault Notesall- GFʠN=P4o}01 }}9(@_imփZ`Ez]UO1釥GP>aP4o}00 }}9(@_imփZ`Ez]UO GFʠN=P 4o}01 }}]i I+rBZ`Ez]UO1釥GP>aP 4o}00 }}]i I+rBZ`Ez]UO GFʠN= P04o}01 }} ]Lӵ oUZ`Ez]UO1釥GP>aP 04o}00 }} ]Lӵ oUZ`Ez]UO GFʠN=0P@4o}01 }}a A(Z`Ez]UO1釥GP>aP0@4o}00 }}a A(Z`Ez]UO GFʠN=@PP4o}01 }}  BJZ`Ez]UO1釥GP>aP@P4o}00 }}  BJZ`Ez]UO GFʠN=PP`4o}01 }}uǫiIMkZ`Ez]UO1釥GP>aPP`4o}00 }}uǫiIMkZ`Ez]UO GFʠN=`Pp4o}01 }}&UWKI ̙Z`Ez]UO1釥GP>aP`p4o}00 }}&UWKI ̙Z`Ez]UO GFʠN=pP4o}01 }}u8E'Z`Ez]UO1釥GP>aPp4o}00 }}u8E'Z`Ez]UO GFʠN=P4o}01 }} J(M⢝x9Z`Ez]UO1釥GP>aP4o}00 }} J(M⢝x9Z`Ez]UO GFʠN=P4o}01 }}: wh&LEO-x~Z`Ez]UO1釥GP>aP4o}00 }}: wh&LEO-x~Z`Ez]UO1釥GP>a@xH$0 }} ]Lӵ oUZ`Ez]UO1釥GP>a@(x@H$0 }}a A(Z`Ez]UO1釥GP>a@xH$0 }}  BJZ`Ez]UO1釥GP>a@xH$0 }}uǫiIMkZ`Ez]UO1釥GP>a@x H$0 }}&UWKI ̙Z`Ez]UO1釥GP>a@xH$0 }}u8E'Z`Ez]UO1釥GP>a@xxH$0 }} J(M⢝x9Z`Ez]UO GFʠN=x8H$)}}verticesZ`Ez]UO GFʠN=8H$&}}edgesZ`Ez]UO GFʠN=(8@H$+}} face totalZ`Ez]UO GFʠN=8H$*}} trianglesZ`Ez]UOOˁ CRih[PxpH$}}ZActivity.Run('%THIS_NAME%' + "/objectInfo");updateZ`Ez]UO GFʠN=8 H$)}}>4 sidedZ`Ez]UO GFʠN=8H$(}}4 sidedZ`Ez]UO GFʠN=8H$(}}3 sidedZ`Ez]UO GFʠN=8H$1 }}9(@_imփZ`Ez]UO1釥GP>a@xH$0 }}9(@_imփZ`Ez]UO GFʠN=80H$1 }}]i I+rBZ`Ez]UO1釥GP>a@x0H$0 }}]i I+rBZ`Ez]UO GFʠN=P8hH$1 }}: wh&LEO-x~Z`Ez]UO1釥GP>a@PxhH$0 }}: wh&LEO-x~Z`Ez]UO GFʠN=08HH$1 }}~5FO*ޗhZ`Ez]UO1釥GP>a@0xHH$0 }}~5FO*ޗhZ`Ez]UO GFʠN=@O"}}oZ`Ez]UO GFʠN=@XO,}} version 1.0Z`Ez]UO}}}}}}48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?cBD_7ceZU@䑧r[җJs@ 2NewCommand+//globals var sceneItemList = System.CreateDO('Common Data Package/String Array Data'); var numValidSceneItems; function getnumedges() { num = 0; for(i=0;i<numtri;i++) { edgeflags = facedges.edges(i); if((edgeflags & 1)==1) num++; if((edgeflags & 2)==2) num++; if((edgeflags & 4)==4) num++; } return num; } function checktris(trind, edgeflags) { var edgeflags2; var curi, curj, curk; var countdown; if(triarray[trind]) return; triarray[trind] = true; //System.Trace("checktris index" + trind + " edge flags " + edgeflags); mydata.SetIndex(trind); var edgenei = mydata.GetIndex(); var ijk = edgenei.split(" "); triedindex = ijk[0]; if(triedindex != -1) if(!triarray[triedindex]) { //look for tri with cur jk and cur ki and cur ij //ji if((edgeflags & 1)!=1) { //System.Trace("checktris jk check"); localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(triedindex); checktris(triedindex, edgeflags2); } } triedindex = ijk[1]; if(triedindex != -1) if(!triarray[triedindex]) { //kj if((edgeflags & 2)!=2) { //System.Trace("checktris jk check"); localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(triedindex); checktris(triedindex, edgeflags2); } } triedindex = ijk[2]; if(triedindex != -1) if(!triarray[triedindex]) { //ki if((edgeflags & 4)!=4) { //System.Trace("checktris ki check"); localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(triedindex); checktris(triedindex, edgeflags2); } } return; } function objectInfo(firstSel) { if(Node.ConExists(firstSel,"Mesh")) { themesh = System.CreateDO("Space 3D Package/Mesh Data"); themesh = Node.Value(firstSel,"Mesh"); overtT = overtT + themesh.GetNumVertices(); numtri = themesh.GetNumTriangles(); otriT = otriT + numtri; thetris = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data"); thetris = themesh.GetTriangles(); facedges = System.CreateDO("Space 3D Package/Face Edges Stream Data"); facedges = themesh.GetTrianglesStreamByName("Face Edges Stream Data"); oedgeT = oedgeT + getnumedges(); try { mydata = System.CreateDO('Clintons3D Package/Triangle neighbor data'); } catch(err) { System.Alert("Requires Clintons3D Package v.1638403 or greater"); return; } mydata.SetMesh(firstSel); var j; var edgeflags; triarray = new Array(numtri); for(i=0;i<numtri;i++) triarray[i] = false; count3=0; count4=0; count5=0; for(j=0;j<numtri;j++) { if(!triarray[j]) { //System.Trace("main loop " + j); localcount = 0; //check edge flags edgeflags = facedges.edges(j); localcount=1; if(edgeflags == 7) { triarray[j] = true; } else { //localcount=0; checktris(j, edgeflags); } if(localcount==1) count3++; if(localcount==2) count4++; if(localcount>2) count5++; } } //Node.Value(owner, "oface") = count3 + count4 + count5; //Node.Value(owner, "oface3") = count3; //Node.Value(owner, "oface4") = count4; //Node.Value(owner, "ofacem") = count5; ofaceT = ofaceT + count3 + count4 + count5; oface3T = oface3T + count3; oface4T = oface4T + count4; ofacemT = ofacemT + count5; } } function ExploreNode(thePath) { //declare local variables for recusrsive calls var curIndex; var curnumObj; var childPath, MyObj; //is renderable includes meshes, lights and cameras meshFlag=false; if(Node.IsRenderable(thePath)) { if(!Node.IsCamera(thePath) && !Node.IsLight(thePath)) meshFlag=true; if(Node.IsLight(thePath)) lightT++; if(Node.IsCamera(thePath)) cameraT++; numobjT++; } //if(Node.IsRenderable(thePath)) if(meshFlag) { //System.Trace(thePath); meshT++; objectInfo(thePath); } //get first child curIndex = 0; curnumObj = Node.SubObjectCount(thePath); if(curnumObj > 0) { MyObj = Node.SubObject(thePath,0); childPath = thePath + "/" + MyObj; } //recursion runs here - get the next child while(curnumObj > 0) { ExploreNode(childPath); curIndex = curIndex + 1; if(curIndex < curnumObj) { MyObj = Node.SubObject(thePath, curIndex); childPath = thePath + "/" + MyObj; } else curnumObj = 0; } } // Execute // Called to execute the command function Execute(params) { owner = System.ThisOwner(); overtT = 0; oedgeT = 0; otriT = 0; ofaceT = 0; oface3T = 0; oface4T = 0; ofacemT = 0; lightT = 0; cameraT = 0; numobjT = 0; meshT=0; // TODO: put your action code here scene = Space.CurrentScene(); sceneItemList.Clear(); numValidSceneItems = 0; totalSceneItemsCount = Node.SubObjectCount(scene); ExploreNode(scene); //firstSel = Node.FirstSelected(); //if(!firstSel) return; //objectInfo(firstSel); Node.Value(owner, "cameraCount") = cameraT; Node.Value(owner, "lightCount") = lightT; Node.Value(owner, "meshCount") = meshT; Node.Value(owner, "totalCount") = numobjT; Node.Value(owner, "oface") = ofaceT; Node.Value(owner, "oface3") = oface3T; Node.Value(owner, "oface4") = oface4T; Node.Value(owner, "ofacem") = ofacemT; Node.Value(owner, "overt") = overtT; Node.Value(owner, "otri") = otriT; Node.Value(owner, "oedge") = oedgeT ; } NScript Object Package/jScript language Y>Math Package/Matrix Float DatalocalMatrix `^02eE{|@QTI!o-rt>Math Package/Matrix Float DataownerMatrix `^02eE{|@NτLIsH=$1>Math Package/Matrix Float DataworldMatrix `^02eE{|@EhCI:<@uintobjectverts]O'J:Hintobjectedges'G2Xa)gint objecttrianglesKkint"objecttotalfaces_ʠB`Udintobjectfaces3aQE_TPintobjectfaces4AŊI04intobjectfaces5cBD_7intselvertsٸ-DIp]intseltriangles"5/I|`intseltotalfaceszqVWII_pf݃@intselfaces3#d}D |sNintselfaces4D]GHhVQ`intselfaces53vN#0Math Package/Point DataobjectBB uMF86F`O,O bintseledgesKD?RARint Control OutTransitionOutΨ:DvfCv2|=BynjKD?RAR]O'J:H4W}@O{aQE_TP'G2Xa)g(XFҦV>g'JNjn*pnCkCb@u@2|=Bynj|?z@Hoۙ>?QTI!o-rtNτLIsH=$1#d}D |sN_ʠB`UdJ@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?3vN#EhCI:<@u-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOD]GHhVQ`AŊI04MT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho,O b"5/I|`ٸ-DIp]Kk܂dKu=LZ objectStats.`OG .;]kI 忞@" `G G ` G `G RG G G `G G `G G tG NG 4W}@O{$(XFҦV" J(M⢝x9B ]Lӵ oUBu8E'Ba A(B  BJBuǫiIMkB&UWKI ̙B-1OSM n"à?LWc𨔈2à?LWc𨔈2B sedge sedgeB+F~MH+F~MHB svert svertB欚@6p欚@6pB stri striB,&IC".|",&IC".|"B sface sfaceBc;LOYƐ>LOYƐ y, 1No description`G 󻐼EB%t&'󻐼EB%t&' y, 2No descriptionG  35EpR 35EpRzNo description`G 3G`HTyg3G`HTyg z, 1No descriptionG ?aL!B7U?aL!B7U z, 2No description`G 70nYl_DD<԰70nYl_DD<԰ x, 3No descriptionG i}mCjJYi}mCjJY x, 4No description=G IILRlPYIILRlPY x, 5No description`=G UJm1I#F`UJm1I#F` y, 3No description`F cd%Hcd%H y, 4No descriptionLOYƐ?1BBk 35EpR+F~MHuǫiIMkTK?JFܟ5 PMBF"K (kB4x]pAIv[0? ]Lӵ oU  BJ J(M⢝x9i}mCjJY 7|;YLuçRp_M1z?䠎BNVI?IILRlPY?؁ȼKvM1'?EZ O_^5[ȆKrDYjڶ?j@uƋKRJ@)n@8glo:KDZ 7NKR~zc;a0F@(0 }}bEE"i1Z`Ez]UO1釥GP>aHFX(0 }})n@8glZ`Ez]UO1釥GP>a`Fp(0 }}h@ JrЋZ`Ez]UO1釥GP>aF(0 }}70nYl_DD<԰Z`Ez]UO1釥GP>aF(0 }}i}mCjJYZ`Ez]UO1釥GP>aF(0 }}IILRlPYZ`Ez]UO1釥GP>aF(0 }}EZ O_^5Z`Ez]UO1釥GP>aF(0 }}7NKR~zZ`Ez]UO1釥GP>aF((0 }}[ȆKrDYjڶZ`Ez]UO1釥GP>aH0@(0 }} 7|;YLuçZ`Ez]UO1釥GP>aHHX(0 }}>LOYƐZ`Ez]UO1釥GP>aH`p(0 }}󻐼EB%t&'Z`Ez]UO1釥GP>aH(0 }}UJm1I#F`Z`Ez]UO1釥GP>aH(0 }}cd%HZ`Ez]UO1釥GP>aH(0 }}䠎BNVIZ`Ez]UO1釥GP>aH(0 }} ؜YޒO9[FXwZ`Ez]UO1釥GP>aF(0 }}"K (kB4xZ`Ez]UO1釥GP>aF((0 }}Rp_M1zZ`Ez]UO1釥GP>a0@(0 }} 35EpRZ`Ez]UO1釥GP>aHX(0 }}3G`HTygZ`Ez]UO1釥GP>a`p(0 }}?aL!B7UZ`Ez]UO1釥GP>a(0 }}o:KDZ Z`Ez]UO1釥GP>a(0 }}PMBFZ`Ez]UO1釥GP>a(0 }}]pAIv[0Z`Ez]UO1釥GP>a(0 }}?1BBkZ`Ez]UO1釥GP>a(0 }} HLKfT _Z`Ez]UO1釥GP>a((0 }}؁ȼKvM1'Z`Ez]UOOˁ CRih[8`X(}}ZActivity.Run('%THIS_NAME%' + "/objectInfo");UpdateZ`Ez]UO GFʠN=h8H(7 }}ActiveTK?JFܟ5Z`Ez]UOͽ>fdN*5ՒhhHX(, }}TK?JFܟ5Z`Ez]UO GFʠN= 0('}}matrixZ`Ez]UO GFʠN=(-}} owner matrixZ`Ez]UO GFʠN=(-}} pivot matrixZ`Ez]UO GFʠN=@("}}XZ`Ez]UO GFʠN=@("}}YZ`Ez]UO GFʠN=("}}ZZ`Ez]UO1釥GP>a@0xH0$0 }} ]Lӵ oUZ`Ez]UO1釥GP>a@Hx`0$0 }}a A(Z`Ez]UO1釥GP>a@`xx0$0 }}  BJZ`Ez]UO1釥GP>a@xx0$0 }}uǫiIMkZ`Ez]UO1釥GP>a@x0$0 }}&UWKI ̙Z`Ez]UO1釥GP>a@x0$0 }}u8E'Z`Ez]UO1釥GP>a@x00$0 }} J(M⢝x9Z`Ez]UO1釥GP>a0H0$0 }}à?LWc𨔈2Z`Ez]UO1釥GP>a00$0 }}+F~MHZ`Ez]UO1釥GP>a0$0 }}欚@6pZ`Ez]UO1釥GP>aH`0$0 }},&IC".|"Z`Ez]UO1釥GP>a`x0$0 }}c;ax0$0 }}19PDW$+hsZ`Ez]UO1釥GP>a0$0 }}j@uƋKRJ@Z`Ez]UO GFʠN=800$)}}verticesZ`Ez]UO GFʠN=@x0$'}}objectZ`Ez]UO GFʠN=0$*}} selectionZ`Ez]UO GFʠN=08H0$&}}edgesZ`Ez]UO GFʠN=H8`0$+}} face totalZ`Ez]UOOˁ CRih[`8x0$}}^Activity.Run('%THIS_NAME%' + "/selectfaces3"); face3Z`Ez]UOOˁ CRih[x80$}}^Activity.Run('%THIS_NAME%' + "/selectfaces4"); quadZ`Ez]UOOˁ CRih[80$}}^Activity.Run('%THIS_NAME%' + "/selectfaces5"); ngonZ`Ez]UO GFʠN=80$*}} trianglesZ`Ez]UOOˁ CRih[80$}}ZActivity.Run('%THIS_NAME%' + "/objectInfo");updateZ`Ez]UO GFʠN=`0$1 }}TK?JFܟ5Z`Ez]UOͽ>fdN*5Ւh`0$, }}TK?JFܟ5Z`Ez]UO GFʠN=@X` }}The pivot tab shows the Matrix, Owner Matrix and Pivot Matrix. Location, Rotation and Scale down the panel and XYZ left to right.Z`Ez]UO GFʠN=@X` }}Selection face counts are not good and edges are counted twice when they have 2 triangles associated with them(which is most of the time).Z`Ez]UO GFʠN=X` -}} version 1.01Z`Ez]UO}}}}}}70nYl_DD<԰ ؜YޒO9[FXw(XFҦV>g'JNjn*pFDHBh@ h@PBB?cd%H󻐼EB%t&'?欚@6pu8E' HLKfT _à?LWc𨔈2bEE"i13G`HTygh@ JrЋ?UJm1I#F`&UWKI ̙19PDW$+hs< 48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ :NewCommand// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here firstSel = Node.FirstSelected(); if(!firstSel) return; if(!Node.ConExists(firstSel,"Mesh")) return; if(!Node.ConExists(firstSel,"Selection")) return; sel = System.CreateDO("Space 3D Package/Selection Data"); sel = Node.Value(firstSel,"Selection"); themesh = System.CreateDO("Space 3D Package/Mesh Data"); themesh = Node.Value(firstSel,"Mesh"); numtris = themesh.GetNumTriangles(); facedges = System.CreateDO("Space 3D Package/Face Edges Stream Data"); facedges = themesh.GetTrianglesStreamByName("Face Edges Stream Data"); thetris = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data"); thetris = themesh.GetTriangles(); sel.ClearSelection(); Node.Value(firstSel,"Selection") = sel; } NScript Object Package/jScript languageF 04W}@O{(XFҦV>g'JNjn*pnCCb@H@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommand// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here firstSel = Node.FirstSelected(); if(!firstSel) return; if(!Node.ConExists(firstSel,"Mesh")) return; if(!Node.ConExists(firstSel,"Selection")) return; sel = System.CreateDO("Space 3D Package/Selection Data"); sel = Node.Value(firstSel,"Selection"); themesh = System.CreateDO("Space 3D Package/Mesh Data"); themesh = Node.Value(firstSel,"Mesh"); numtris = themesh.GetNumTriangles(); facedges = System.CreateDO("Space 3D Package/Face Edges Stream Data"); facedges = themesh.GetTrianglesStreamByName("Face Edges Stream Data"); thetris = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data"); thetris = themesh.GetTriangles(); mydata = System.CreateDO('Clintons3D Package/Triangle neighbor data'); mydata.SetMesh(firstSel); triarray = new Array(numtris); for(i=0;i<numtris;i++) triarray[i] = false; sel.ClearSelection(); Node.Value(firstSel,"Selection") = sel; } NScript Object Package/jScript language~൱D#^c4W}@O{(XFҦV>g'JNjn*pnC=Cb@H@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho܂dKu=\g local mat G .;]kI 忞@"`G F G `G ` G 4W}@O{$` G RuB[Eb=zRuB[Eb=zIn MatrixInput matrix `^02eE{|@`G (XFҦV"` G bEE"i1`G G  7|;YLuçF ` G  35EpRG `F )n@8glG G >LOYƐ`F `G 3G`HTyg`G G h@ JrЋ`G `G 󻐼EB%t&'`G G ?aL!B7UG  󻐼EB%t&'?h@ JrЋ?(XFҦV>g'JNjn*pFB Cb@ f@?RuB[Eb=z 7|;YLuç>LOYƐbEE"i1 35EpR?aL!B7U?)n@8gl3G`HTyg$1w@t]g "Decompose Matrix`G RuB[Eb=zpG `G G G M5 5TM5 5RotationRotation uMF86F`OG `G 4.cbJPjŦT4.cbJPjŦ Scale Scale uMF86F`O`G G ܍ܥ&@)6gT܍ܥ&@)6gTranslation$Translation Point uMF86F`OF `G 4W}@O{%(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pLE2Data, 2[B;RH_rj[B;RH_rjLE2Data, 6$LE2 Data for node >g'JNjn*pLE2Data, 3[HFd[HFdLE2Data, 9$LE2 Data for node >g'JNjn*pLE2Data, 6MI+YDGbFVMI+YDGbFVLE2Data, 8$LE2 Data for node >g'JNjn*pLE2Data, 4'_0D['_0D[LE2Data, 5$LE2 Data for node >g'JNjn*pLE2DataJy3g'JNjn*pLE2Data, 5n7ptLQ~kn7ptLQ~kLE2Data, 3$LE2 Data for node >g'JNjn*pLE2Data, 7oBQcOC&3oBQcOC&3LE2Data, 3$LE2 Data for node >g'JNjn*pLE2Data, 9܍ܥ&@)6g[B;RH_rj>g'JNjn*pF[CT`@X@?4W}@O{(XFҦV>g'JNjn*pF*D@-Db@@T@?RuB[Eb=zM5 5[HFd>g'JNjn*pF[CT`@X@?n7ptLQ~k>g'JNjn*pF[CT`@X@?MI+YDGbFV>g'JNjn*pF[CT`@X@?Jy3g'JNjn*pF[CT`@X@?c4Vg'JNjn*pF[CT`@X@?oBQcOC&3>g'JNjn*pF[CT`@X@?4.cbJPjŦ-1OSM n 럆L<_їDefault GFʠN=HL1 }}RuB[Eb=zZ`Ez]UO GFʠN= 0HL1 }}M5 5Z`Ez]UO GFʠN=0@HL1 }}4.cbJPjŦZ`Ez]UO GFʠN= HL1 }}܍ܥ&@)6gZ`Ez]UO'_0D[>g'JNjn*pF[CT`@X@?ͤ*EgbĬh LocationceZU@䑧r%F 4W}@O{$`F  7|;YLuçP G F iE$I#tiE$I#inputPointNo description uMF86F`O`F `F `G `F bEE"i1P` G `G  35EpRP` G .;]kI 忞@"(XFҦVLE2Data, 1#՞'fA5-_՞'fA5-_D3DEYED3DEYE =xNT{-1OSM n"c4Vg'JNjn*pFDAb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pFdD@Db@@T@?[HFd>g'JNjn*pFDAb@T@?n7ptLQ~k>g'JNjn*pFDAb@T@? 7|;YLuç՞'fA5-_iE$I#bEE"i1MI+YDGbFV>g'JNjn*pFDAb@T@?Jy3g'JNjn*pFDAb@T@? 35EpRc4Vg'JNjn*pFDAb@T@?oBQcOC&3>g'JNjn*pFDAb@T@?-1OSM n 럆L<_ї Default GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P ; }} Location XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P0; }} Location Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@; }} Location Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO.;]kI 忞@'_0D[>g'JNjn*pFDAb@T@?ͤ*EgbĬf RotationceZU@䑧r%G 4W}@O{$`G  7|;YLuçP G G iE$I#p`G `G G `G bEE"i1P`F G  35EpRP`G .;]kI 忞@"(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pFC-Cb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pF D#Db@@T@?[HFd>g'JNjn*pFC-Cb@T@?n7ptLQ~k>g'JNjn*pFC-Cb@T@? 7|;YLuçiE$I#bEE"i1MI+YDGbFV>g'JNjn*pFC-Cb@T@?Jy3g'JNjn*pFC-Cb@T@? 35EpRc4Vg'JNjn*pFC-Cb@T@?oBQcOC&3>g'JNjn*pFC-Cb@T@?-1OSM n 럆L<_ї Default GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P ; }} Rotation XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P0; }} Rotation Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@; }} Rotation Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO.;]kI 忞@'_0D[>g'JNjn*pFC-Cb@T@?ͤ*EgbĬi  SizeceZU@䑧r%`G 4W}@O{$G  7|;YLuçP`G `G iE$I#pG G `G G bEE"i1PG `G  35EpRPG .;]kI 忞@"(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pFDBb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pFD*Db@@T@?[HFd>g'JNjn*pFDBb@T@?n7ptLQ~k>g'JNjn*pFDBb@T@? 7|;YLuç?iE$I#bEE"i1?MI+YDGbFV>g'JNjn*pFDBb@T@?Jy3g'JNjn*pFDBb@T@? 35EpR?c4Vg'JNjn*pFDBb@T@?oBQcOC&3>g'JNjn*pFDBb@T@?-1OSM n 럆L<_їDefault GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P 7 }}Size XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P07 }}Size Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@7 }}Size Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO.;]kI 忞@'_0D[>g'JNjn*pFDBb@T@?܂dKu=Tj owner mat G .;]kI 忞@"G G G `yG `G 4W}@O{$G RuB[Eb=z`G (XFҦV"G bEE"i1`G `G  7|;YLuç`=G G  35EpR`LOYƐ`F `G 3G`HTyg;G G h@ JrЋ=G `G 󻐼EB%t&'g'JNjn*pFBCb@ f@?RuB[Eb=z>LOYƐ 7|;YLuçbEE"i1?aL!B7U? 35EpR)n@8gl3G`HTyg$1w@t]j "Decompose Matrix`G RuB[Eb=zpG `G `G G M5 5PG `G 4.cbJPjŦP`xG `G ܍ܥ&@)6gPG G 4W}@O{%(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pF[CT`@X@?܍ܥ&@)6g4W}@O{(XFҦV>g'JNjn*pF*D@-Db@@T@?RuB[Eb=zn7ptLQ~k>g'JNjn*pF[CT`@X@?[HFd>g'JNjn*pF[CT`@X@?M5 5Jy3g'JNjn*pF[CT`@X@?MI+YDGbFV>g'JNjn*pF[CT`@X@?c4Vg'JNjn*pF[CT`@X@?oBQcOC&3>g'JNjn*pF[CT`@X@?-1OSM n 럆L<_їDefault GFʠN=HL1 }}RuB[Eb=zZ`Ez]UO GFʠN= 0HL1 }}M5 5Z`Ez]UO GFʠN=0@HL1 }}4.cbJPjŦZ`Ez]UO GFʠN= HL1 }}܍ܥ&@)6gZ`Ez]UO4.cbJPjŦ'_0D[>g'JNjn*pF[CT`@X@?ͤ*EgbĬk LocationceZU@䑧r%G 4W}@O{$`G  7|;YLuçP`G G iE$I#p`G `G G `G bEE"i1PG G  35EpRPG .;]kI 忞@"(XFҦVLE2Data, 1#՞'fA5-_՞'fA5-_D3DEYED3DEYE =xNT{-1OSM n"c4Vg'JNjn*pFDAb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pFdD@Db@@T@?n7ptLQ~k>g'JNjn*pFDAb@T@?[HFd>g'JNjn*pFDAb@T@?՞'fA5-_ 7|;YLuçJy3g'JNjn*pFDAb@T@?MI+YDGbFV>g'JNjn*pFDAb@T@?bEE"i1iE$I#c4Vg'JNjn*pFDAb@T@? 35EpRoBQcOC&3>g'JNjn*pFDAb@T@?.;]kI 忞@-1OSM n 럆L<_ї Default GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P ; }} Location XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P0; }} Location Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@; }} Location Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO'_0D[>g'JNjn*pFDAb@T@?ͤ*EgbĬ$i RotationceZU@䑧r%G 4W}@O{$`G  7|;YLuçPG G iE$I#p`G `G `mG `G bEE"i1P`G `mG  35EpRP`G .;]kI 忞@"(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pFC-Cb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pF D#Db@@T@?n7ptLQ~k>g'JNjn*pFC-Cb@T@?[HFd>g'JNjn*pFC-Cb@T@? 7|;YLuçJy3g'JNjn*pFC-Cb@T@?MI+YDGbFV>g'JNjn*pFC-Cb@T@?bEE"i1iE$I#c4Vg'JNjn*pFC-Cb@T@? 35EpRoBQcOC&3>g'JNjn*pFC-Cb@T@?.;]kI 忞@-1OSM n 럆L<_ї Default GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P ; }} Rotation XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P0; }} Rotation Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@; }} Rotation Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO'_0D[>g'JNjn*pFC-Cb@T@?ͤ*EgbĬm  SizeceZU@䑧r%`yG 4W}@O{$xG  7|;YLuçP`G `xG iE$I#pxG wG WG wG bEE"i1PG WG  35EpRPG .;]kI 忞@"(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pFDBb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pFD*Db@@T@?n7ptLQ~k>g'JNjn*pFDBb@T@?[HFd>g'JNjn*pFDBb@T@? 7|;YLuç?Jy3g'JNjn*pFDBb@T@?MI+YDGbFV>g'JNjn*pFDBb@T@?bEE"i1?iE$I#c4Vg'JNjn*pFDBb@T@? 35EpR?oBQcOC&3>g'JNjn*pFDBb@T@?.;]kI 忞@-1OSM n 럆L<_їDefault GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P 7 }}Size XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P07 }}Size Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@7 }}Size Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO'_0D[>g'JNjn*pFDBb@T@?܂dKu=$| pivot mat `RG .;]kI 忞@"F `F `'G `F RG 4W}@O{$G RuB[Eb=zF (XFҦV"F bEE"i1:G `F  7|;YLuç`9G F  35EpR G `F )n@8gl`:G F >LOYƐF `F 3G`HTygF F h@ JrЋ9G F 󻐼EB%t&'F `F ?aL!B7U`G  󻐼EB%t&'?h@ JrЋ?(XFҦV>g'JNjn*pF$D'Db@ f@?RuB[Eb=z 7|;YLuç>LOYƐbEE"i1 35EpR?aL!B7U?)n@8gl3G`HTyg$1w@t]\z "Decompose MatrixF RuB[Eb=zp`F F `F `F M5 5P`G F 4.cbJPjŦP`F `F ܍ܥ&@)6gP`F F 4W}@O{%(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pF[CT`@X@?4W}@O{(XFҦV>g'JNjn*pF*D@-Db@@T@?RuB[Eb=zM5 5[HFd>g'JNjn*pF[CT`@X@?n7ptLQ~k>g'JNjn*pF[CT`@X@?MI+YDGbFV>g'JNjn*pF[CT`@X@?Jy3g'JNjn*pF[CT`@X@?c4Vg'JNjn*pF[CT`@X@?oBQcOC&3>g'JNjn*pF[CT`@X@?4.cbJPjŦ-1OSM n 럆L<_їDefault GFʠN=HL1 }}RuB[Eb=zZ`Ez]UO GFʠN= 0HL1 }}M5 5Z`Ez]UO GFʠN=0@HL1 }}4.cbJPjŦZ`Ez]UO GFʠN= HL1 }}܍ܥ&@)6gZ`Ez]UO'_0D[>g'JNjn*pF[CT`@X@?ͤ*EgbĬy LocationceZU@䑧r%`F 4W}@O{$`F  7|;YLuçP`F `F iE$I#p`F G +G G bEE"i1PF +G  35EpRPF .;]kI 忞@"(XFҦVLE2Data, 1#՞'fA5-_-1OSM n"c4Vg'JNjn*pFDAb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pFdD@Db@@T@?[HFd>g'JNjn*pFDAb@T@?n7ptLQ~k>g'JNjn*pFDAb@T@? 7|;YLuç՞'fA5-_iE$I#bEE"i1MI+YDGbFV>g'JNjn*pFDAb@T@?Jy3g'JNjn*pFDAb@T@? 35EpRc4Vg'JNjn*pFDAb@T@?oBQcOC&3>g'JNjn*pFDAb@T@?-1OSM n 럆L<_ї Default GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P ; }} Location XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P0; }} Location Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@; }} Location Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO.;]kI 忞@'_0D[>g'JNjn*pFDAb@T@?ͤ*EgbĬlt RotationceZU@䑧r%`'G 4W}@O{$G  7|;YLuçPF `G iE$I#pG G ` G G bEE"i1P`F ` G  35EpRP`F .;]kI 忞@"(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pFC-Cb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pF D#Db@@T@?[HFd>g'JNjn*pFC-Cb@T@?n7ptLQ~k>g'JNjn*pFC-Cb@T@? 7|;YLuçiE$I#bEE"i1MI+YDGbFV>g'JNjn*pFC-Cb@T@?Jy3g'JNjn*pFC-Cb@T@? 35EpRc4Vg'JNjn*pFC-Cb@T@?oBQcOC&3>g'JNjn*pFC-Cb@T@?-1OSM n 럆L<_ї Default GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P ; }} Rotation XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P0; }} Rotation Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@; }} Rotation Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO.;]kI 忞@'_0D[>g'JNjn*pFC-Cb@T@?ͤ*EgbĬdw  SizeceZU@䑧r%`F 4W}@O{$F  7|;YLuçPF `F iE$I#pF F `G F bEE"i1PF `G  35EpRP`F .;]kI 忞@"(XFҦVLE2Data, 1#-1OSM n"c4Vg'JNjn*pFDBb@T@?ceZU@䑧r[җJs@ &DecomposePointNode function OnGetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { case 'x' : val = dataBlock.conDataObject('inputPoint').x; dataBlock.conValue('x') = val; break; case 'y' : val = dataBlock.conDataObject('inputPoint').y; dataBlock.conValue('y') = val; break; case 'z' : val = dataBlock.conDataObject('inputPoint').z; dataBlock.conValue('z') = val; break; } } function OnSetValue(ret) { conName = ret.Param('conName'); dataBlock = ret.Param('dataBlock'); switch (conName) { } } function OnDefaultValue(ret) { conName = ret.Param('conName'); switch (conName) { case 'x' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'y' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; case 'z' : ret.Param('vtData') = 0; ret.Param('bHandled') = true; break; } } function OnLoadDefault(ret) { connectors = ret.Param('connectors'); // remove following line to set dependencies manually connectors.SetDefaultDependency(); } kg'JNjn*pFD*Db@@T@?[HFd>g'JNjn*pFDBb@T@?n7ptLQ~k>g'JNjn*pFDBb@T@? 7|;YLuç?iE$I#bEE"i1?MI+YDGbFV>g'JNjn*pFDBb@T@?Jy3g'JNjn*pFDBb@T@? 35EpR?c4Vg'JNjn*pFDBb@T@?oBQcOC&3>g'JNjn*pFDBb@T@?-1OSM n 럆L<_їDefault GFʠN=1 }}iE$I#Z`Ez]UO GFʠN=P 7 }}Size XbEE"i1Z`Ez]UO1釥GP>aP 0 }}bEE"i1Z`Ez]UO GFʠN= P07 }}Size Y 7|;YLuçZ`Ez]UO1釥GP>aP 00 }} 7|;YLuçZ`Ez]UO GFʠN=0P@7 }}Size Z 35EpRZ`Ez]UO1釥GP>aP0@0 }} 35EpRZ`Ez]UO.;]kI 忞@'_0D[>g'JNjn*pFDBb@T@?}O΍x Timer Event G 2|=Bynj`G `G TK?JFܟ5uW}Mzq>uW}Mzq>Period&Timer period in msE;c_J8@E;c_J8@ FrameTime frame:.J NT):.J NT) Time$Time of the framez@HoG 4W}@O{$(XFҦV"-1OSM n"2|=Bynj:.J NT) r2@(XFҦV>g'JNjn*pFCAc@@Z@?uW}Mzq>aE;c_J8@*TK?JFܟ5 -1OSM n 럆L<_ї,Default  GFʠN=x1 }}TK?JFܟ5Z`Ez]UOͽ>fdN*5Ւhx, }}TK?JFܟ5Z`Ez]UO GFʠN=((7 }}PerioduW}Mzq>Z`Ez]UO1釥GP>ap(0 }}uW}Mzq>Z`Ez]UO GFʠN=HX= }} Control Out2|=BynjZ`Ez]UO GFʠN=(P81 }}E;c_J8@Z`Ez]UO1釥GP>aP(80 }}E;c_J8@Z`Ez]UO GFʠN=8PH1 }}:.J NT)Z`Ez]UO1釥GP>aP8H0 }}:.J NT)Z`Ez]UON\q+nN-K^(p(A\VV.@p@uW}Mzq>Z`Ez]UOY@z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommand&// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here firstSel = Node.FirstSelected(); if(!firstSel) return; if(!Node.ConExists(firstSel,"Mesh")) return; if(!Node.ConExists(firstSel,"Selection")) return; sel = System.CreateDO("Space 3D Package/Selection Data"); sel = Node.Value(firstSel,"Selection"); themesh = System.CreateDO("Space 3D Package/Mesh Data"); themesh = Node.Value(firstSel,"Mesh"); numtris = themesh.GetNumTriangles(); facedges = System.CreateDO("Space 3D Package/Face Edges Stream Data"); facedges = themesh.GetTrianglesStreamByName("Face Edges Stream Data"); thetris = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data"); thetris = themesh.GetTriangles(); mydata = System.CreateDO('Clintons3D Package/Triangle neighbor data'); mydata.SetMesh(firstSel); triarray = new Array(numtris); for(i=0;i<numtris;i++) triarray[i] = false; sel.ClearSelection(); Node.Value(firstSel,"Selection") = sel; } NScript Object Package/jScript languageSPSP$SP4W}@O{(XFҦV>g'JNjn*pnCBb@H@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommandN// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here firstSel = Node.FirstSelected(); if(!firstSel) return; if(!Node.ConExists(firstSel,"Mesh")) return; if(!Node.ConExists(firstSel,"Selection")) return; sel = System.CreateDO("Space 3D Package/Selection Data"); sel = Node.Value(firstSel,"Selection"); themesh = System.CreateDO("Space 3D Package/Mesh Data"); themesh = Node.Value(firstSel,"Mesh"); numtris = themesh.GetNumTriangles(); facedges = System.CreateDO("Space 3D Package/Face Edges Stream Data"); facedges = themesh.GetTrianglesStreamByName("Face Edges Stream Data"); thetris = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data"); thetris = themesh.GetTriangles(); try { mydata = System.CreateDO('Clintons3D Package/Triangle neighbor data'); } catch(err) { System.Alert("Requires Clintons3D Package v.1638403 or greater"); return; } mydata.SetMesh(firstSel); triarray = new Array(numtris); for(i=0;i<numtris;i++) triarray[i] = false; sel.ClearSelection(); for(m=0;m<numtris;m++) { //if(!triarray[m]) //{ edgeflags = facedges.edges(m); if(edgeflags==3 || edgeflags==5 || edgeflags==6) { mydata.SetIndex(m); var edgenei = mydata.GetIndex(); var ijk = edgenei.split(" "); if(edgeflags==3) { //tri at cur ki edge neighbor triangle 2 edgeflags2 = facedges.edges(ijk[2]); if(edgeflags2==3 || edgeflags2==5 || edgeflags2==6) { sel.SelectFaceTriangle(ijk[2]); sel.SelectFaceTriangle(m); triarray[m]=true; triarray[ijk[2]]=true; } } if(edgeflags==5) { //tri with cur jk edge neighbor triangle 1 edgeflags2 = facedges.edges(ijk[1]); if(edgeflags2==3 || edgeflags2==5 || edgeflags2==6) { sel.SelectFaceTriangle(ijk[1]); sel.SelectFaceTriangle(m); triarray[m]=true; triarray[ijk[1]]=true; } } if(edgeflags==6) { //tri with cur ji edge neighbor triangle 0 edgeflags2 = facedges.edges(ijk[0]); if(edgeflags2==3 || edgeflags2==5 || edgeflags2==6) { sel.SelectFaceTriangle(ijk[0]); sel.SelectFaceTriangle(m); triarray[m]=true; triarray[ijk[0]]=true; } } //Node.Value(firstSel,"Selection") = sel; //MeshModifiers.OptimizeTriangulation(''); //System.Trace("triangle " + m + " flg " + edgeflags); } //} } Node.Value(firstSel,"Selection") = sel; MeshModifiers.OptimizeTriangulation(''); } NScript Object Package/jScript language~൱D$#^c4W}@O{(XFҦV>g'JNjn*pnfDBb@H@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommand// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here firstSel = Node.FirstSelected(); if(!firstSel) return; if(!Node.ConExists(firstSel,"Mesh")) return; if(!Node.ConExists(firstSel,"Selection")) return; sel = System.CreateDO("Space 3D Package/Selection Data"); sel = Node.Value(firstSel,"Selection"); themesh = System.CreateDO("Space 3D Package/Mesh Data"); themesh = Node.Value(firstSel,"Mesh"); numtris = themesh.GetNumTriangles(); facedges = System.CreateDO("Space 3D Package/Face Edges Stream Data"); facedges = themesh.GetTrianglesStreamByName("Face Edges Stream Data"); thetris = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data"); thetris = themesh.GetTriangles(); try { mydata = System.CreateDO('Clintons3D Package/Triangle neighbor data'); } catch(err) { System.Alert("Requires Clintons3D Package v.1638403 or greater"); return; } mydata.SetMesh(firstSel); triarray = new Array(numtris); for(i=0;i<numtris;i++) triarray[i] = false; sel.ClearSelection(); for(m=0;m<numtris;m++) { //if(!triarray[m]) //{ edgeflags = facedges.edges(m); if(edgeflags==0 || edgeflags==1 || edgeflags==2 || edgeflags==4) { curi = thetris.i(m); curj = thetris.j(m); curk = thetris.k(m); sel.SelectFaceTriangle(m); mydata.SetIndex(m); triarray[m]=true; var edgenei = mydata.GetIndex(); var ijk = edgenei.split(" "); if(edgeflags==0) { //tri with cur jk and cur ki and cur ij - select all neighbors if(!triarray[ijk[0]]) sel.SelectFaceTriangle(ijk[0]); if(!triarray[ijk[1]]) sel.SelectFaceTriangle(ijk[1]); if(!triarray[ijk[2]]) sel.SelectFaceTriangle(ijk[2]); triarray[ijk[0]]=true; triarray[ijk[1]]=true; triarray[ijk[2]]=true; } if(edgeflags==1) { //look for tri with cur jk and cur ki //ki if(!triarray[ijk[2]] && ijk[2] != -1) sel.SelectFaceTriangle(ijk[2]); //kj if(!triarray[ijk[1]] && ijk[1] != -1) sel.SelectFaceTriangle(ijk[1]); triarray[ijk[1]]=true; triarray[ijk[2]]=true; } if(edgeflags==2) { //look for tri with cur ji and cur ki //ji if(!triarray[ijk[0]] && ijk[0] != -1) sel.SelectFaceTriangle(ijk[0]); //ki if(!triarray[ijk[2]] && ijk[2] != -1) sel.SelectFaceTriangle(ijk[2]); triarray[ijk[0]]=true; triarray[ijk[2]]=true; } if(edgeflags==4) { //look for tri with cur jk and cur ji //ji if(!triarray[ijk[0]] && ijk[0] != -1) sel.SelectFaceTriangle(ijk[0]); //kj if(!triarray[ijk[1]]) sel.SelectFaceTriangle(ijk[1]); triarray[ijk[0]]=true; triarray[ijk[1]]=true; } //Node.Value(firstSel,"Selection") = sel; //MeshModifiers.OptimizeTriangulation(''); //System.Trace("triangle " + m + " flg " + edgeflags); } //} } Node.Value(firstSel,"Selection") = sel; MeshModifiers.OptimizeTriangulation(''); } NScript Object Package/jScript language~൱DD#^c4W}@O{(XFҦV>g'JNjn*pnDQCb@H@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ xNewCommand// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here firstSel = Node.FirstSelected(); if(!firstSel) return; if(!Node.ConExists(firstSel,"Mesh")) return; if(!Node.ConExists(firstSel,"Selection")) return; sel = System.CreateDO("Space 3D Package/Selection Data"); sel = Node.Value(firstSel,"Selection"); themesh = System.CreateDO("Space 3D Package/Mesh Data"); themesh = Node.Value(firstSel,"Mesh"); numtris = themesh.GetNumTriangles(); facedges = System.CreateDO("Space 3D Package/Face Edges Stream Data"); facedges = themesh.GetTrianglesStreamByName("Face Edges Stream Data"); thetris = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data"); thetris = themesh.GetTriangles(); sel.ClearSelection(); for(m=0;m<numtris;m++) { edgeflags = facedges.edges(m); if(edgeflags==7) sel.SelectFaceTriangle(m); } Node.Value(firstSel,"Selection") = sel; MeshModifiers.OptimizeTriangulation(''); } NScript Object Package/jScript language$܈4W}@O{(XFҦV>g'JNjn*pn;DBb@H@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommand// Execute // Called to execute the command function Execute(params) { // save point edit selection mode params.ConValue("PEselectionMode") = Node.Value('/Preferences/Mesh Editor Settings','PE selection mode'); //change to vertex mode Node.Value('/Preferences/Mesh Editor Settings','PE selection mode') = 'face'; MeshModifiers.ActivatePointEditWidget('','','Default'); } NScript Object Package/jScript languagestring PEselectionModeb/pEj F4W}@O{b/pEj F face(XFҦV>g'JNjn*pnDBb@@P@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ _NewCommandWfunction getnumedges() { num = 0; for(i=0;i<numtri;i++) { edgeflags = facedges.edges(i); if((edgeflags & 1)==1) num++; if((edgeflags & 2)==2) num++; if((edgeflags & 4)==4) num++; } return num; } function checktris(trind, edgeflags) { var edgeflags2; var curi, curj, curk; var countdown; if(triarray[trind]) return; triarray[trind] = true; //System.Trace("checktris index" + trind + " edge flags " + edgeflags); mydata.SetIndex(trind); var edgenei = mydata.GetIndex(); var ijk = edgenei.split(" "); triedindex = ijk[0]; if(triedindex != -1) if(!triarray[triedindex]) { //look for tri with cur jk and cur ki and cur ij //ji if((edgeflags & 1)!=1) { //System.Trace("checktris jk check"); localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(triedindex); checktris(triedindex, edgeflags2); } } triedindex = ijk[1]; if(triedindex != -1) if(!triarray[triedindex]) { //kj if((edgeflags & 2)!=2) { //System.Trace("checktris jk check"); localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(triedindex); checktris(triedindex, edgeflags2); } } triedindex = ijk[2]; if(triedindex != -1) if(!triarray[triedindex]) { //ki if((edgeflags & 4)!=4) { //System.Trace("checktris ki check"); localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(triedindex); checktris(triedindex, edgeflags2); } } return; //old code below before triangle neighbors added to plugin if(edgeflags==0) countdown = 3; if(edgeflags == 1 || edgeflags == 2 || edgeflags == 4) countdown = 2; if(edgeflags == 3 || edgeflags == 5 || edgeflags == 6) countdown = 1; var n; for(n=0;n<numtri;n++) { if(!triarray[n]) { //look for tri with cur jk and cur ki and cur ij //ji if((edgeflags & 1)!=1) { //System.Trace("checktris ji check"); matchcount = 0; if(thetris.i(n)==curi || thetris.i(n)==curj) matchcount++; if(thetris.j(n)==curi || thetris.j(n)==curj) matchcount++; if(thetris.k(n)==curi || thetris.k(n)==curj) matchcount++; //if(matchcount==2) sel.SelectFaceTriangle(n); if(matchcount==2) { localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(n); checktris(n, edgeflags2); countdown--; if(countdown==0) break; } } //ki if((edgeflags & 4)!=4) { //System.Trace("checktris ki check"); matchcount = 0; if(thetris.i(n)==curi || thetris.i(n)==curk) matchcount++; if(thetris.j(n)==curi || thetris.j(n)==curk) matchcount++; if(thetris.k(n)==curi || thetris.k(n)==curk) matchcount++; //if(matchcount==2) sel.SelectFaceTriangle(n); if(matchcount==2) { localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(n); checktris(n, edgeflags2); countdown--; if(countdown==0) break; } } //kj if((edgeflags & 2)!=2) { //System.Trace("checktris jk check"); matchcount = 0; if(thetris.i(n)==curj || thetris.i(n)==curk) matchcount++; if(thetris.j(n)==curj || thetris.j(n)==curk) matchcount++; if(thetris.k(n)==curj || thetris.k(n)==curk) matchcount++; //if(matchcount==2) sel.SelectFaceTriangle(n); if(matchcount==2) { localcount++; //System.Trace("localcount " + localcount); edgeflags2 = facedges.edges(n); checktris(n, edgeflags2); countdown--; if(countdown==0) break; } } } } } // Execute // Called to execute the command function Execute(params) { var faceSelFlag = params.ConValue('faceSelFlag'); owner = System.ThisOwner(); // TODO: put your action code here firstSel = Node.FirstSelected(); if(!firstSel) return; if(Node.ConExists(firstSel,"Mesh") && !Node.IsCamera(firstSel) && !Node.IsLight(firstSel)) { themesh = System.CreateDO("Space 3D Package/Mesh Data"); themesh = Node.Value(firstSel,"Mesh"); //params.ConValue("objectverts") = themesh.GetNumVertices(); Node.Value(owner, "overt") = themesh.GetNumVertices(); numtri = themesh.GetNumTriangles(); //params.ConValue("objecttriangles") = numtri; Node.Value(owner, "otri") = numtri; thetris = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data"); thetris = themesh.GetTriangles(); facedges = System.CreateDO("Space 3D Package/Face Edges Stream Data"); facedges = themesh.GetTrianglesStreamByName("Face Edges Stream Data"); //params.ConValue("objectedges") = getnumedges(); Node.Value(owner, "oedge") = getnumedges(); try { mydata = System.CreateDO('Clintons3D Package/Triangle neighbor data'); } catch(err) { System.Alert("Requires Clintons3D Package v.1638403 or greater"); return; } mydata.SetMesh(firstSel); var j; var edgeflags; triarray = new Array(numtri); for(i=0;i<numtri;i++) triarray[i] = false; count3=0; count4=0; count5=0; for(j=0;j<numtri;j++) { if(!triarray[j]) { //System.Trace("main loop " + j); localcount = 0; //check edge flags edgeflags = facedges.edges(j); localcount=1; if(edgeflags == 7) { triarray[j] = true; } else { //localcount=0; checktris(j, edgeflags); } if(localcount==1) count3++; if(localcount==2) count4++; if(localcount>2) count5++; } } //params.ConValue("objecttotalfaces") = themesh.GetNumFaces(); //params.ConValue("objecttotalfaces") = count3 + count4 + count5; //params.ConValue("objectfaces3") = count3; //params.ConValue("objectfaces4") = count4; //params.ConValue("objectfaces5") = count5; Node.Value(owner, "oface") = count3 + count4 + count5; Node.Value(owner, "oface3") = count3; Node.Value(owner, "oface4") = count4; Node.Value(owner, "ofacem") = count5; } else { //reset values //params.ConValue("objectverts") = 0; //params.ConValue("objectedges") = 0; //params.ConValue("objecttriangles") = 0; //params.ConValue("objecttotalfaces") = 0; //params.ConValue("objectfaces3") = 0; //params.ConValue("objectfaces4") = 0; //params.ConValue("objectfaces5") = 0; Node.Value(owner, "overt") = 0; Node.Value(owner, "oedge") = 0; Node.Value(owner, "otri") = 0; Node.Value(owner, "oface") = 0; Node.Value(owner, "oface3") = 0; Node.Value(owner, "oface4") = 0; Node.Value(owner, "ofacem") = 0; } if(Node.ConExists(firstSel,"Selection")) { thesel = System.CreateDO("Space 3D Package/Selection Data"); thesel = Node.Value(firstSel,"Selection"); //params.ConValue("selverts") = thesel.GetNumSelectedVertices(); //params.ConValue("seledges") = thesel.GetNumSelectedEdges(); Node.Value(owner, "svert") = thesel.GetNumSelectedVertices(); Node.Value(owner, "sedge") = thesel.GetNumSelectedEdges(); triselflag = false; trifaceselflag = false; numstris = thesel.GetNumSelectedTriangles(); if(numstris==0) numstris = thesel.GetNumSelectedFaceTriangles(); else triselflag=true; if(!triselflag && numstris !=0) trifaceselflag = true; //params.ConValue("seltriangles") = numstris; Node.Value(owner, "stri") = numstris; //params.ConValue("seltotalfaces") = getnumselfaces(); //params.ConValue("selfaces3") = getnumselfaces3(); //params.ConValue("selfaces4") = getnumselfaces4(); //params.ConValue("selfaces5") = getnumselfaces5(); scount3=0; scount4=0; scount5=0; //if(trifaceselflag && numstris != 0) //{ // scount3=-1; scount4=-1; scount5=-1; // numstris=0; //} if(triselflag) { scout3 = numstris; scout4 = 0; scout5 = 0; } if(trifaceselflag) { triarray = new Array(numtri); for(i=0;i<numtri;i++) triarray[i] = true; for(j=0;j<numstris;j++) { mydata.SetFaceIndex(j); triind = mydata.GetFaceIndex(); triarray[triind] = false; } for(j=0;j<numtri;j++) { if(!triarray[j]) { //System.Trace("main loop " + j); localcount = 0; //check edge flags edgeflags = facedges.edges(j); localcount=1; if(edgeflags == 7) { triarray[j] = true; } else { //localcount=0; checktris(j, edgeflags); } if(localcount==1) scount3++; if(localcount==2) scount4++; if(localcount>2) scount5++; } } } //params.ConValue("seltotalfaces") = scount3 + scount4 + scount5; //params.ConValue("selfaces3") = scount3; //params.ConValue("selfaces4") = scount4; //params.ConValue("selfaces5") = scount5; Node.Value(owner, "sface") = scount3 + scount4 + scount5; Node.Value(owner, "sface3") = scount3; Node.Value(owner, "sface4") = scount4; Node.Value(owner, "sfacem") = scount5; //System.Trace(scout3); //if(scount3 < 0 && faceSelFlag) //{ // params.ConValue("dofaces") = 1; //} //else //{ // params.ConValue(" Control Out") = 1; //} } else { //reset values //params.ConValue("selverts") = 0; //params.ConValue("seltriangles") = 0; //params.ConValue("seltotalfaces") = 0; //params.ConValue("selfaces3") = 0; //params.ConValue("selfaces4") = 0; //params.ConValue("selfaces5") = 0; Node.Value(owner, "svert") = 0; Node.Value(owner, "sedge") = 0; Node.Value(owner, "stri") = 0; Node.Value(owner, "sface") = 0; Node.Value(owner, "sface3") = 0; Node.Value(owner, "sface4") = 0; Node.Value(owner, "sfacem") = 0; } try { imat = System.CreateDO("Math Package/Matrix Float Data"); imat.LoadIdentity(); if(Node.ConExists(firstSel,"Matrix")) params.ConValue("localMatrix") = Node.Value(firstSel,"Matrix"); else params.ConValue("localMatrix") = imat; if(Node.ConExists(firstSel,"OwnerMatrix")) params.ConValue("ownerMatrix") = Node.Value(firstSel,"OwnerMatrix"); else params.ConValue("ownerMatrix") = imat; if(Node.ConExists(firstSel,"Pivot")) params.ConValue("worldMatrix") = Node.Value(firstSel,"Pivot") else params.ConValue("worldMatrix") = imat; } catch(err) { System.Trace("Error: Uninitialized matrix found."); } // params.ConValue("localMatrix") = ... // params.ConValue("ownerMatrix") = ... // params.ConValue("worldMatrix") = ... // params.ConValue("objectverts") = ... // params.ConValue("objectedges") = ... // params.ConValue("objecttriangles") = ... // params.ConValue("objecttotalfaces") = ... // params.ConValue("objectfaces3") = ... // params.ConValue("objectfaces4") = ... // params.ConValue("objectfaces5") = ... // params.ConValue("selverts") = ... // params.ConValue("seltriangles") = ... // params.ConValue("seltotalfaces") = ... // params.ConValue("selfaces3") = ... // params.ConValue("selfaces4") = ... // params.ConValue("selfaces5") = ... // params.ConValue("objectBB") = ... } NScript Object Package/jScript language4n >Math Package/Matrix Float DatalocalMatrix `^02eE{|@QTI!o-rt>Math Package/Matrix Float DataownerMatrix `^02eE{|@NτLIsH=$1>Math Package/Matrix Float DataworldMatrix `^02eE{|@EhCI:<@uintobjectverts]O'J:Hintobjectedges'G2Xa)gint objecttrianglesKkint"objecttotalfaces_ʠB`Udintobjectfaces3aQE_TPintobjectfaces4AŊI04intobjectfaces5cBD_7intselvertsٸ-DIp]intseltriangles"5/I|`intseltotalfaceszqVWII_pf݃@intselfaces3#d}D |sNintselfaces4D]GHhVQ`intselfaces53vN#0Math Package/Point DataobjectBB uMF86F`O,O bintseledgesKD?RARint Control OutTransitionOutD4:DuftD 2|=BynjcBD_7`^02eE{|@B????KD?RAR`^02eE{|@B????4W}@O{]O'J:H`^02eE{|@B????'G2Xa)g`^02eE{|@B????aQE_TP`^02eE{|@B????(XFҦV>g'JNjn*pnD]Cb@u@2|=Bynj|?z@Hoۙ>?QTI!o-rt`^02eE{|@B????NτLIsH=$1`^02eE{|@B????J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?_ʠB`Ud`^02eE{|@B????#d}D |sN`^02eE{|@B????3vN#`^02eE{|@B????EhCI:<@u`^02eE{|@B????-1OSM n 럆L<_їjControlOˁ CRih[ a8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0a:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?AŊI04`^02eE{|@B????D]GHhVQ``^02eE{|@B????Kk`^02eE{|@B????ٸ-DIp]`^02eE{|@B????"5/I|``^02eE{|@B????,O b`^02eE{|@B????z@Ho8ʯȥJH|o7 gH]kDwPZ`d8pM*#ͺO2/tfѭ8Lwb"qD