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