[2219] | 1 | // ===== Create Ogre menu
|
---|
| 2 | namespace -add "GTPSceneExporter";
|
---|
| 3 | namespace -set "GTPSceneExporter";
|
---|
| 4 |
|
---|
| 5 | setParent "MayaWindow";
|
---|
| 6 | menu -label "GTP" -tearOff false;
|
---|
| 7 | menuItem -label "Export Scene" -command "GTPSceneExporter";
|
---|
| 8 | menuItem -label "Path Map" -subMenu true;
|
---|
| 9 | menuItem -label "Add Path Map attributes" -command "GTPAddPathMapAttr";
|
---|
| 10 |
|
---|
| 11 | //GTPSceneExporter();
|
---|
| 12 |
|
---|
| 13 | global proc runGTPSceneExport()
|
---|
| 14 | {
|
---|
| 15 | string $outputDir = (`textField -query -text OutputDirectory`);
|
---|
| 16 | if (!endsWith($outputDir,"\\") && !endsWith($outputDir,"/") && (size($outputDir)>0))
|
---|
| 17 | $outputDir += "/";
|
---|
| 18 | string $sceneFile = (`textField -query -text SceneFileName`);
|
---|
| 19 |
|
---|
| 20 | $sceneFileName = $outputDir + $sceneFile;
|
---|
| 21 | $fileId = `fopen $sceneFileName "w"`;
|
---|
| 22 |
|
---|
| 23 | string $options;
|
---|
| 24 | string $shapes[];
|
---|
| 25 | $shapes=`ls -geometry`;
|
---|
| 26 |
|
---|
| 27 | string $commandFile = $outputDir + "GTP_SceneExport.bat";
|
---|
| 28 | int $comandFileID;
|
---|
| 29 | string $commands = "";
|
---|
| 30 | if (`checkBox -query -value CreateBinary`)
|
---|
| 31 | {
|
---|
| 32 | $comandFileID = `fopen $commandFile "w"`;
|
---|
| 33 | string $OgreDir = (`textField -query -text OgrePath`);
|
---|
| 34 | $OgreDir = toNativePath($OgreDir);
|
---|
| 35 | $commands += "path=" + $OgreDir + "\n";
|
---|
| 36 | }
|
---|
| 37 |
|
---|
| 38 | //geometry
|
---|
| 39 | for($index=0;$index<size($shapes);$index++)
|
---|
| 40 | {
|
---|
| 41 | string $shapename = $shapes[$index];
|
---|
| 42 | string $shapeNameTokens[];
|
---|
| 43 | tokenize $shapename "|" $shapeNameTokens;
|
---|
| 44 | $shapename = $shapeNameTokens[size($shapeNameTokens) - 1];
|
---|
| 45 | $meshFileName = encodeString(toNativePath($outputDir+$shapename + ".mesh.xml"));
|
---|
| 46 |
|
---|
| 47 | fprint $fileId("mesh "+$shapename+"\n{\n");
|
---|
| 48 | fprint $fileId("\togreXMLfile "+$shapename + ".mesh.xml"+"\n");
|
---|
| 49 | fprint $fileId("\togrefile "+$shapename + ".mesh"+"\n");
|
---|
| 50 | int $exportPM = `checkBox -q -v ExportPMAttr`;
|
---|
| 51 | if($exportPM)
|
---|
| 52 | {
|
---|
| 53 | select $shapes[$index];
|
---|
| 54 | $PRMRes = 64;
|
---|
| 55 | if(attributeExists("PhotonMapResolution", $shapes[$index]))
|
---|
| 56 | $PRMRes = `getAttr .prmRes`;
|
---|
| 57 | fprint $fileId("\tpathmapresolution " + $PRMRes + "\n");
|
---|
| 58 | $PRMDiv = 1;
|
---|
| 59 | if(attributeExists("PhotonMapSubdivision", $shapes[$index]))
|
---|
| 60 | $PRMDiv = `getAttr .prmDiv`;
|
---|
| 61 | fprint $fileId("\tdivide " + $PRMDiv + "\n");
|
---|
| 62 | }
|
---|
| 63 | fprint $fileId "}\n\n";
|
---|
| 64 |
|
---|
| 65 | //mesh export
|
---|
| 66 | int $exportMeshes = `checkBox -query -value ExportMeshes`;
|
---|
| 67 | if($exportMeshes)
|
---|
| 68 | {
|
---|
| 69 | select $shapename;
|
---|
| 70 | $options += " -sel";
|
---|
| 71 | $options += " -obj";
|
---|
| 72 | $options = "";
|
---|
| 73 | $options += " -mesh";
|
---|
| 74 | $options += " \"" + $meshFileName + "\"";
|
---|
| 75 | $options += " -shared -n -t";
|
---|
| 76 | eval ("ogreExport" + $options);
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | //binary creation
|
---|
| 80 | if (`checkBox -query -value CreateBinary`)
|
---|
| 81 | {
|
---|
| 82 | int $size = size($meshFileName);
|
---|
| 83 | $size -= 4;
|
---|
| 84 | string $binMeshFileName = startString($meshFileName, $size);
|
---|
| 85 | $commands += "OgreXMLConverter";
|
---|
| 86 | if (!`checkBox -query -value BuildEdgeList`)
|
---|
| 87 | $commands += " -e ";
|
---|
| 88 | if (`checkBox -query -value BuildTangents`)
|
---|
| 89 | $commands += " -t ";
|
---|
| 90 | $commands += " \"" + $meshFileName + "\"" + " \"" + $binMeshFileName + "\"" + "\n";
|
---|
| 91 | //$commands += "pause \n";
|
---|
| 92 | }
|
---|
| 93 |
|
---|
| 94 | //entities with transforms
|
---|
| 95 | string $transforms[] = `listRelatives -ap $shapes[$index]`;
|
---|
| 96 | for($i = 0; $i<size($transforms);$i++)
|
---|
| 97 | {
|
---|
| 98 | $entityName = $transforms[$i];
|
---|
| 99 |
|
---|
| 100 | select $entityName;
|
---|
| 101 | float $transformation[] = `getAttr .worldMatrix`;
|
---|
| 102 | string $transformationString = "";
|
---|
| 103 |
|
---|
| 104 | for($start = 0; $start < 4 ; $start++)
|
---|
| 105 | for($t = 0; $t < 4 ; $t++)
|
---|
| 106 | $transformationString += ($transformation[$start + $t * 4] + " ");
|
---|
| 107 |
|
---|
| 108 | fprint $fileId("entity "+ $entityName + "\n{\n" );
|
---|
| 109 | fprint $fileId("\tmesh "+ $shapename + "\n");
|
---|
| 110 | fprint $fileId("\ttransformation "+ $transformationString + "\n");
|
---|
| 111 | if($exportPM)
|
---|
| 112 | {
|
---|
| 113 | $PRMClus = 32;
|
---|
| 114 | if(attributeExists("PathMapClusters", $shapes[$index]))
|
---|
| 115 | $PRMClus = `getAttr .prmClus`;
|
---|
| 116 | fprint $fileId("\tpathmapclusters " + $PRMClus + "\n");
|
---|
| 117 | string $PMTexturePath = (`textField -query -text PMPath`);
|
---|
| 118 | if (!endsWith($PMTexturePath,"\\") && !endsWith($PMTexturePath,"/") && (size($PMTexturePath)>0))
|
---|
| 119 | $PMTexturePath += "/";
|
---|
| 120 | fprint $fileId("\tpathmapfile " + toNativePath($PMTexturePath) + $entityName + "\n");
|
---|
| 121 | }
|
---|
| 122 | fprint $fileId "}\n\n";
|
---|
| 123 | }
|
---|
| 124 | }
|
---|
| 125 |
|
---|
| 126 | if (`checkBox -query -value CreateBinary`)
|
---|
| 127 | {
|
---|
| 128 | fprint $comandFileID $commands;
|
---|
| 129 | fclose $comandFileID;
|
---|
| 130 | system("\"" + `toNativePath $commandFile` + "\"");
|
---|
| 131 | }
|
---|
| 132 |
|
---|
| 133 | //material export
|
---|
| 134 | int $exportMaterials = `checkBox -query -value ExportMaterials`;
|
---|
| 135 | if($exportMaterials)
|
---|
| 136 | {
|
---|
| 137 | string $materialFile = (`textField -query -text MaterialFilename`);
|
---|
| 138 | string $materialFileName = encodeString(toNativePath($outputDir + $materialFile));
|
---|
| 139 | $options = "-all";
|
---|
| 140 | $options += " -mat \"" + $materialFileName + "\"";
|
---|
| 141 | string $matPrefix = `textField -query -text MaterialPrefix`;
|
---|
| 142 | if ($matPrefix != "")
|
---|
| 143 | {
|
---|
| 144 | $options += " -matPrefix \"" + $matPrefix + "\"";
|
---|
| 145 | }
|
---|
| 146 | eval ("ogreExport" + $options);
|
---|
| 147 | }
|
---|
[2235] | 148 |
|
---|
[2219] | 149 | fclose $fileId;
|
---|
[2235] | 150 |
|
---|
| 151 | int $exportPathMapMaterials = `checkBox -query -value ExportPMMat`;
|
---|
| 152 | if($exportPathMapMaterials)
|
---|
| 153 | {
|
---|
| 154 | string $materialFile = (`textField -query -text PMMatFile`);
|
---|
| 155 | string $materialFileName = encodeString(toNativePath($outputDir + $materialFile));
|
---|
| 156 |
|
---|
| 157 | $PMMatfileId = `fopen $materialFileName "w"`;
|
---|
| 158 |
|
---|
| 159 | fprint $PMMatfileId "<materials>\n";
|
---|
| 160 |
|
---|
| 161 | string $materials[] = `ls -type lambert`;
|
---|
| 162 | for($i = 0; $i < size($materials); $i++)
|
---|
| 163 | {
|
---|
| 164 | select $materials[$i];
|
---|
| 165 | fprint $PMMatfileId ("<material name=\"" + $materials[$i] +"\" ");
|
---|
| 166 | string $textureFiles[] = `listConnections -t file`;
|
---|
| 167 | if(size($textureFiles) > 0)
|
---|
| 168 | {
|
---|
| 169 | select $textureFiles[0];
|
---|
| 170 | $textureName = `getAttr .fileTextureName`;
|
---|
| 171 | fprint $PMMatfileId ("texture=\"" + basename($textureName, "") + "\" ");
|
---|
| 172 | }
|
---|
| 173 | else
|
---|
| 174 | {
|
---|
| 175 | float $baseColor[] = `getAttr .color`;
|
---|
| 176 | string $colorString = $baseColor[0] + " " + $baseColor[1] + " " + $baseColor[2];
|
---|
| 177 | fprint $PMMatfileId ("color=\"" + $colorString + "\" ");
|
---|
| 178 | }
|
---|
| 179 | fprint $PMMatfileId "/>\n";
|
---|
| 180 | }
|
---|
| 181 | fprint $PMMatfileId "</materials>\n";
|
---|
| 182 | fclose $PMMatfileId;
|
---|
| 183 | }
|
---|
[2219] | 184 | }
|
---|
| 185 |
|
---|
| 186 | // ===== Launch exporter UI
|
---|
| 187 | global proc GTPSceneExporter()
|
---|
| 188 | {
|
---|
| 189 | defineGTPExportUIView();
|
---|
| 190 | }
|
---|
| 191 |
|
---|
| 192 | global proc formatGTPExportUI()
|
---|
| 193 | {
|
---|
| 194 | int $exportMaterials = `checkBox -q -v ExportMaterials`;
|
---|
| 195 | text -edit -enable $exportMaterials MaterialFilenameLabel;
|
---|
| 196 | textField -edit -enable $exportMaterials MaterialFilename;
|
---|
| 197 | text -edit -enable $exportMaterials MaterialPrefixLabel;
|
---|
| 198 | textField -edit -enable $exportMaterials MaterialPrefix;
|
---|
| 199 |
|
---|
| 200 | int $exportMeshes = `checkBox -q -v ExportMeshes`;
|
---|
| 201 | checkBox -edit -enable $exportMeshes CreateBinary;
|
---|
| 202 | checkBox -edit -enable $exportMeshes BuildEdgeList;
|
---|
| 203 | checkBox -edit -enable $exportMeshes BuildTangents;
|
---|
| 204 | if (!$exportMeshes)
|
---|
| 205 | checkBox -edit -value false CreateBinary;
|
---|
| 206 |
|
---|
| 207 | int $createBinary = `checkBox -q -v CreateBinary`;
|
---|
| 208 | checkBox -edit -enable $createBinary BuildEdgeList;
|
---|
| 209 | checkBox -edit -enable $createBinary BuildTangents;
|
---|
| 210 | text -edit -enable $createBinary OgrePathLabel;
|
---|
| 211 | textField -edit -enable $createBinary OgrePath;
|
---|
| 212 |
|
---|
| 213 | int $exportPM = `checkBox -q -v ExportPMAttr`;
|
---|
| 214 | text -edit -enable $exportPM PMPathLabel;
|
---|
[2235] | 215 | textField -edit -enable $exportPM PMPath;
|
---|
| 216 |
|
---|
| 217 | int $exportPMMat = `checkBox -q -v ExportPMMat`;
|
---|
| 218 | text -edit -enable $exportPMMat PMMatFileLabel;
|
---|
| 219 | textField -edit -enable $exportPMMat PMMatFile;
|
---|
[2219] | 220 | }
|
---|
| 221 |
|
---|
| 222 | global proc defineGTPExportUIView()
|
---|
| 223 | {
|
---|
| 224 | string $sceneFile = `file -query -sceneName`;
|
---|
[2235] | 225 | string $sceneDir = dirname($sceneFile);
|
---|
[2219] | 226 | string $mayaFile = basename($sceneFile, "." + fileExtension($sceneFile));
|
---|
| 227 | if($mayaFile == "")
|
---|
| 228 | $mayaFile = "untitled";
|
---|
| 229 |
|
---|
| 230 | // --- Main window for Ogre exporter
|
---|
| 231 | if (`window -exists GTPSceneExportWindow`)
|
---|
| 232 | {
|
---|
| 233 | deleteUI GTPSceneExportWindow;
|
---|
| 234 | }
|
---|
| 235 | window
|
---|
| 236 | -title "GTP Scene Exporter"
|
---|
| 237 | -widthHeight 305 300
|
---|
| 238 | GTPSceneExportWindow;
|
---|
| 239 |
|
---|
| 240 | scrollLayout
|
---|
| 241 | GTPSceneExportScrollLayout;
|
---|
| 242 | columnLayout
|
---|
| 243 | GTPSceneExportMainLayout;
|
---|
| 244 | frameLayout
|
---|
| 245 | -parent GTPSceneExportMainLayout
|
---|
| 246 | -label "General"
|
---|
| 247 | -collapsable true
|
---|
| 248 | GeneralControls;
|
---|
| 249 | columnLayout
|
---|
| 250 | GTPGeneralControlsLayout;
|
---|
| 251 | text
|
---|
| 252 | -parent GTPGeneralControlsLayout
|
---|
| 253 | -label "Output Directory"
|
---|
| 254 | OutputDirectoryLabel;
|
---|
| 255 | textField
|
---|
| 256 | -parent GTPGeneralControlsLayout
|
---|
| 257 | -width 305
|
---|
[2235] | 258 | -text $sceneDir
|
---|
[2219] | 259 | OutputDirectory;
|
---|
| 260 | text
|
---|
| 261 | -parent GTPGeneralControlsLayout
|
---|
| 262 | -label "Scene File Name"
|
---|
| 263 | SceneFileNameLabel;
|
---|
| 264 | textField
|
---|
| 265 | -parent GTPGeneralControlsLayout
|
---|
| 266 | -width 305
|
---|
| 267 | -text ($mayaFile + ".level")
|
---|
| 268 | SceneFileName;
|
---|
| 269 |
|
---|
| 270 | frameLayout
|
---|
| 271 | -parent GTPSceneExportMainLayout
|
---|
| 272 | -label "Materials"
|
---|
| 273 | -collapsable true
|
---|
| 274 | MaterialControls;
|
---|
| 275 | columnLayout
|
---|
| 276 | MaterialControlsLayout;
|
---|
| 277 | checkBox
|
---|
| 278 | -parent MaterialControlsLayout
|
---|
| 279 | -value false
|
---|
| 280 | -changeCommand "formatGTPExportUI"
|
---|
| 281 | -label "Export Materials"
|
---|
| 282 | ExportMaterials;
|
---|
| 283 | text
|
---|
| 284 | -parent MaterialControlsLayout
|
---|
| 285 | -label "Material File Name"
|
---|
| 286 | -enable false
|
---|
| 287 | MaterialFilenameLabel;
|
---|
| 288 | textField
|
---|
| 289 | -parent MaterialControlsLayout
|
---|
| 290 | -width 305
|
---|
| 291 | -enable false
|
---|
| 292 | -text ($mayaFile + ".material")
|
---|
| 293 | MaterialFilename;
|
---|
| 294 | text
|
---|
| 295 | -parent MaterialControlsLayout
|
---|
| 296 | -label "Material name prefix"
|
---|
| 297 | -enable false
|
---|
| 298 | MaterialPrefixLabel;
|
---|
| 299 | textField
|
---|
| 300 | -parent MaterialControlsLayout
|
---|
| 301 | -width 305
|
---|
| 302 | -enable false
|
---|
| 303 | -text $mayaFile
|
---|
| 304 | MaterialPrefix;
|
---|
| 305 |
|
---|
| 306 | frameLayout
|
---|
| 307 | -parent GTPSceneExportMainLayout
|
---|
| 308 | -label "Meshes"
|
---|
| 309 | -collapsable true
|
---|
| 310 | -width 309
|
---|
| 311 | MeshControls;
|
---|
| 312 | columnLayout
|
---|
| 313 | MeshControlsLayout;
|
---|
| 314 | checkBox
|
---|
| 315 | -parent MeshControlsLayout
|
---|
| 316 | -value true
|
---|
| 317 | -changeCommand "formatGTPExportUI"
|
---|
| 318 | -label "Export Meshes"
|
---|
| 319 | ExportMeshes;
|
---|
| 320 | checkBox
|
---|
| 321 | -parent MeshControlsLayout
|
---|
| 322 | -value true
|
---|
| 323 | -changeCommand "formatGTPExportUI"
|
---|
| 324 | -label "Create Binary Mesh Files"
|
---|
| 325 | CreateBinary;
|
---|
| 326 | checkBox
|
---|
| 327 | -parent MeshControlsLayout
|
---|
| 328 | -value false
|
---|
| 329 | -changeCommand "formatGTPExportUI"
|
---|
| 330 | -label "Build Edge List"
|
---|
| 331 | BuildEdgeList;
|
---|
| 332 | checkBox
|
---|
| 333 | -parent MeshControlsLayout
|
---|
| 334 | -value false
|
---|
| 335 | -changeCommand "formatGTPExportUI"
|
---|
| 336 | -label "Build Tangent Vectors"
|
---|
| 337 | BuildTangents;
|
---|
| 338 | text
|
---|
| 339 | -parent MeshControlsLayout
|
---|
| 340 | -label "Ogre Dir(where dlls and OgreXMLConverter.exe are located)"
|
---|
| 341 | -enable true
|
---|
| 342 | OgrePathLabel;
|
---|
| 343 | textField
|
---|
| 344 | -parent MeshControlsLayout
|
---|
| 345 | -width 305
|
---|
| 346 | -enable true
|
---|
| 347 | -text "%OGRE_PATH%/Samples/Common/bin/Release"
|
---|
| 348 | OgrePath;
|
---|
| 349 |
|
---|
| 350 | frameLayout
|
---|
| 351 | -parent GTPSceneExportMainLayout
|
---|
| 352 | -label "Path Map Options"
|
---|
| 353 | -collapsable true
|
---|
| 354 | -width 309
|
---|
| 355 | PathMapControls;
|
---|
| 356 | columnLayout
|
---|
| 357 | PathMapControlsLayout;
|
---|
| 358 | checkBox
|
---|
| 359 | -parent PathMapControlsLayout
|
---|
| 360 | -value false
|
---|
| 361 | -changeCommand "formatGTPExportUI"
|
---|
| 362 | -label "Export Path Map Attributes"
|
---|
| 363 | ExportPMAttr;
|
---|
| 364 | text
|
---|
| 365 | -parent PathMapControlsLayout
|
---|
| 366 | -label "Path Map Texture Directory"
|
---|
| 367 | -enable false
|
---|
| 368 | PMPathLabel;
|
---|
| 369 | textField
|
---|
| 370 | -parent PathMapControlsLayout
|
---|
| 371 | -width 305
|
---|
| 372 | -enable false
|
---|
| 373 | -text "prm"
|
---|
| 374 | PMPath;
|
---|
[2235] | 375 | checkBox
|
---|
| 376 | -parent PathMapControlsLayout
|
---|
| 377 | -value false
|
---|
| 378 | -changeCommand "formatGTPExportUI"
|
---|
| 379 | -label "Export Path Map Materials"
|
---|
| 380 | ExportPMMat;
|
---|
| 381 | text
|
---|
| 382 | -parent PathMapControlsLayout
|
---|
| 383 | -label "Path Map Material File"
|
---|
| 384 | -enable false
|
---|
| 385 | PMMatFileLabel;
|
---|
| 386 | textField
|
---|
| 387 | -parent PathMapControlsLayout
|
---|
| 388 | -width 305
|
---|
| 389 | -enable false
|
---|
| 390 | -text ($mayaFile + ".materials")
|
---|
| 391 | PMMatFile;
|
---|
[2219] | 392 | button
|
---|
| 393 | -parent GTPSceneExportMainLayout
|
---|
| 394 | -label "EXPORT"
|
---|
| 395 | -command "runGTPSceneExport"
|
---|
| 396 | -width 305
|
---|
| 397 | ButtonExport;
|
---|
| 398 |
|
---|
| 399 | showWindow GTPSceneExportWindow;
|
---|
| 400 | }
|
---|
| 401 |
|
---|
| 402 | global proc GTPAddPathMapAttr()
|
---|
| 403 | {
|
---|
| 404 | string $selected[] = `selectedNodes`;
|
---|
| 405 | for($i = 0; $i < size($selected); $i++ )
|
---|
| 406 | {
|
---|
| 407 | select $selected[$i];
|
---|
| 408 | $isGeometry = `objectType -isType mesh $selected[$i]`;
|
---|
| 409 | if($isGeometry)
|
---|
| 410 | {
|
---|
| 411 | if(!attributeExists("PhotonMapResolution", $selected[$i]))
|
---|
| 412 | addAttr -at short -ln PhotonMapResolution -sn prmRes -min 16 -max 1024 -dv 64;
|
---|
| 413 | if(!attributeExists("PhotonMapSubdivision", $selected[$i]))
|
---|
| 414 | addAttr -at short -ln PhotonMapSubdivision -sn prmDiv -min 1 -dv 1;
|
---|
| 415 |
|
---|
| 416 | string $transforms[] = `listRelatives -ap $selected[$i]`;
|
---|
| 417 | for($j = 0; $j<size($transforms);$j++)
|
---|
| 418 | {
|
---|
| 419 | select $transforms[$j];
|
---|
| 420 | if(!attributeExists("PathMapClusters", $transforms[$j]))
|
---|
| 421 | addAttr -at short -ln PathMapClusters -sn prmRes -min 1 -max 64 -dv 32;
|
---|
| 422 | }
|
---|
| 423 | }
|
---|
| 424 | else
|
---|
| 425 | {
|
---|
| 426 | select $selected[$i];
|
---|
| 427 | $isTransform = `objectType -isType transform $selected[$i]`;
|
---|
| 428 | if($isTransform)
|
---|
| 429 | {
|
---|
| 430 | string $relatives[] = `listRelatives $selected[$i]`;
|
---|
| 431 | int $numRelatives = size($relatives);
|
---|
| 432 | for($j=0;$j<$numRelatives;$j++)
|
---|
| 433 | {
|
---|
| 434 | $isGeometry = `objectType -isType mesh $relatives[$j]`;
|
---|
| 435 | if($isGeometry)
|
---|
| 436 | {
|
---|
| 437 | select $relatives[$j];
|
---|
| 438 | if(!attributeExists("PhotonMapResolution", $relatives[$j]))
|
---|
| 439 | addAttr -at short -ln PhotonMapResolution -sn prmRes -min 16 -max 1024 -dv 64;
|
---|
| 440 | if(!attributeExists("PhotonMapSubdivision", $relatives[$j]))
|
---|
| 441 | addAttr -at short -ln PhotonMapSubdivision -sn prmDiv -min 1 -dv 1;
|
---|
| 442 |
|
---|
| 443 | select $selected[$i];
|
---|
| 444 | if(!attributeExists("PathMapClusters", $selected[$i]))
|
---|
| 445 | addAttr -at short -ln PathMapClusters -sn prmClus -min 1 -max 64 -dv 32;
|
---|
| 446 | }
|
---|
| 447 | }
|
---|
| 448 | }
|
---|
| 449 | }
|
---|
| 450 | }
|
---|
| 451 | }
|
---|
| 452 |
|
---|
| 453 | namespace -set ":"; |
---|