bool ObjectSimpleViewer:: parseClipPlane( const QDomElement &element) { float distance=0; SbVec3f pos; SbVec3f normal; SbVec3f scale(1.0f, 1.0f, 1.0f); QDomNode child = element.firstChild(); while(!child.isNull()) { const QDomElement &element = child.toElement(); if(element.tagName() == "Distance") { distance = element.text().toFloat(); } else if(element.tagName() == "Position") { pos = parseSbVec3f(element); } else if(element.tagName() == "Normal") { normal = parseSbVec3f(element); } else if(element.tagName() == "Scalefactor") { scale = parseSbVec3f(element); } child = child.nextSibling(); } if(!m_clipPlaneManip) { //create at first use m_clipPlaneManip = new SoClipPlaneManip; m_clipPlaneManip->ref(); m_clipPlaneManip->plane.setValue(SbPlane(normal, distance)); m_clipPlaneManip->draggerPosition = pos; SoDragger *dragger = m_clipPlaneManip->getDragger(); if(dragger && dragger->isOfType(SoJackDragger::getClassTypeId())) { SoJackDragger *jd = (SoJackDragger*)dragger; jd->scaleFactor.setValue(scale); } } return(true); }
bool ObjectSimpleViewer:: saveAsXml( QXmlStreamWriter *xmlWriter) { Q_ASSERT(xmlWriter); xmlWriter->writeTextElement("Title", windowTitle()); if(m_mixSlider) { xmlWriter->writeTextElement("Mix", QString("%1").arg(m_mixSlider->value())); } xmlWriter->writeStartElement("Geometry"); const QRect geom = parentWidget()->geometry(); xmlWriter->writeTextElement("X", QString("%1").arg(geom .x())); xmlWriter->writeTextElement("Y", QString("%1").arg(geom .y())); xmlWriter->writeTextElement("Width", QString("%1").arg(geom .width())); xmlWriter->writeTextElement("Height", QString("%1").arg(geom .height())); xmlWriter->writeEndElement(); if(m_clipPlaneManip) { xmlWriter->writeStartElement("ClipPlane"); SbPlane plane = m_clipPlaneManip->plane.getValue(); SbVec3f vec = plane.getNormal(); xmlWriter->writeStartElement("Normal"); xmlWriter->writeTextElement("X", QString("%1").arg(vec[0])); xmlWriter->writeTextElement("Y", QString("%1").arg(vec[1])); xmlWriter->writeTextElement("Z", QString("%1").arg(vec[2])); xmlWriter->writeEndElement(); xmlWriter->writeTextElement("Distance", QString("%1").arg(plane.getDistanceFromOrigin())); vec = m_clipPlaneManip->draggerPosition.getValue(); xmlWriter->writeStartElement("Position"); xmlWriter->writeTextElement("X", QString("%1").arg(vec[0])); xmlWriter->writeTextElement("Y", QString("%1").arg(vec[1])); xmlWriter->writeTextElement("Z", QString("%1").arg(vec[2])); xmlWriter->writeEndElement(); SoDragger *dragger = m_clipPlaneManip->getDragger(); if(dragger && dragger->isOfType(SoJackDragger::getClassTypeId())) { SoJackDragger *jd = (SoJackDragger*)dragger; vec = jd->scaleFactor.getValue(); xmlWriter->writeStartElement("Scalefactor"); xmlWriter->writeTextElement("X", QString("%1").arg(vec[0])); xmlWriter->writeTextElement("Y", QString("%1").arg(vec[1])); xmlWriter->writeTextElement("Z", QString("%1").arg(vec[2])); xmlWriter->writeEndElement(); } xmlWriter->writeTextElement("Distance", QString("%1").arg(plane.getDistanceFromOrigin())); xmlWriter->writeEndElement(); } for(int i = 0; i < views.size(); ++i) { views.at(i)->saveAsXml(xmlWriter); } return(true); }