From: Gerrit V. <vo...@ca...> - 2005-09-23 09:08:04
|
Hi, On Fri, 2005-09-23 at 10:18 +0200, Marcus Roth wrote: > Hi, > > 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 hmm but this is taken for non ptr fields, so I wonder how you get there in case of a pointer field. Which test programs are you running and which parameters are you using ? hmm the cvs code looks rather strange, like one of these I wonder why it ever did run anyway parts, especially the if equal == true copy part. I wonder what I ate in Iowa ;-)) I have a closer look. regards, gerrit |