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