Changeset 200 for osgVisual/trunk/src/sky_Silverlining
- Timestamp:
- Jan 18, 2011, 8:59:45 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
osgVisual/trunk/src/sky_Silverlining/visual_skySilverLining.cpp
r198 r200 746 746 { 747 747 std::string node_name=reinterpret_cast<const char*>(cloudlayerNode_->name); 748 if(cloudlayerNode_->type == XML_ELEMENT_NODE && node_name == "cloudlayer") 749 { 750 int slot = -1; 751 bool enabled; 752 int fadetime = -1, baselength = -1, basewidth = -1, thickness = -1, baseHeight = -1 ; 753 float density = -1.0, rate_mmPerHour_rain = -1.0, rate_mmPerHour_drySnow = -1.0, rate_mmPerHour_wetSnow = -1.0, rate_mmPerHour_sleet = -1.0; 754 CloudTypes ctype = CUMULUS_CONGESTUS; 755 756 xmlAttr *attr = cloudlayerNode_->properties; 757 while ( attr ) 758 { 759 std::string attr_name=reinterpret_cast<const char*>(attr->name); 760 std::string attr_value=reinterpret_cast<const char*>(attr->children->content); 761 if( attr_name == "slot" ) 748 if(cloudlayerNode_->type == XML_ELEMENT_NODE && node_name == "clouds") 749 { 750 for (cloudlayerNode_= cloudlayerNode_->children; cloudlayerNode_; cloudlayerNode_ = cloudlayerNode_->next) 751 { 752 node_name=reinterpret_cast<const char*>(cloudlayerNode_->name); 753 if(cloudlayerNode_->type == XML_ELEMENT_NODE && node_name == "cloudlayer") 762 754 { 763 std::stringstream sstr(attr_value); 764 sstr >> slot; 765 } 766 if( attr_name == "enabled" ) 767 { 768 if(attr_value=="yes") 769 enabled = true; 770 else 771 enabled = false; 772 } 773 if( attr_name == "fadetime" ) 774 { 775 std::stringstream sstr(attr_value); 776 sstr >> fadetime; 777 } 778 if( attr_name == "type" ) 779 { 780 if(attr_value=="CIRROCUMULUS") 781 ctype = CIRROCUMULUS; 782 if(attr_value=="CIRRUS_FIBRATUS") 783 ctype = CIRRUS_FIBRATUS; 784 if(attr_value=="STRATUS") 785 ctype = STRATUS; 786 if(attr_value=="CUMULUS_MEDIOCRIS") 787 ctype = CUMULUS_MEDIOCRIS; 788 if(attr_value=="CUMULUS_CONGESTUS") 789 ctype = CUMULUS_CONGESTUS; 790 if(attr_value=="CUMULONIMBUS_CAPPILATUS") 791 ctype = CUMULONIMBUS_CAPPILATUS; 792 if(attr_value=="STRATOCUMULUS") 793 ctype = STRATOCUMULUS; 794 } 795 attr = attr->next; 796 } 797 798 if(!cloudlayerNode_->children) 799 { 800 OSG_NOTIFY( osg::ALWAYS ) << "ERROR - visual_skySilverLining::configureCloudlayerbyXML: Missing geometry specification for a cloudlayer." << std::endl; 801 return; 802 } 803 804 for (xmlNode *cur_node = cloudlayerNode_->children; cur_node; cur_node = cur_node->next) 805 { 806 node_name=reinterpret_cast<const char*>(cur_node->name); 807 if(cur_node->type == XML_ELEMENT_NODE && node_name == "geometry") 808 { 809 xmlAttr *attr = cur_node->properties; 755 int slot = -1; 756 bool enabled; 757 int fadetime = -1, baselength = -1, basewidth = -1, thickness = -1, baseHeight = -1 ; 758 float density = -1.0, rate_mmPerHour_rain = -1.0, rate_mmPerHour_drySnow = -1.0, rate_mmPerHour_wetSnow = -1.0, rate_mmPerHour_sleet = -1.0; 759 CloudTypes ctype = CUMULUS_CONGESTUS; 760 761 xmlAttr *attr = cloudlayerNode_->properties; 810 762 while ( attr ) 811 763 { 812 764 std::string attr_name=reinterpret_cast<const char*>(attr->name); 813 765 std::string attr_value=reinterpret_cast<const char*>(attr->children->content); 814 if( attr_name == " baselength" )766 if( attr_name == "slot" ) 815 767 { 816 768 std::stringstream sstr(attr_value); 817 sstr >> baselength;769 sstr >> slot; 818 770 } 819 if( attr_name == "basewidth" ) 771 if( attr_name == "enabled" ) 772 { 773 if(attr_value=="yes") 774 enabled = true; 775 else 776 enabled = false; 777 } 778 if( attr_name == "fadetime" ) 820 779 { 821 780 std::stringstream sstr(attr_value); 822 sstr >> basewidth;781 sstr >> fadetime; 823 782 } 824 if( attr_name == "t hickness" )783 if( attr_name == "type" ) 825 784 { 826 std::stringstream sstr(attr_value); 827 sstr >> thickness; 828 } 829 if( attr_name == "baseHeight" ) 830 { 831 std::stringstream sstr(attr_value); 832 sstr >> baseHeight; 833 } 834 if( attr_name == "density" ) 835 { 836 std::stringstream sstr(attr_value); 837 sstr >> density; 785 if(attr_value=="CIRROCUMULUS") 786 ctype = CIRROCUMULUS; 787 if(attr_value=="CIRRUS_FIBRATUS") 788 ctype = CIRRUS_FIBRATUS; 789 if(attr_value=="STRATUS") 790 ctype = STRATUS; 791 if(attr_value=="CUMULUS_MEDIOCRIS") 792 ctype = CUMULUS_MEDIOCRIS; 793 if(attr_value=="CUMULUS_CONGESTUS") 794 ctype = CUMULUS_CONGESTUS; 795 if(attr_value=="CUMULONIMBUS_CAPPILATUS") 796 ctype = CUMULONIMBUS_CAPPILATUS; 797 if(attr_value=="STRATOCUMULUS") 798 ctype = STRATOCUMULUS; 838 799 } 839 800 attr = attr->next; 840 801 } 802 803 if(!cloudlayerNode_->children) 804 { 805 OSG_NOTIFY( osg::ALWAYS ) << "ERROR - visual_skySilverLining::configureCloudlayerbyXML: Missing geometry specification for a cloudlayer." << std::endl; 806 return; 807 } 808 809 for (xmlNode *cur_node = cloudlayerNode_->children; cur_node; cur_node = cur_node->next) 810 { 811 node_name=reinterpret_cast<const char*>(cur_node->name); 812 if(cur_node->type == XML_ELEMENT_NODE && node_name == "geometry") 813 { 814 xmlAttr *attr = cur_node->properties; 815 while ( attr ) 816 { 817 std::string attr_name=reinterpret_cast<const char*>(attr->name); 818 std::string attr_value=reinterpret_cast<const char*>(attr->children->content); 819 if( attr_name == "baselength" ) 820 { 821 std::stringstream sstr(attr_value); 822 sstr >> baselength; 823 } 824 if( attr_name == "basewidth" ) 825 { 826 std::stringstream sstr(attr_value); 827 sstr >> basewidth; 828 } 829 if( attr_name == "thickness" ) 830 { 831 std::stringstream sstr(attr_value); 832 sstr >> thickness; 833 } 834 if( attr_name == "baseHeight" ) 835 { 836 std::stringstream sstr(attr_value); 837 sstr >> baseHeight; 838 } 839 if( attr_name == "density" ) 840 { 841 std::stringstream sstr(attr_value); 842 sstr >> density; 843 } 844 attr = attr->next; 845 } 846 } 847 848 if(cur_node->type == XML_ELEMENT_NODE && node_name == "precipitation") 849 { 850 xmlAttr *attr = cur_node->properties; 851 while ( attr ) 852 { 853 std::string attr_name=reinterpret_cast<const char*>(attr->name); 854 std::string attr_value=reinterpret_cast<const char*>(attr->children->content); 855 if( attr_name == "rate_mmPerHour_rain" ) 856 { 857 std::stringstream sstr(attr_value); 858 sstr >> rate_mmPerHour_rain; 859 } 860 if( attr_name == "rate_mmPerHour_drySnow" ) 861 { 862 std::stringstream sstr(attr_value); 863 sstr >> rate_mmPerHour_drySnow; 864 } 865 if( attr_name == "rate_mmPerHour_wetSnow" ) 866 { 867 std::stringstream sstr(attr_value); 868 sstr >> rate_mmPerHour_wetSnow; 869 } 870 if( attr_name == "rate_mmPerHour_sleet" ) 871 { 872 std::stringstream sstr(attr_value); 873 sstr >> rate_mmPerHour_sleet; 874 } 875 attr = attr->next; 876 } 877 } 878 } 879 880 if(slot!=-1 && baselength!=-1 && basewidth!=-1 && thickness!=-1 && baseHeight!=-1 && density!=-1 ) 881 addCloudLayer( slot, baselength, basewidth, thickness, baseHeight, density, ctype ); 882 883 if(slot!=-1 && rate_mmPerHour_rain!=-1 && rate_mmPerHour_drySnow!=-1 && thickness!=-1 && baseHeight!=-1 && density!=-1 ) 884 setSlotPrecipitation( slot, rate_mmPerHour_rain, rate_mmPerHour_drySnow, rate_mmPerHour_wetSnow, rate_mmPerHour_sleet ); 841 885 } 842 843 if(cur_node->type == XML_ELEMENT_NODE && node_name == "precipitation") 844 { 845 xmlAttr *attr = cur_node->properties; 846 while ( attr ) 847 { 848 std::string attr_name=reinterpret_cast<const char*>(attr->name); 849 std::string attr_value=reinterpret_cast<const char*>(attr->children->content); 850 if( attr_name == "rate_mmPerHour_rain" ) 851 { 852 std::stringstream sstr(attr_value); 853 sstr >> rate_mmPerHour_rain; 854 } 855 if( attr_name == "rate_mmPerHour_drySnow" ) 856 { 857 std::stringstream sstr(attr_value); 858 sstr >> rate_mmPerHour_drySnow; 859 } 860 if( attr_name == "rate_mmPerHour_wetSnow" ) 861 { 862 std::stringstream sstr(attr_value); 863 sstr >> rate_mmPerHour_wetSnow; 864 } 865 if( attr_name == "rate_mmPerHour_sleet" ) 866 { 867 std::stringstream sstr(attr_value); 868 sstr >> rate_mmPerHour_sleet; 869 } 870 attr = attr->next; 871 } 872 } 873 } 874 875 if(slot!=-1 && baselength!=-1 && basewidth!=-1 && thickness!=-1 && baseHeight!=-1 && density!=-1 ) 876 addCloudLayer( slot, baselength, basewidth, thickness, baseHeight, density, ctype ); 877 878 if(slot!=-1 && rate_mmPerHour_rain!=-1 && rate_mmPerHour_drySnow!=-1 && thickness!=-1 && baseHeight!=-1 && density!=-1 ) 879 setSlotPrecipitation( slot, rate_mmPerHour_rain, rate_mmPerHour_drySnow, rate_mmPerHour_wetSnow, rate_mmPerHour_sleet ); 880 } 881 else 882 OSG_NOTIFY( osg::ALWAYS ) << "ERROR - visual_skySilverLining::configureCloudlayerbyXML: Node is not a cloudlayer node." << std::endl; 883 } 886 else 887 OSG_NOTIFY( osg::ALWAYS ) << "ERROR - visual_skySilverLining::configureCloudlayerbyXML: Node is not a cloudlayer node." << std::endl; 888 } // FOR-loop end 889 } // If Clouds END 890 }
Note: See TracChangeset
for help on using the changeset viewer.