int main (int argc, char** argv) { // Initialize Inventor and Win HWND myWindow = SoWin::init(argv[0]); if (myWindow == NULL) exit(1); // Knoten zum Selektieren der angehÃĪngten Objekte rootSelection = new SoSelection; rootSelection->ref(); rootSelection->addSelectionCallback(selectionCallback, NULL); rootSelection->addDeselectionCallback(deselectionCallback, NULL); SoSeparator *root = new SoSeparator; rootSelection->addChild(root); // This function contains our code fragment. root->addChild(make_brett()); SoWrapperKit *myWrapperKit = new SoWrapperKit; // Figur mit Wrapper verbinden root->addChild(myWrapperKit); myWrapperKit->setPart("contents", (make_brett())); myWrapperKit->set((char *)"transform { translation 0 0 0 }"); // create the manipulators SoHandleBoxManip *myHandleBox = new SoHandleBoxManip; myHandleBox->ref(); SoTranslate2Dragger *myTranslater = new SoTranslate2Dragger; // Get the draggers and add callbacks to them. Note // that you don't put callbacks on manipulators. You put // them on the draggers which handle events for them. SoDragger *myDragger; myDragger = myHandleBox->getDragger(); myDragger->addStartCallback(dragStartCallback); myDragger->addFinishCallback(dragFinishCallback); SoWinExaminerViewer *myViewer = new SoWinExaminerViewer(myWindow); myViewer->setSceneGraph(rootSelection); myViewer->setGLRenderAction(new SoBoxHighlightRenderAction); myViewer->setTitle("Schachbrett"); myViewer->show(); myViewer->viewAll(); SoWin::show(myWindow); SoWin::mainLoop(); return 0; }
bool ViewProviderMirror::setEdit(int ModNum) { if (ModNum == ViewProvider::Default) { // get the properties from the mirror feature Part::Mirroring* mf = static_cast<Part::Mirroring*>(getObject()); Base::BoundBox3d bbox = mf->Shape.getBoundingBox(); float len = (float)bbox.CalcDiagonalLength(); Base::Vector3d base = mf->Base.getValue(); Base::Vector3d norm = mf->Normal.getValue(); Base::Vector3d cent = bbox.GetCenter(); base = cent.ProjToPlane(base, norm); // setup the graph for editing the mirror plane SoTransform* trans = new SoTransform; SbRotation rot(SbVec3f(0,0,1), SbVec3f(norm.x,norm.y,norm.z)); trans->rotation.setValue(rot); trans->translation.setValue(base.x,base.y,base.z); trans->center.setValue(0.0f,0.0f,0.0f); SoMaterial* color = new SoMaterial(); color->diffuseColor.setValue(0,0,1); color->transparency.setValue(0.5); SoCoordinate3* points = new SoCoordinate3(); points->point.setNum(4); points->point.set1Value(0, -len/2,-len/2,0); points->point.set1Value(1, len/2,-len/2,0); points->point.set1Value(2, len/2, len/2,0); points->point.set1Value(3, -len/2, len/2,0); SoFaceSet* face = new SoFaceSet(); pcEditNode->addChild(trans); pcEditNode->addChild(color); pcEditNode->addChild(points); pcEditNode->addChild(face); // Now we replace the SoTransform node by a manipulator // Note: Even SoCenterballManip inherits from SoTransform // we cannot use it directly (in above code) because the // translation and center fields are overridden. SoSearchAction sa; sa.setInterest(SoSearchAction::FIRST); sa.setSearchingAll(FALSE); sa.setNode(trans); sa.apply(pcEditNode); SoPath * path = sa.getPath(); if (path) { SoCenterballManip * manip = new SoCenterballManip; manip->replaceNode(path); SoDragger* dragger = manip->getDragger(); dragger->addStartCallback(dragStartCallback, this); dragger->addFinishCallback(dragFinishCallback, this); dragger->addMotionCallback(dragMotionCallback, this); } pcRoot->addChild(pcEditNode); } else { ViewProviderPart::setEdit(ModNum); } return true; }