/** * @brief Create help create tool. * @param _id tool id, 0 if tool doesn't exist yet. * @param formula string with formula length. * @param p1Line id first line point. * @param p2Line id second line point. * @param pShoulder id shoulder point. * @param typeLine line type. * @param pointName point name. * @param mx label bias x axis. * @param my label bias y axis. * @param scene pointer to scene. * @param doc dom document container. * @param data container with variables. * @param parse parser file mode. * @param typeCreation way we create this tool. * @return the created tool */ VToolShoulderPoint* VToolShoulderPoint::Create(const quint32 _id, QString &formula, const quint32 &p1Line, const quint32 &p2Line, const quint32 &pShoulder, const QString &typeLine, const QString &pointName, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation) { const QSharedPointer<VPointF> firstPoint = data->GeometricObject<VPointF>(p1Line); const QSharedPointer<VPointF> secondPoint = data->GeometricObject<VPointF>(p2Line); const QSharedPointer<VPointF> shoulderPoint = data->GeometricObject<VPointF>(pShoulder); const qreal result = CheckFormula(_id, formula, data); QPointF fPoint = VToolShoulderPoint::FindPoint(firstPoint->toQPointF(), secondPoint->toQPointF(), shoulderPoint->toQPointF(), qApp->toPixel(result)); quint32 id = _id; if (typeCreation == Source::FromGui) { id = data->AddGObject(new VPointF(fPoint, pointName, mx, my)); data->AddLine(p1Line, id); data->AddLine(p2Line, id); } else { data->UpdateGObject(id, new VPointF(fPoint, pointName, mx, my)); data->AddLine(p1Line, id); data->AddLine(p2Line, id); if (parse != Document::FullParse) { doc->UpdateToolData(id, data); } } VDrawTool::AddRecord(id, Tool::ShoulderPoint, doc); if (parse == Document::FullParse) { VToolShoulderPoint *point = new VToolShoulderPoint(doc, data, id, typeLine, formula, p1Line, p2Line, pShoulder, typeCreation); scene->addItem(point); connect(point, &VToolShoulderPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolShoulderPoint::SetFactor); connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable); doc->AddTool(id, point); doc->IncrementReferens(p1Line); doc->IncrementReferens(p2Line); doc->IncrementReferens(pShoulder); return point; } return nullptr; }
/** * @brief Create help create tool. * @param _id tool id, 0 if tool doesn't exist yet. * @param formula string with formula. * @param firstPointId id first point of angle. * @param secondPointId id second point of angle. * @param thirdPointId id third point of angle. * @param typeLine line type. * @param pointName point name. * @param mx label bias x axis. * @param my label bias y axis. * @param scene pointer to scene. * @param doc dom document container. * @param data container with variables. * @param parse parser file mode. * @param typeCreation way we create this tool. */ VToolBisector* VToolBisector::Create(const quint32 _id, QString &formula, const quint32 &firstPointId, const quint32 &secondPointId, const quint32 &thirdPointId, const QString &typeLine, const QString &pointName, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation) { const VPointF *firstPoint = data->GeometricObject<const VPointF *>(firstPointId); const VPointF *secondPoint = data->GeometricObject<const VPointF *>(secondPointId); const VPointF *thirdPoint = data->GeometricObject<const VPointF *>(thirdPointId); const qreal result = CheckFormula(formula, data); QPointF fPoint = VToolBisector::FindPoint(firstPoint->toQPointF(), secondPoint->toQPointF(), thirdPoint->toQPointF(), qApp->toPixel(result)); quint32 id = _id; if (typeCreation == Source::FromGui) { id = data->AddGObject(new VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); data->AddLine(firstPointId, id); } else { data->UpdateGObject(id, new VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); data->AddLine(firstPointId, id); if (parse != Document::FullParse) { doc->UpdateToolData(id, data); } } VDrawTool::AddRecord(id, Tool::BisectorTool, doc); if (parse == Document::FullParse) { VToolBisector *point = new VToolBisector(doc, data, id, typeLine, formula, firstPointId, secondPointId, thirdPointId, typeCreation); scene->addItem(point); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolBisector::SetFactor); connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable); doc->AddTool(id, point); doc->IncrementReferens(firstPointId); doc->IncrementReferens(secondPointId); doc->IncrementReferens(thirdPointId); return point; } return nullptr; }
/** * @brief Create help create tool. * @param _id tool id, 0 if tool doesn't exist yet. * @param pointName point name. * @param formula string with formula length first spline. * @param splineId id spline in data container. * @param mx label bias x axis. * @param my label bias y axis. * @param scene pointer to scene. * @param doc dom document container. * @param data container with variables. * @param parse parser file mode. * @param typeCreation way we create this tool. */ VToolCutSpline* VToolCutSpline::Create(const quint32 _id, const QString &pointName, QString &formula, const quint32 &splineId, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VPattern *doc, VContainer *data, const Document &parse, const Source &typeCreation) { const QSharedPointer<VSpline> spl = data->GeometricObject<VSpline>(splineId); const qreal result = CheckFormula(_id, formula, data); QPointF spl1p2, spl1p3, spl2p2, spl2p3; QPointF point = spl->CutSpline(qApp->toPixel(result), spl1p2, spl1p3, spl2p2, spl2p3); quint32 id = _id; quint32 spl1id = 0; quint32 spl2id = 0; if (typeCreation == Source::FromGui) { VPointF *p = new VPointF(point, pointName, mx, my); id = data->AddGObject(p); VSpline *spline1 = new VSpline(spl->GetP1(), spl1p2, spl1p3, *p, spl->GetKcurve()); spl1id = data->AddGObject(spline1); data->AddCurveLength<VSplineLength>(spl1id, id); VSpline *spline2 = new VSpline(*p, spl2p2, spl2p3, spl->GetP4(), spl->GetKcurve()); spl2id = data->AddGObject(spline2); data->AddCurveLength<VSplineLength>(spl2id, id); } else { VPointF *p = new VPointF(point, pointName, mx, my); data->UpdateGObject(id, p); spl1id = id + 1; spl2id = id + 2; VSpline *spline1 = new VSpline(spl->GetP1(), spl1p2, spl1p3, *p, spl->GetKcurve()); data->UpdateGObject(spl1id, spline1); data->AddCurveLength<VSplineLength>(spl1id, id); VSpline *spline2 = new VSpline(*p, spl2p2, spl2p3, spl->GetP4(), spl->GetKcurve()); data->UpdateGObject(spl2id, spline2); data->AddCurveLength<VSplineLength>(spl2id, id); if (parse != Document::FullParse) { doc->UpdateToolData(id, data); } } VDrawTool::AddRecord(id, Tool::CutSpline, doc); if (parse == Document::FullParse) { VToolCutSpline *point = new VToolCutSpline(doc, data, id, formula, splineId, spl1id, spl2id, typeCreation); scene->addItem(point); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolCutSpline::SetFactor); connect(scene, &VMainGraphicsScene::DisableItem, point, &VToolPoint::Disable); doc->AddTool(id, point); doc->AddTool(spl1id, point); doc->AddTool(spl2id, point); doc->IncrementReferens(splineId); return point; } return nullptr; }