965{
967 if (ba==QByteArray())
968 return false;
969
970
972 buffer.open(QIODevice::ReadOnly);
973 QDataStream state(&buffer);
975 if(ba.size()==64) {
976
977 state.setFloatingPointPrecision(QDataStream::SinglePrecision);
978
979
980 SbRotation rot; QByteArray ba_rot; state >> ba_rot;
982
983 SbVec3f
pos; QByteArray ba_pos; state >> ba_pos;
985
986 bool save = cam.enableNotify(
false);
987 cam.ref();
988 cam.orientation.setValue(rot);
989 cam.position.setValue(pos);
990
991 float f_aspectRatio, f_nearDistance, f_farDistance, f_focalDistance;
992
993 state >> f_aspectRatio; cam.aspectRatio.setValue(f_aspectRatio);
994 state >> f_nearDistance; cam.nearDistance.setValue(f_nearDistance);
995 state >> f_farDistance; cam.farDistance.setValue(f_farDistance);
996 state >> f_focalDistance; cam.focalDistance.setValue(f_focalDistance);
997
998 int viewportmap;
999 state>>viewportmap;
1000 switch (viewportmap) {
1001 case 0: cam.viewportMapping.setValue(SoCamera::CROP_VIEWPORT_FILL_FRAME); break;
1002 case 1: cam.viewportMapping.setValue(SoCamera::CROP_VIEWPORT_LINE_FRAME);break;
1003 case 2: cam.viewportMapping.setValue(SoCamera::CROP_VIEWPORT_NO_FRAME);break;
1004 case 3: cam.viewportMapping.setValue(SoCamera::ADJUST_CAMERA);break;
1005 case 4: cam.viewportMapping.setValue(SoCamera::LEAVE_ALONE);break;
1006
1007 }
1008
1009 bool passedcameraisperspective = cam.getTypeId().isDerivedFrom(SoPerspectiveCamera::getClassTypeId());
1010
1011
1012 int camtype;
1013 state>>camtype;
1014 float f_orthopersp_heightpar(-999);
1015 if (camtype==0) {
1016
1017 if (!passedcameraisperspective)
1018 return false;
1019 state >> f_orthopersp_heightpar;
1020 static_cast<SoPerspectiveCamera*>(&cam)->heightAngle.setValue(f_orthopersp_heightpar);
1021 } else if (camtype==1) {
1022
1023 if (passedcameraisperspective)
1024 return false;
1025 state >> f_orthopersp_heightpar;
1026 static_cast<SoOrthographicCamera*>(&cam)->height.setValue(f_orthopersp_heightpar);
1027 }
1028
1029 if (save) {
1030 cam.enableNotify(true);
1031 cam.touch();
1032 }
1033
1034
1036
1038 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters aspectRatio = "+QString::number(f_aspectRatio));
1039 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters nearDistance = "+QString::number(f_nearDistance));
1040 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters farDistance = "+QString::number(f_farDistance));
1041 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters focalDistance = "+QString::number(f_focalDistance));
1042 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters viewportmap = "+QString::number(viewportmap));
1044 +QString(camtype==0?"perspective":(camtype==1?"orthographic":"unknown")));
1045 if (camtype==0)
1047 +QString::number(f_orthopersp_heightpar));
1048 if (camtype==1)
1050 +QString::number(f_orthopersp_heightpar));
1051
1052 }
1053 }
1054 else {
1055
1056
1057
1058 SbRotation rot; QByteArray ba_rot; state >> ba_rot;
1060
1061 SbVec3f
pos; QByteArray ba_pos; state >> ba_pos;
1063
1064 bool save = cam.enableNotify(
false);
1065 cam.ref();
1066 cam.orientation.setValue(rot);
1067 cam.position.setValue(pos);
1068
1069 double f_aspectRatio, f_nearDistance, f_farDistance, f_focalDistance;
1070
1071 state >> f_aspectRatio; cam.aspectRatio.setValue(f_aspectRatio);
1072 state >> f_nearDistance; cam.nearDistance.setValue(f_nearDistance);
1073 state >> f_farDistance; cam.farDistance.setValue(f_farDistance);
1074 state >> f_focalDistance; cam.focalDistance.setValue(f_focalDistance);
1075
1076 int viewportmap;
1077 state>>viewportmap;
1078 switch (viewportmap) {
1079 case 0: cam.viewportMapping.setValue(SoCamera::CROP_VIEWPORT_FILL_FRAME); break;
1080 case 1: cam.viewportMapping.setValue(SoCamera::CROP_VIEWPORT_LINE_FRAME);break;
1081 case 2: cam.viewportMapping.setValue(SoCamera::CROP_VIEWPORT_NO_FRAME);break;
1082 case 3: cam.viewportMapping.setValue(SoCamera::ADJUST_CAMERA);break;
1083 case 4: cam.viewportMapping.setValue(SoCamera::LEAVE_ALONE);break;
1084
1085 }
1086
1087 bool passedcameraisperspective = cam.getTypeId().isDerivedFrom(SoPerspectiveCamera::getClassTypeId());
1088
1089
1090 int camtype;
1091 state>>camtype;
1092 double f_orthopersp_heightpar(-999);
1093 if (camtype==0) {
1094
1095 if (!passedcameraisperspective)
1096 return false;
1097 state >> f_orthopersp_heightpar;
1098 static_cast<SoPerspectiveCamera*>(&cam)->heightAngle.setValue(f_orthopersp_heightpar);
1099 } else if (camtype==1) {
1100
1101 if (passedcameraisperspective)
1102 return false;
1103 state >> f_orthopersp_heightpar;
1104 static_cast<SoOrthographicCamera*>(&cam)->height.setValue(f_orthopersp_heightpar);
1105 }
1106
1107 if (save) {
1108 cam.enableNotify(true);
1109 cam.touch();
1110 }
1111
1112
1114
1116 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters aspectRatio = "+QString::number(f_aspectRatio));
1117 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters nearDistance = "+QString::number(f_nearDistance));
1118 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters farDistance = "+QString::number(f_farDistance));
1119 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters focalDistance = "+QString::number(f_focalDistance));
1120 VP1Msg::messageVerbose(
"VP1QtInventorUtils::deserializeSoCameraParameters viewportmap = "+QString::number(viewportmap));
1122 +QString(camtype==0?"perspective":(camtype==1?"orthographic":"unknown")));
1123 if (camtype==0)
1125 +QString::number(f_orthopersp_heightpar));
1126 if (camtype==1)
1128 +QString::number(f_orthopersp_heightpar));
1129
1130 }
1131 }
1132
1133 cam.unrefNoDelete();
1135 return true;
1136}
static bool deserialize(QByteArray &, SbRotation &)