int main (int argc, char *argv[]) { char *configFile = NULL; // Declare objects struct system System; struct tip Tip; struct space Space; struct graphene Graphene; struct substrate Substrate; initSystem(&System, &Tip, &Space, &Graphene, &Substrate); parseOptions(argc, argv, &configFile, &System, &Tip); parseFile(configFile, &System, &Tip, &Space, &Graphene, &Substrate); createSystem(&System, &Tip); createGraphene(&System, &Graphene); createSpace(&System, &Space); // createTip(&System, &Tip); createSubstrate(&System, &Substrate); // Cartesian transformCylindric(&System); assignPointers(&System, &Tip, &Space, &Graphene, &Substrate); assignPotential(&System, &Tip, &Space, &Graphene, &Substrate); retransformCylindric(&System); laplaceCartesian(&System); transformCylindric(&System); retransformCylindric(&System); saveData(&System); // Visualize System if necessary if (System.visual) { initVisual(); drawObjects(&System, &Tip, &Space, &Graphene, &Substrate); } free(System.points); // Free all points return EXIT_SUCCESS; }
bool parallelPlanning(bool output, enum SPACE_TYPE space, std::vector<enum PLANNER_TYPE> &planners, unsigned int links, unsigned int chains, struct ConstrainedOptions &c_opt, struct AtlasOptions &a_opt, bool bench) { // Create a shared pointer to our constraint. auto constraint = std::make_shared<ParallelConstraint>(links, chains); ConstrainedProblem cp(space, constraint->createSpace(), constraint); cp.setConstrainedOptions(c_opt); cp.setAtlasOptions(a_opt); cp.css->registerProjection("parallel", constraint->getProjection(cp.css)); Eigen::VectorXd start, goal; constraint->getStart(start); constraint->getGoal(goal); cp.setStartAndGoalStates(start, goal); cp.ss->setStateValidityChecker(std::bind(&ParallelConstraint::isValid, constraint, std::placeholders::_1)); if (!bench) return parallelPlanningOnce(cp, planners[0], output); else return parallelPlanningBench(cp, planners); }
/** * Verarbeitet das Touch-Event. */ void handleTouchEvent() { // Prüfung, ob ein Tipp auf den Touchscreen erkannt und dieser noch nicht verarbeitet wurde if (touchEvent.isTap && touchEvent.startTime > lastTapTime) { // Es wurde auf den Touchscreen getippt. Es wird versucht, an der Stelle ein Feld zu // erzeugen. QCAR::Vec3F intersection; // Projektion der Koordinaten, auf die getippt wurde, auf die Ebene des getrackten // Objektes projectScreenPointToPlane(screenWidth, screenHeight, QCAR::Vec2F(touchEvent.tapPosition.data[0], touchEvent.tapPosition.data[1]), inverseProjectionMatrix, modelViewMatrix, QCAR::Vec3F(0, 0, 0), QCAR::Vec3F(0, 0, 1), intersection); // Prüfung, ob sich an den projezierten Koordinaten bereits ein Feld befindet Space* space = selectSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1])); if (space != NULL) { // Feld gefunden // normales Feld in Sonderfeld umwandeln und umgekehrt if (space->type == SPACE) { space->type = SPECIAL_SPACE; } else if (space->type == SPECIAL_SPACE) { space->type = SPACE; } } else if (canCreateSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1]))) { // kein Feld gefunden, es kann ein neues erstellt werden // Feld erzeugen createSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1])); // Weiter-Button beim Erreichen einer bestimmten Anzahl von Feldern anzeigen if (field.length == SPACE_COUNT_TO_SHOW_NEXT_BUTTON) { showView("nextButton"); } // Neustart-Button beim Erreichen einer bestimmten Anzahl von Feldern anzeigen if (field.length == SPACE_COUNT_TO_SHOW_RESTART_BUTTON) { showView("restartButton"); } } // Zeit des Verarbeitung manipulieren, damit dieser Tipp nicht mehr verarbeitet wird lastTapTime = touchEvent.startTime; } else if (touchEvent.isActive) { // Der User hat den Finger immer noch auf dem Touchscreen. Wenn der Finger über den // Bildschrim gezogen wird, dann wird versucht auf diesem Zieh-Pfad nacheinander Felder // zu erzeugen. // Touch-Ereignis ignorieren, wenn daraus noch ein Tipp werden könnte if (touchEvent.lifeTime > MAX_TAP_TIME || touchEvent.startPositionLastPositionDistance > MAX_TAP_SQUARED_DISTANCE) { QCAR::Vec3F intersection; // Projektion der Koordinaten, auf denen sich der Finger befindet, auf die Ebene des // getrackten Objektes projectScreenPointToPlane( screenWidth, screenHeight, QCAR::Vec2F(touchEvent.currentPosition.data[0], touchEvent.currentPosition.data[1]), inverseProjectionMatrix, modelViewMatrix, QCAR::Vec3F(0, 0, 0), QCAR::Vec3F(0, 0, 1), intersection); // Prüfung, ob an den projezierten Koordinaten ein Feld erzeugt werden kann if (canCreateSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1]))) { // Feld erzeugen createSpace(QCAR::Vec2F(intersection.data[0], intersection.data[1])); // Weiter-Button beim Erreichen einer bestimmten Anzahl von Feldern anzeigen if (field.length == SPACE_COUNT_TO_SHOW_NEXT_BUTTON) { showView("nextButton"); } // Neustart-Button beim Erreichen einer bestimmten Anzahl von Feldern anzeigen if (field.length == SPACE_COUNT_TO_SHOW_RESTART_BUTTON) { showView("restartButton"); } } } } }