From: Marcus R. <mr...@ig...> - 2005-09-23 08:18:49
|
Hi, >ok here you lost me a little bit, automatically called but from where ? >Just for my reference did you take a look at the 2.0 >MultiDisplayWindow and we are talking about this ? > > Yes, I'm talking about MultiDisplayWindow in 2.0. You have done some changes but it chrashed at the marked line: (!!!!!) void MultiDisplayWindow::updateViewport(ViewportPtr &serverPort, ViewportPtr &clientPort) { bool equal; // Compare the pointers. if(serverPort == clientPort) return; if(serverPort == NullFC || clientPort == NullFC) return; if(serverPort->getType() != serverPort->getType()) return; const FieldContainerType &type = serverPort->getType(); UInt32 fcount = osgMin(serverPort->getType().getNumFieldDescs(), clientPort->getType().getNumFieldDescs()); for(UInt32 i = 1;i <= fcount; ++i) { const FieldDescriptionBase *fdesc = type.getFieldDesc(i); // ignore attachments if(strcmp(fdesc->getCName(), "parent" ) == 0 || strcmp(fdesc->getCName(), "camera" ) == 0 || strcmp(fdesc->getCName(), "attachments") == 0) { continue; } BitVector mask = fdesc->getFieldMask(); const FieldDescriptionBase *dst_desc = serverPort->getType().getFieldDesc(i); const FieldDescriptionBase *src_desc = clientPort->getType().getFieldDesc(i); printf("desc %p %p\n",src_desc,dst_desc); Field *dst_field = serverPort->editField(i); const Field *cdst_field = serverPort->getField(i); const Field *src_field = clientPort->getField(i); const FieldType &dst_ftype = dst_desc->getFieldType(); const FieldType &src_ftype = src_desc->getFieldType(); if(dst_ftype != src_ftype) continue; equal = true; printf("%s %p %p\n",fdesc->getCName(),src_field, dst_field); if(strstr(dst_ftype.getCName(), "Ptr") == NULL) { /* if(dst_ftype.getCardinality() == FieldType::MULTI_FIELD) { std::string av, bv; dst_desc->pushValueToString(dst_field, av); src_desc->pushValueToString(src_field, bv); if(av != bv) equal = false; } else { // This is very slow with multi fields!!!! std::string av, bv; dst_desc->pushValueToString(dst_field, av); src_desc->pushValueToString(src_field, bv); if(av != bv) equal = false; } if(equal == false) */ if(dst_desc->equal(src_field, dst_field) == true) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! dst_field is NULL. Should be cdst_field. { dst_desc->copyValues(src_field, dst_field); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I don't know haw to do this in 2.0 as I'm not able to ge a non const Ptr-Field with the dynamic interface Marcus |