00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #define OSG_COMPILEVRMLLOADERINST
00040
00041 #include <stdlib.h>
00042 #include <stdio.h>
00043
00044 #include "OSGConfig.h"
00045
00046 #include <iostream>
00047
00048 #include "OSGVRMLFile.h"
00049
00050 #include <OSGFieldType.h>
00051
00052 #include <OSGSFSysTypes.h>
00053 #include <OSGMFSysTypes.h>
00054
00055 #include <OSGSFBaseTypes.h>
00056 #include <OSGMFBaseTypes.h>
00057
00058 #include <OSGSFMathTypes.h>
00059 #include <OSGMFMathTypes.h>
00060
00061 #include <OSGSFVecTypes.h>
00062 #include <OSGMFVecTypes.h>
00063
00064 #include <OSGMFFieldContainerTypes.h>
00065 #include <OSGSFFieldContainerTypes.h>
00066
00067 #include <OSGImageFields.h>
00068
00069 #include <OSGGeoProperty.h>
00070 #include <OSGTime.h>
00071
00072 #include <OSGSimpleAttachments.h>
00073
00074 #include <OSGChunkMaterial.h>
00075 #include <OSGMaterialChunk.h>
00076 #include <OSGMaterialGroup.h>
00077 #include <OSGTextureChunk.h>
00078 #include <OSGImage.h>
00079
00080
00081
00082 OSG_USING_NAMESPACE
00083
00087 #ifndef __sgi
00088 template OSG_SYSTEMLIB_DLLMAPPING
00089 class ScanParseFieldTypeMapper<ScanParseSkel>;
00090 template OSG_SYSTEMLIB_DLLMAPPING
00091 class VRMLNodeFactory<ScanParseFieldTypeMapper<ScanParseSkel> >;
00092 #endif
00093
00094 OSG::Time startTime = 0.;
00095 OSG::Time useTime = 0.;
00096 OSG::Time findTime = 0.;
00097
00098
00099
00100
00101 VRMLFile::VRMLFile(void) :
00102 Inherited(),
00103
00104
00105 _pSceneRootNode (NullFC),
00106
00107 _pLightRoot (NullFC),
00108 _pCurrentGlobalLight(NullFC),
00109
00110 _pCurrNodeDesc(NULL),
00111 _sNodeDescs (),
00112
00113 _pCurrentFC (NullFC),
00114 _pCurrentField (NULL),
00115 _pCurrentFieldDesc(NULL),
00116
00117 _fcStack (),
00118 _fStack (),
00119 _fdStack (),
00120
00121 _nameFCMap (),
00122 _nameDescMap()
00123 {
00124 Self::setReferenceHeader("#VRML V2.0 ");
00125
00126 initIntExtFieldTypeMapper();
00127 initExtIntFieldTypeMapper();
00128 }
00129
00130
00131
00132
00133 VRMLFile::~VRMLFile(void)
00134 {
00135 }
00136
00137
00138
00139
00140 void VRMLFile::scanStream(std::istream &is)
00141 {
00142 startTime = getSystemTime();
00143
00144
00145 _pSceneRootNode = NullFC;
00146 _pLightRoot = NullFC;
00147 _pCurrentGlobalLight = NullFC;
00148
00149 _nameFCMap.clear();
00150
00151 #ifdef OSG_DEBUG_VRML
00152 VRMLNodeDesc::resetIndent();
00153 #endif
00154
00155 if(is)
00156 {
00157 Inherited::scanStream(is);
00158 }
00159
00160 FINFO(("Full Time : %lf | Use Time %lf\n",
00161 getSystemTime() - startTime,
00162 useTime));
00163 }
00164
00165 void VRMLFile::scanFile(const Char8 *szFilename)
00166 {
00167 startTime = getSystemTime();
00168
00169
00170 _pSceneRootNode = NullFC;
00171 _pLightRoot = NullFC;
00172 _pCurrentGlobalLight = NullFC;
00173
00174 _nameFCMap.clear();
00175
00176 #ifdef OSG_DEBUG_VRML
00177 VRMLNodeDesc::resetIndent();
00178 #endif
00179
00180 if(szFilename != NULL)
00181 {
00182 Inherited::scanFile(szFilename);
00183 }
00184
00185 FINFO(("Full Time : %lf | Use Time %lf\n",
00186 getSystemTime() - startTime,
00187 useTime));
00188 }
00189
00190 void VRMLFile::beginNode(const Char8 *szNodeTypename,
00191 const Char8 *szNodename)
00192 {
00193 FieldContainerPtr pNewNode;
00194
00195 _pCurrNodeDesc = findNodeDesc(szNodeTypename);
00196
00197 if(_pCurrNodeDesc == NULL)
00198 return;
00199
00200 _sNodeDescs.push(_pCurrNodeDesc);
00201
00202 _pCurrNodeDesc->reset();
00203
00204 pNewNode = _pCurrNodeDesc->beginNode(szNodeTypename,
00205 szNodename,
00206 _pCurrentFC);
00207
00208 #ifdef OSG_DEBUG_VRML
00209 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00210 PINFO << "Begin Node " << szNodeTypename << std::endl;
00211
00212 VRMLNodeDesc::incIndent();
00213 #endif
00214
00215 if(szNodename != NULL)
00216 {
00217 if(pNewNode != NullFC)
00218 {
00219 if(pNewNode->getType().isNode() == true)
00220 {
00221 #ifdef OSG_DEBUG_VRML
00222 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00223 PINFO << "Node named : " << szNodename << std::endl;
00224 #endif
00225
00226 NodePtr pNode = NodePtr::dcast(pNewNode);
00227 NamePtr pNodename = Name::create();
00228
00229 beginEditCP(pNodename);
00230 beginEditCP(pNode,Node::AttachmentsFieldMask);
00231
00232 pNodename->getFieldPtr()->getValue().assign(szNodename);
00233 pNode->addAttachment(pNodename);
00234
00235 endEditCP(pNode,Node::AttachmentsFieldMask);
00236 endEditCP(pNodename);
00237
00238 NameContainerMap::iterator mIt =
00239 _nameFCMap.find(IDStringLink(szNodename));
00240
00241 if(mIt == _nameFCMap.end())
00242 {
00243 _nameFCMap[IDString(szNodename)] = pNewNode;
00244
00245 #ifdef OSG_DEBUG_VRML
00246 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00247 PINFO << "Fieldcontainer " << szNodename
00248 << " added to map " << std::endl;
00249 #endif
00250 }
00251 }
00252 else if(pNewNode->getType().isNodeCore() == true)
00253 {
00254 #ifdef OSG_DEBUG_VRML
00255 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00256 PINFO << "Nodecore named : " << szNodename << std::endl;
00257 #endif
00258 NodeCorePtr pNodeCore = NodeCorePtr::dcast(pNewNode);
00259 NamePtr pNodename = Name::create();
00260
00261 beginEditCP(pNodename);
00262 beginEditCP(pNodeCore,NodeCore::AttachmentsFieldMask);
00263
00264 pNodename->getFieldPtr()->getValue().assign(szNodename);
00265 pNodeCore->addAttachment(pNodename);
00266
00267 endEditCP(pNodeCore,NodeCore::AttachmentsFieldMask);
00268 endEditCP(pNodename);
00269
00270 NameContainerMap::iterator mIt =
00271 _nameFCMap.find(IDStringLink(szNodename));
00272
00273 if(mIt == _nameFCMap.end())
00274 {
00275 _nameFCMap[IDString(szNodename)] = pNewNode;
00276
00277 #ifdef OSG_DEBUG_VRML
00278 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00279 PINFO << "Fieldcontainer " << szNodename
00280 << " added to map " << std::endl;
00281 #endif
00282 }
00283 }
00284 else
00285 {
00286 #ifdef OSG_DEBUG_VRML
00287 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00288 PINFO << "Fieldcontainer " << szNodeTypename
00289 << " is neither node nor nodecore " << std::endl;
00290 #endif
00291
00292 NameContainerMap::iterator mIt =
00293 _nameFCMap.find(IDStringLink(szNodename));
00294
00295 if(mIt == _nameFCMap.end())
00296 {
00297 _nameFCMap[IDString(szNodename)] = pNewNode;
00298
00299 #ifdef OSG_DEBUG_VRML
00300 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00301 PINFO << "Fieldcontainer " << szNodename
00302 << " added to map " << std::endl;
00303 #endif
00304 }
00305
00306 }
00307
00308 _nameDescMap[IDString(szNodename)] = _pCurrNodeDesc;
00309
00310 #ifdef OSG_DEBUG_VRML
00311 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00312 PINFO << "Desc for "
00313 << szNodename
00314 << " added to map "
00315 << std::endl;
00316 #endif
00317 }
00318 else
00319 {
00320 #ifdef OSG_DEBUG_VRML
00321 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00322 PINFO << "Fieldcontainer "
00323 << szNodeTypename
00324 << "is empty, save on end "
00325 << std::endl;
00326 #endif
00327
00328 if(_pCurrNodeDesc != NULL)
00329 _pCurrNodeDesc->setOnEndSave(szNodename);
00330
00331 _nameDescMap[IDString(szNodename)] = _pCurrNodeDesc;
00332
00333 #ifdef OSG_DEBUG_VRML
00334 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00335 PINFO << "Desc for "
00336 << szNodename
00337 << " added to map "
00338 << std::endl;
00339 #endif
00340 }
00341 }
00342
00343 setContainerFieldValue(pNewNode);
00344
00345 _pCurrentFC = pNewNode;
00346
00347 _fcStack.push(_pCurrentFC);
00348
00349 if(_fcStack.size() == 1)
00350 {
00351 NodePtr pNode = NodePtr::dcast(_pCurrentFC);
00352
00353 if(_pSceneRootNode == NullFC)
00354 {
00355 GroupPtr pGroup = Group::create();
00356
00357 _pSceneRootNode = Node::create();
00358
00359 beginEditCP(_pSceneRootNode, Node::CoreFieldMask);
00360 {
00361 _pSceneRootNode->setCore(pGroup);
00362 }
00363 endEditCP (_pSceneRootNode, Node::CoreFieldMask);
00364 }
00365
00366 beginEditCP(_pSceneRootNode, Node::ChildrenFieldMask);
00367 {
00368 _pSceneRootNode->addChild(pNode);
00369 }
00370 endEditCP (_pSceneRootNode, Node::ChildrenFieldMask);
00371 }
00372 }
00373
00374 void VRMLFile::endNode(void)
00375 {
00376 if(_pCurrNodeDesc == NULL)
00377 {
00378 #ifdef OSG_DEBUG_VRML
00379 VRMLNodeDesc::decIndent();
00380
00381 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00382 PINFO << "End Node " << std::endl;
00383 #endif
00384 return;
00385 }
00386
00387 _pCurrNodeDesc->endNode(_pCurrentFC);
00388
00389 if(_pCurrNodeDesc->getOnEndSave() == true)
00390 {
00391 SLOG << "Fieldcontainer " << _pCurrNodeDesc->getSavename()
00392 << " on end Save " << std::endl;
00393
00394 NameContainerMap::iterator mIt =
00395 _nameFCMap.find(IDStringLink(_pCurrNodeDesc->getSavename()));
00396
00397 if(mIt == _nameFCMap.end())
00398 {
00399 _nameFCMap[IDString(_pCurrNodeDesc->getSavename())] =
00400 _pCurrNodeDesc->getSaveFieldContainer();
00401
00402 SLOG << "Fieldcontainer " << _pCurrNodeDesc->getSavename()
00403 << " added to map " << std::endl;
00404 }
00405
00406 _pCurrNodeDesc->clearOnEndSave();
00407 }
00408
00409 _sNodeDescs.pop();
00410
00411 if(_sNodeDescs.size() != 0)
00412 {
00413 _pCurrNodeDesc = _sNodeDescs.top();
00414 }
00415 else
00416 {
00417 _pCurrNodeDesc = NULL;
00418 }
00419
00420 if(_pCurrentFC != NullFC)
00421 {
00422 if(_pCurrentFC->getType().isNode() == true)
00423 {
00424 NodePtr pNode = NodePtr::dcast(_pCurrentFC);
00425
00426 if(pNode->getCore() == NullFC)
00427 {
00428 GroupPtr pGroup = Group::create();
00429
00430 beginEditCP(pNode);
00431 pNode->setCore(pGroup);
00432 beginEditCP(pNode);
00433 }
00434 }
00435 }
00436
00437 _fcStack.pop();
00438
00439 if(_fcStack.size() != 0)
00440 {
00441 _pCurrentFC = _fcStack.top();
00442 }
00443 else
00444 {
00445 _pCurrentFC = NullFC;
00446 }
00447
00448 #ifdef OSG_DEBUG_VRML
00449 VRMLNodeDesc::decIndent();
00450
00451 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00452 PINFO << "End Node " << std::endl;
00453 #endif
00454 }
00455
00456 void VRMLFile::beginScript(const Char8 *szNodename)
00457 {
00458 beginNode("Script", szNodename);
00459 }
00460
00461 void VRMLFile::endScript(void)
00462 {
00463 endNode();
00464 }
00465
00466 void VRMLFile::beginField(const Char8 *szFieldname,
00467 const UInt32 OSG_VRML_ARG(uiFieldTypeId))
00468 {
00469 if(szFieldname == NULL)
00470 return;
00471
00472 #ifdef OSG_DEBUG_VRML
00473 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00474 PINFO << "VRMLFile::beginField : looking for "
00475 << szFieldname
00476 << " ("
00477 << uiFieldTypeId
00478 << " | "
00479 << _pCurrentField
00480 << " | "
00481 << _pCurrentFieldDesc
00482 << ")"
00483 << std::endl;
00484
00485 VRMLNodeDesc::incIndent();
00486 #endif
00487
00488 if(_pCurrentFieldDesc != NULL)
00489 {
00490 NodeCorePtr pCore;
00491 NodePtr pNode;
00492
00493 if(_pCurrentFC != NullFC)
00494 {
00495 beginEditCP(_pCurrentFC,
00496
00497 _pCurrentFieldDesc->getFieldMask(),
00498 ChangedOrigin::Abstract |
00499 ChangedOrigin::AbstrIgnoreCore |
00500 ChangedOrigin::AbstrIgnoreChild |
00501 ChangedOrigin::AbstrCheckValid );
00502
00503 if(_pCurrentFC->getType().isNode())
00504 {
00505 pNode = NodePtr::dcast(_pCurrentFC);
00506
00507 pCore = pNode->getCore();
00508
00509 beginEditCP( pCore,
00510
00511 _pCurrentFieldDesc->getFieldMask(),
00512 ChangedOrigin::Abstract |
00513 ChangedOrigin::AbstrIgnoreCore |
00514 ChangedOrigin::AbstrIgnoreChild |
00515 ChangedOrigin::AbstrCheckValid);
00516 }
00517 }
00518 }
00519
00520 _fStack.push (_pCurrentField);
00521 _fdStack.push(_pCurrentFieldDesc);
00522 }
00523
00524 void VRMLFile::endField(void)
00525 {
00526 _fStack.pop();
00527
00528 if(_fStack.size() != 0)
00529 {
00530 _pCurrentField = _fStack.top();
00531 }
00532 else
00533 {
00534 _pCurrentField = NULL;
00535 }
00536
00537
00538 if(_pCurrentFieldDesc != NULL)
00539 {
00540 NodeCorePtr pCore;
00541 NodePtr pNode;
00542
00543 if(_pCurrentFC != NullFC)
00544 {
00545 endEditCP(_pCurrentFC,
00546
00547 _pCurrentFieldDesc->getFieldMask(),
00548 ChangedOrigin::Abstract |
00549 ChangedOrigin::AbstrIgnoreCore |
00550 ChangedOrigin::AbstrIgnoreChild |
00551 ChangedOrigin::AbstrCheckValid );
00552
00553 if(_pCurrentFC->getType().isNode())
00554 {
00555 pNode = NodePtr::dcast(_pCurrentFC);
00556
00557 pCore = pNode->getCore();
00558
00559 endEditCP( pCore,
00560
00561 _pCurrentFieldDesc->getFieldMask(),
00562 ChangedOrigin::Abstract |
00563 ChangedOrigin::AbstrIgnoreCore |
00564 ChangedOrigin::AbstrIgnoreChild |
00565 ChangedOrigin::AbstrCheckValid );
00566 }
00567 }
00568 }
00569
00570 _fdStack.pop();
00571
00572 if(_fdStack.size() != 0)
00573 {
00574 _pCurrentFieldDesc = _fdStack.top();
00575 }
00576 else
00577 {
00578 _pCurrentFieldDesc = NULL;
00579 }
00580
00581 #ifdef OSG_DEBUG_VRML
00582 VRMLNodeDesc::decIndent();
00583
00584 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00585 PINFO << "VRMLFile::endField " << std::endl;
00586 #endif
00587 }
00588
00589
00590 void VRMLFile::addFieldValue(const Char8 *szFieldVal)
00591 {
00592 Inherited::addFieldValue(szFieldVal);
00593
00594 if(_pCurrNodeDesc != NULL)
00595 {
00596 _pCurrNodeDesc->addFieldValue(_pCurrentField, szFieldVal);
00597 }
00598 }
00599
00600 void VRMLFile::beginFieldDecl(const Char8 *szFieldType,
00601 const UInt32 uiFieldTypeId,
00602 const Char8 *szFieldName)
00603 {
00604 Inherited::beginFieldDecl(szFieldType, uiFieldTypeId, szFieldName);
00605
00606
00607 if(_pCurrNodeDesc == 0)
00608 return;
00609
00610 if(szFieldName == NULL)
00611 return;
00612
00613 _pCurrentField = NULL;
00614 _pCurrentFieldDesc = NULL;
00615
00616 _pCurrNodeDesc->getFieldAndDesc(_pCurrentFC,
00617 szFieldName,
00618 _pCurrentField,
00619 _pCurrentFieldDesc);
00620 }
00621
00622
00623 UInt32 VRMLFile::getFieldType(const Char8 *szFieldname)
00624 {
00625 UInt32 returnValue = 0;
00626
00627 if(_pCurrNodeDesc == 0)
00628 return returnValue;
00629
00630 if(szFieldname == NULL)
00631 return returnValue;
00632
00633 _pCurrentField = NULL;
00634 _pCurrentFieldDesc = NULL;
00635
00636 _pCurrNodeDesc->getFieldAndDesc(_pCurrentFC,
00637 szFieldname,
00638 _pCurrentField,
00639 _pCurrentFieldDesc);
00640
00641 if(_pCurrentField != NULL)
00642 returnValue = _pCurrentField->getType().getId();
00643
00644 #ifdef OSG_DEBUG_VRML
00645 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00646 PINFO << "VRMLFile::getFieldType : Got Field and type "
00647 << returnValue << " "
00648 << _pCurrentField << " "
00649 << _pCurrentFieldDesc << " ";
00650
00651 if(_pCurrentField != NULL)
00652 PINFO << _pCurrentField->getType().getName() << std::endl;
00653 else
00654 PINFO << std::endl;
00655 #endif
00656
00657 return returnValue;
00658 }
00659
00660 void VRMLFile::use(const Char8 *szName)
00661 {
00662 Time beginUse = getSystemTime();
00663
00664 FieldContainerPtr pUsedFC;
00665
00666
00667
00668 #ifdef OSG_DEBUG_VRML
00669 indentLog(VRMLNodeDesc::getIndent(), PINFO);
00670 PINFO << "VRMLFile::use : looking for "
00671 << szName
00672 << std::endl;
00673
00674 VRMLNodeDesc::incIndent();
00675 #endif
00676
00677
00678
00679 pUsedFC = findReference(szName);
00680
00681 if(pUsedFC == NullFC)
00682 {
00683 PWARNING << "No fieldContainer with name found to use"
00684 << szName
00685 << std::endl;
00686 }
00687 else
00688 {
00689
00690
00691 VRMLNodeDesc *pDesc = NULL;
00692
00693 NameDescriptionMap::iterator mIt =
00694 _nameDescMap.find(IDStringLink(szName));
00695
00696 if(mIt != _nameDescMap.end())
00697 {
00698 pDesc = mIt->second;
00699 }
00700
00701 if(pUsedFC->getType().isNode())
00702 {
00703 NodePtr pRootNode = NodePtr::dcast(pUsedFC);
00704
00705 pUsedFC = cloneTree(pRootNode);
00706 }
00707
00708 if(pDesc != NULL)
00709 {
00710 if(pDesc->use(pUsedFC) == false)
00711 {
00712 setContainerFieldValue(pUsedFC);
00713 }
00714 }
00715 else
00716 {
00717 setContainerFieldValue(pUsedFC);
00718 }
00719 }
00720
00721 #ifdef OSG_DEBUG_VRML
00722 VRMLNodeDesc::decIndent();
00723 #endif
00724
00725 useTime += (getSystemTime() - beginUse);
00726 }
00727
00728
00729
00730
00731 void VRMLFile::scanStandardPrototypes(const Char8 *szFilename)
00732 {
00733 #ifdef OSG_DEBUG_VRML
00734 VRMLNodeDesc::resetIndent();
00735 #endif
00736
00737 preStandardProtos();
00738 scanFile(szFilename);
00739 postStandardProtos();
00740
00741
00742 }
00743
00744 void VRMLFile::createStandardPrototypes(void)
00745 {
00746 #ifdef OSG_DEBUG_VRML
00747 VRMLNodeDesc::resetIndent();
00748 #endif
00749
00750 preStandardProtos();
00751
00752 #if 0
00753 PROTO Anchor [
00754 eventIn MFNode addChildren
00755 eventIn MFNode removeChildren
00756 exposedField MFNode children []
00757 exposedField SFString description ""
00758 exposedField MFString parameter []
00759 exposedField MFString url []
00760 field SFVec3f bboxCenter 0 0 0
00761 field SFVec3f bboxSize -1 -1 -1
00762 ] { }
00763 #endif
00764
00765 beginProto ("Anchor");
00766 {
00767 beginEventInDecl ("MFNode", Self::OSGmfNode, "addChildren");
00768 endEventDecl ();
00769
00770 beginEventInDecl ("MFNode", Self::OSGmfNode, "removeChildren");
00771 endEventDecl ();
00772
00773 beginExposedFieldDecl("MFNode", Self::OSGmfNode, "children");
00774 endExposedFieldDecl ();
00775
00776 beginExposedFieldDecl("SFString", Self::OSGsfString, "description");
00777 endExposedFieldDecl ();
00778
00779 beginExposedFieldDecl("MFString", Self::OSGmfString, "parameter");
00780 endExposedFieldDecl ();
00781
00782 beginExposedFieldDecl("MFString", Self::OSGmfString, "url");
00783 endExposedFieldDecl ();
00784
00785 beginFieldDecl ("SFVec3f", Self::OSGsfVec3f, "bboxCenter");
00786 addFieldValue ("0 0 0");
00787 endFieldDecl ();
00788
00789 beginFieldDecl ("SFVec3f", Self::OSGsfVec3f, "bboxSize");
00790 addFieldValue ("-1 -1 -1");
00791 endFieldDecl ();
00792 }
00793 endProto ();
00794
00795
00796 #if 0
00797 PROTO Appearance [
00798 exposedField SFNode material NULL
00799 exposedField SFNode texture NULL
00800 exposedField SFNode textureTransform NULL
00801 ] { }
00802 #endif
00803
00804 beginProto("Appearance");
00805 {
00806 beginExposedFieldDecl("SFNode", Self::OSGsfNode, "material");
00807
00808 endExposedFieldDecl ();
00809
00810 beginExposedFieldDecl("SFNode", Self::OSGsfNode, "texture");
00811
00812 endExposedFieldDecl ();
00813
00814 beginExposedFieldDecl("SFNode", Self::OSGsfNode, "textureTransform");
00815
00816 endExposedFieldDecl ();
00817 }
00818 endProto ();
00819
00820 #if 0
00821 PROTO AudioClip [
00822 exposedField SFString description ""
00823 exposedField SFBool loop FALSE
00824 exposedField SFFloat pitch 1.0
00825 exposedField SFTime startTime 0
00826 exposedField SFTime stopTime 0
00827 exposedField MFString url []
00828 eventOut SFTime duration_changed
00829 eventOut SFBool isActive
00830 ] { }
00831 #endif
00832
00833 beginProto("AudioClip");
00834 {
00835 beginExposedFieldDecl("SFString", Self::OSGsfString, "description");
00836 addFieldValue ("");
00837 endExposedFieldDecl ();
00838
00839 beginExposedFieldDecl("SFBool", Self::OSGsfBool, "loop");
00840 addFieldValue ("FALSE");
00841 endExposedFieldDecl ();
00842
00843 beginExposedFieldDecl("SFFloat", Self::OSGsfFloat, "pitch");
00844 addFieldValue ("1.0");
00845 endExposedFieldDecl ();
00846
00847 beginExposedFieldDecl("SFTime", Self::OSGsfTime, "startTime");
00848 addFieldValue ("0");
00849 endExposedFieldDecl ();
00850
00851 beginExposedFieldDecl("SFTime", Self::OSGsfTime, "stopTime");
00852 addFieldValue ("0");
00853 endExposedFieldDecl ();
00854
00855 beginExposedFieldDecl("MFString", Self::OSGmfString, "url");
00856 endExposedFieldDecl ();
00857
00858 beginEventOutDecl ("SFTime", Self::OSGsfTime, "duration_changed");
00859 endEventDecl ();
00860
00861 beginEventOutDecl ("SFBool", Self::OSGsfBool, "isActive");
00862 endEventDecl ();
00863 }
00864 endProto ();
00865
00866 #if 0
00867 PROTO Background [
00868 eventIn SFBool set_bind
00869 exposedField MFFloat groundAngle []
00870 exposedField MFColor groundColor []
00871 exposedField MFString backUrl []
00872 exposedField MFString bottomUrl []
00873 exposedField MFString frontUrl []
00874 exposedField MFString leftUrl []
00875 exposedField MFString rightUrl []
00876 exposedField MFString topUrl []
00877 exposedField MFFloat skyAngle []
00878 exposedField MFColor skyColor [ 0 0 0 ]
00879 eventOut SFBool isBound
00880 ] { }
00881 #endif
00882
00883 beginProto("Background");
00884 {
00885 beginEventInDecl ("SFBool", Self::OSGsfBool, "set_bind");
00886 endEventDecl ();
00887
00888 beginExposedFieldDecl("MFFloat", Self::OSGmfFloat, "groundAngle");
00889 endExposedFieldDecl ();
00890
00891 beginExposedFieldDecl("MFColor", Self::OSGmfColor, "groundColor");
00892 endExposedFieldDecl ();
00893
00894 beginExposedFieldDecl("MFString", Self::OSGmfString, "backUrl");
00895 endExposedFieldDecl ();
00896
00897 beginExposedFieldDecl("MFString", Self::OSGmfString, "bottomUrl");
00898 endExposedFieldDecl ();
00899
00900 beginExposedFieldDecl("MFString", Self::OSGmfString, "frontUrl");
00901 endExposedFieldDecl ();
00902
00903 beginExposedFieldDecl("MFString", Self::OSGmfString, "leftUrl");
00904 endExposedFieldDecl ();
00905
00906 beginExposedFieldDecl("MFString", Self::OSGmfString, "rightUrl");
00907 endExposedFieldDecl ();
00908
00909 beginExposedFieldDecl("MFString", Self::OSGmfString, "topUrl");
00910 endExposedFieldDecl ();
00911
00912 beginExposedFieldDecl("MFFloat", Self::OSGmfFloat, "skyAngle");
00913 endExposedFieldDecl ();
00914
00915 beginExposedFieldDecl("MFColor", Self::OSGmfColor, "skyColor");
00916 addFieldValue ("0 0 0");
00917 endExposedFieldDecl ();
00918
00919 beginEventOutDecl ("SFBool", Self::OSGsfBool, "isBound");
00920 endEventDecl ();
00921 }
00922 endProto ();
00923
00924
00925 #if 0
00926 PROTO Billboard [
00927 eventIn MFNode addChildren
00928 eventIn MFNode removeChildren
00929 exposedField SFVec3f axisOfRotation 0 1 0
00930 exposedField MFNode children []
00931 field SFVec3f bboxCenter 0 0 0
00932 field SFVec3f bboxSize -1 -1 -1
00933 ] { }
00934 #endif
00935
00936 beginProto("Billboard");
00937 {
00938 beginEventInDecl ("MFNode", Self::OSGmfNode, "addChildren");
00939 endEventDecl ();
00940
00941 beginEventInDecl ("MFNode", Self::OSGmfNode, "removeChildren");
00942 endEventDecl ();
00943
00944 beginExposedFieldDecl("SFVec3f", Self::OSGsfVec3f, "axisOfRotation");
00945 addFieldValue ("0 1 0");
00946 endExposedFieldDecl ();
00947
00948 beginExposedFieldDecl("MFNode", Self::OSGmfNode, "children");
00949 endExposedFieldDecl ();
00950
00951 beginFieldDecl ("SFVec3f", Self::OSGsfVec3f, "bboxCenter");
00952 addFieldValue ("0 0 0");
00953 endFieldDecl ();
00954
00955 beginFieldDecl ("SFVec3f", Self::OSGsfVec3f, "bboxSize");
00956 addFieldValue ("-1 -1 -1");
00957 endFieldDecl ();
00958 }
00959 endProto ();
00960
00961 #if 0
00962 PROTO Box [
00963 field SFVec3f size 2 2 2
00964 ] { }
00965 #endif
00966
00967 beginProto("Box");
00968 {
00969 beginFieldDecl("SFVec3f", Self::OSGsfVec3f, "size");
00970 addFieldValue ("2 2 2");
00971 endFieldDecl ();
00972 }
00973 endProto ();
00974
00975 #if 0
00976 PROTO Collision [
00977 eventIn MFNode addChildren
00978 eventIn MFNode removeChildren
00979 exposedField MFNode children []
00980 exposedField SFBool collide TRUE
00981 field SFVec3f bboxCenter 0 0 0
00982 field SFVec3f bboxSize -1 -1 -1
00983 field SFNode proxy NULL
00984 eventOut SFTime collideTime
00985 ] { }
00986 #endif
00987
00988 beginProto("Collision");
00989 {
00990 beginEventInDecl ("MFNode", Self::OSGmfNode, "addChildren");
00991 endEventDecl ();
00992
00993 beginEventInDecl ("MFNode", Self::OSGmfNode, "removeChildren");
00994 endEventDecl ();
00995
00996 beginExposedFieldDecl("MFNode", Self::OSGmfNode, "children");
00997 endExposedFieldDecl ();
00998
00999 beginExposedFieldDecl("SFBool", Self::OSGsfBool, "collide");
01000 addFieldValue ("TRUE");
01001 endExposedFieldDecl ();
01002
01003 beginFieldDecl ("SFVec3f", Self::OSGsfVec3f, "bboxCenter");
01004 addFieldValue ("0 0 0");
01005 endFieldDecl ();
01006
01007 beginFieldDecl ("SFVec3f", Self::OSGsfVec3f, "bboxSize");
01008 addFieldValue ("-1 -1 -1");
01009 endFieldDecl ();
01010
01011 beginFieldDecl ("SFNode", Self::OSGsfNode, "proxy");
01012 endFieldDecl ();
01013
01014 beginEventOutDecl ("SFTime", OSGsfTime, "collideTime");
01015 endEventDecl ();
01016 }
01017 endProto ();
01018
01019 #if 0
01020 PROTO Color [
01021 exposedField MFColor color []
01022 ] { }
01023 #endif
01024
01025 beginProto("Color");
01026 {
01027 beginExposedFieldDecl("MFColor", Self::OSGmfColor, "color");
01028 endExposedFieldDecl ();
01029 }
01030 endProto ();
01031
01032 #if 0
01033 PROTO ColorInterpolator [
01034 eventIn SFFloat set_fraction
01035 exposedField MFFloat key []
01036 exposedField MFColor keyValue []
01037 eventOut SFColor value_changed
01038 ] { }
01039 #endif
01040
01041 beginProto("ColorInterpolator");
01042 {
01043 beginEventInDecl ("SFFloat", OSGsfFloat, "set_fraction");
01044 endEventDecl ();
01045
01046 beginExposedFieldDecl("MFFloat", Self::OSGmfFloat, "key");
01047 endExposedFieldDecl ();
01048
01049 beginExposedFieldDecl("MFColor", Self::OSGmfColor, "keyValue");
01050 endExposedFieldDecl ();
01051
01052 beginEventOutDecl ("SFColor", Self::OSGsfColor, "value_changed");
01053 endEventDecl ();
01054 }
01055 endProto ();
01056
01057 #if 0
01058 PROTO Cone [
01059 field SFFloat bottomRadius 1
01060 field SFFloat height 2
01061 field SFBool side TRUE
01062 field SFBool bottom TRUE
01063 ] { }
01064 #endif
01065
01066 beginProto("Cone");
01067 {
01068 beginFieldDecl("SFFloat", Self::OSGsfFloat, "bottomRadius");
01069 addFieldValue ("1");
01070 endFieldDecl ();
01071
01072 beginFieldDecl("SFFloat", Self::OSGsfFloat, "height");
01073 addFieldValue ("2");
01074 endFieldDecl ();
01075
01076 beginFieldDecl("SFBool", Self::OSGsfBool, "side");
01077 addFieldValue ("TRUE");
01078 endFieldDecl ();
01079
01080 beginFieldDecl("SFBool", Self::OSGsfBool, "bottom");
01081 addFieldValue ("TRUE");
01082 endFieldDecl ();
01083 }
01084 endProto ();
01085
01086 #if 0
01087 PROTO Coordinate [
01088 exposedField MFVec3f point []
01089 ] { }
01090 #endif
01091
01092 beginProto("Coordinate");
01093 {
01094 beginExposedFieldDecl("MFVec3f", Self::OSGmfVec3f, "point");
01095 endExposedFieldDecl ();
01096 }
01097 endProto ();
01098
01099 #if 0
01100 PROTO CoordinateInterpolator [
01101 eventIn SFFloat set_fraction
01102 exposedField MFFloat key []
01103 exposedField MFVec3f keyValue []
01104 eventOut MFVec3f value_changed
01105 ] { }
01106 #endif
01107
01108 beginProto("CoordinateInterpolator");
01109 {
01110 beginEventInDecl ("SFFloat", Self::OSGsfFloat, "set_fraction");
01111 endEventDecl ();
01112
01113 beginExposedFieldDecl("MFFloat", Self::OSGmfFloat, "key");
01114 endExposedFieldDecl ();
01115
01116 beginExposedFieldDecl("MFVec3f", Self::OSGmfVec3f, "keyValue");
01117 endExposedFieldDecl ();
01118
01119 beginEventOutDecl ("MFVec3f", Self::OSGmfVec3f, "value_changed");
01120 endEventDecl ();
01121 }
01122 endProto ();
01123
01124 #if 0
01125 PROTO Cylinder [
01126 field SFBool bottom TRUE
01127 field SFFloat height 2
01128 field SFFloat radius 1
01129 field SFBool side TRUE
01130 field SFBool top TRUE
01131 ] { }
01132 #endif
01133
01134 beginProto("Cylinder");
01135 {
01136 beginFieldDecl("SFBool", Self::OSGsfBool, "bottom");
01137 addFieldValue ("TRUE");
01138 endFieldDecl ();
01139
01140 beginFieldDecl("SFFloat", Self::OSGsfFloat, "height");
01141 addFieldValue ("2");
01142 endFieldDecl ();
01143
01144 beginFieldDecl("SFFloat", Self::OSGsfFloat, "radius");
01145 addFieldValue ("1");
01146 endFieldDecl ();
01147
01148 beginFieldDecl("SFBool", Self::OSGsfBool, "side");
01149 addFieldValue ("TRUE");
01150 endFieldDecl ();
01151
01152 beginFieldDecl("SFBool", Self::OSGsfBool, "top");
01153 addFieldValue ("TRUE");
01154 endFieldDecl ();
01155 }
01156 endProto ();
01157
01158 #if 0
01159 PROTO CylinderSensor [
01160 exposedField SFBool autoOffset TRUE
01161 exposedField SFFloat diskAngle 0.262
01162 exposedField SFBool enabled TRUE
01163 exposedField SFFloat maxAngle -1
01164 exposedField SFFloat minAngle 0
01165 exposedField SFFloat offset 0
01166 eventOut SFBool isActive
01167 eventOut SFRotation rotation_changed
01168 eventOut SFVec3f trackPoint_changed
01169 ] { }
01170 #endif
01171
01172 beginProto("CylinderSensor");
01173 {
01174 beginExposedFieldDecl("SFBool", Self::OSGsfBool, "autoOffset");
01175 addFieldValue ("TRUE");
01176 endExposedFieldDecl ();
01177
01178 beginExposedFieldDecl("SFFloat", Self::OSGsfFloat, "diskAngle");
01179 addFieldValue ("0.262");
01180 endExposedFieldDecl ();
01181
01182 beginExposedFieldDecl("SFBool", Self::OSGsfBool, "enabled");
01183 addFieldValue ("TRUE");
01184 endExposedFieldDecl ();
01185
01186 beginExposedFieldDecl("SFFloat", Self::OSGsfFloat, "maxAngle");
01187 addFieldValue ("-1");
01188 endExposedFieldDecl ();
01189
01190 beginExposedFieldDecl("SFFloat", Self::OSGsfFloat, "minAngle");
01191 addFieldValue ("0");
01192 endExposedFieldDecl ();
01193
01194 beginExposedFieldDecl("SFFloat", Self::OSGsfFloat, "offset");
01195 addFieldValue ("0");
01196 endExposedFieldDecl ();
01197
01198 beginEventOutDecl ("SFBool", Self::OSGsfBool, "isActive");
01199 endEventDecl ();
01200
01201 beginEventOutDecl ("SFRotation",
01202 Self::OSGsfRotation,
01203 "rotation_changed");
01204 endEventDecl ();
01205
01206 beginEventOutDecl ("SFVec3f", Self::OSGsfVec3f, "trackPoint_changed");
01207 endEventDecl ();
01208 }
01209 endProto ();
01210
01211 #if 0
01212 PROTO DirectionalLight [
01213 exposedField SFFloat ambientIntensity 0
01214 exposedField SFColor color 1 1 1
01215 exposedField SFVec3f direction 0 0 -1
01216 exposedField SFFloat intensity 1
01217 exposedField SFBool on TRUE
01218 ] { }
01219 #endif
01220
01221 beginProto("DirectionalLight");
01222 {
01223 beginExposedFieldDecl("SFFloat", Self::OSGsfFloat, "ambientIntensity");
01224 addFieldValue ("0");
01225 endExposedFieldDecl ();
01226
01227 beginExposedFieldDecl("SFColor", Self::OSGsfColor, "color");
01228 addFieldValue ("1 1 1");
01229 endExposedFieldDecl ();
01230
01231 beginExposedFieldDecl("SFVec3f", Self::OSGsfVec3f, "direction");
01232 addFieldValue ("0 0 -1");
01233 endExposedFieldDecl ();
01234
01235 beginExposedFieldDecl("SFFloat", Self::OSGsfFloat, "intensity");
01236 addFieldValue ("1");
01237 endExposedFieldDecl ();
01238
01239 beginExposedFieldDecl("SFBool", Self::OSGsfBool, "on");
01240 addFieldValue ("TRUE");
01241 endExposedFieldDecl ();
01242 }
01243 endProto ();
01244
01245 #if 0
01246 PROTO ElevationGrid [
01247 eventIn MFFloat set_height
01248 exposedField SFNode color NULL
01249 exposedField SFNode normal NULL
01250 exposedField SFNode texCoord NULL
01251 field SFBool ccw TRUE
01252 field SFBool colorPerVertex TRUE
01253 field SFFloat creaseAngle 0
01254 field MFFloat height []
01255 field SFBool normalPerVertex TRUE
01256 field SFBool solid TRUE
01257 field SFInt32 xDimension 0
01258 field SFFloat xSpacing 0.0
01259 field SFInt32 zDimension 0
01260 field SFFloat zSpacing 0.0
01261
01262 ] { }
01263 #endif
01264
01265 beginProto("ElevationGrid");
01266 {
01267 beginEventInDecl ("MFFloat", Self::OSGmfFloat, "set_height");
01268 endEventDecl ();
01269
01270 beginExposedFieldDecl("SFNode", Self::OSGsfNode, "color");
01271
01272 endExposedFieldDecl ();
01273
01274 beginExposedFieldDecl("SFNode", Self::OSGsfNode, "normal");
01275
01276 endExposedFieldDecl ();
01277
01278 beginExposedFieldDecl("SFNode", Self::OSGsfNode, "texCoord");
01279
01280 endExposedFieldDecl ();
01281
01282 beginFieldDecl ("SFBool", Self::OSGsfBool, "ccw");
01283 addFieldValue ("TRUE");
01284 endFieldDecl ();
01285
01286 beginFieldDecl ("SFBool", Self::OSGsfBool, "colorPerVertex");
01287 addFieldValue ("TRUE");
01288 endFieldDecl ();
01289
01290 beginFieldDecl ("SFFloat", Self::OSGsfFloat, "creaseAngle");
01291 addFieldValue ("0");
01292 endFieldDecl ();
01293
01294 beginFieldDecl ("MFFloat", Self::OSGmfFloat, "height");
01295 endFieldDecl ();
01296
01297 beginFieldDecl ("SFBool", Self::OSGsfBool, "normalPerVertex");
01298 addFieldValue ("TRUE");