Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9fc7709969 |
@@ -310,7 +310,11 @@ public:
|
||||
* @return The new transaction ID.
|
||||
*/
|
||||
|
||||
int setActiveTransaction(TransactionName name);
|
||||
int setActiveTransaction(TransactionName name);
|
||||
|
||||
/// Return the current global transaction name and ID if such a global transaction is
|
||||
/// setup (uncommon)
|
||||
std::string getActiveTransaction(int *tid=nullptr) const;
|
||||
|
||||
int openGlobalTransaction(TransactionName name);
|
||||
int getGlobalTransaction() const;
|
||||
|
||||
@@ -1221,10 +1221,9 @@ PyObject* ApplicationPy::sGetActiveTransaction(PyObject* /*self*/, PyObject* arg
|
||||
PY_TRY
|
||||
{
|
||||
int id = 0;
|
||||
std::string name = "";
|
||||
if (Document* doc = GetApplication().getActiveDocument()) {
|
||||
id = doc->getBookedTransactionID();
|
||||
name = GetApplication().getTransactionName(id);
|
||||
std::string name = GetApplication().getActiveTransaction(&id);
|
||||
if (name.empty() || id <= 0) {
|
||||
Py_Return;
|
||||
}
|
||||
Py::Tuple ret(2);
|
||||
ret.setItem(0, Py::String(name));
|
||||
|
||||
@@ -71,6 +71,13 @@ int Application::setActiveTransaction(TransactionName name)
|
||||
return openGlobalTransaction(name);
|
||||
}
|
||||
|
||||
std::string Application::getActiveTransaction(int* id) const
|
||||
{
|
||||
if (id != nullptr) {
|
||||
*id = _globalTransactionID;
|
||||
}
|
||||
return _globalTransactionID != 0 ? getTransactionName(_globalTransactionID) : "";
|
||||
}
|
||||
int Application::openGlobalTransaction(TransactionName name)
|
||||
{
|
||||
if (name.name.empty()) {
|
||||
|
||||
@@ -403,7 +403,7 @@ void PropertyEditor::openEditor(const QModelIndex& index)
|
||||
str << "...";
|
||||
}
|
||||
transactionID = obj->getDocument()->openTransaction(str.str().c_str());
|
||||
FC_LOG("editor transaction " << App::GetApplication().getTransactionName(transactionID));
|
||||
FC_LOG("editor transaction " << App::GetApplication().getActiveTransaction(&transactionID));
|
||||
}
|
||||
|
||||
void PropertyEditor::onItemActivated(const QModelIndex& index)
|
||||
|
||||
@@ -325,7 +325,6 @@ SET(PathPythonPostScripts_SRCS
|
||||
Path/Post/scripts/gcode_pre.py
|
||||
Path/Post/scripts/generic_post.py
|
||||
Path/Post/scripts/generic_plasma_post.py
|
||||
Path/Post/scripts/grbl_post.py
|
||||
Path/Post/scripts/heidenhain_legacy_post.py
|
||||
Path/Post/scripts/linuxcnc_post.py
|
||||
Path/Post/scripts/linuxcnc_legacy_post.py
|
||||
|
||||
@@ -1887,6 +1887,13 @@ class PostProcessor:
|
||||
postables = self._buildPostList(early_tool_prep)
|
||||
Path.Log.debug(f"postables {postables}")
|
||||
|
||||
# Process canned cycles for drilling operations
|
||||
for _, section in enumerate(postables):
|
||||
_, sublist = section
|
||||
for obj in sublist:
|
||||
if hasattr(obj, "Path"):
|
||||
obj.Path = PostUtils.cannedCycleTerminator(obj.Path)
|
||||
|
||||
Path.Log.debug(f"postables count: {len(postables)}")
|
||||
|
||||
g_code_sections = []
|
||||
|
||||
@@ -708,12 +708,8 @@ def parse_a_path(values: Values, gcode: Gcode, pathobj) -> None:
|
||||
)
|
||||
adaptive_op_variables = determine_adaptive_op(values, pathobj)
|
||||
|
||||
path_to_process = pathobj.Path
|
||||
|
||||
# Process canned cycles for drilling operations
|
||||
path_to_process = PostUtils.cannedCycleTerminator(path_to_process)
|
||||
|
||||
# Apply arc splitting if requested
|
||||
path_to_process = pathobj.Path
|
||||
if values["SPLIT_ARCS"]:
|
||||
path_to_process = PostUtils.splitArcs(path_to_process)
|
||||
|
||||
|
||||
@@ -54,6 +54,8 @@ Defaults = Dict[str, bool]
|
||||
Values = Dict[str, Any]
|
||||
Visible = Dict[str, bool]
|
||||
|
||||
POST_TYPE = "machine"
|
||||
|
||||
|
||||
class Grbl(PostProcessor):
|
||||
"""The Grbl post processor class."""
|
||||
|
||||
@@ -64,7 +64,7 @@ class _BasePostTaskPanel(base_femtaskpanel._BaseTaskPanel):
|
||||
|
||||
def open(self):
|
||||
# open a new transaction if non is open
|
||||
if FreeCAD.ActiveDocument.getBookedTransactionID() == 0:
|
||||
if not FreeCAD.getActiveTransaction():
|
||||
FreeCAD.ActiveDocument.openTransaction(
|
||||
translate("FEM", "Edit {}").format(self.obj.Label)
|
||||
)
|
||||
|
||||
@@ -195,15 +195,6 @@ class BSplineCurve(BoundedCurve):
|
||||
"""
|
||||
...
|
||||
|
||||
@constmethod
|
||||
def split(self, u: float, tolerance: float = 0.0, /) -> tuple[BSplineCurve, BSplineCurve]:
|
||||
"""
|
||||
split(u, tolerance=0.0)
|
||||
|
||||
Splits this B-Spline curve at parameter u and returns the two resulting curves.
|
||||
"""
|
||||
...
|
||||
|
||||
def setKnot(self, knot: float, index: int, /) -> None:
|
||||
"""
|
||||
Set a knot of the B-Spline curve.
|
||||
|
||||
@@ -327,26 +327,6 @@ PyObject* BSplineCurvePy::segment(PyObject* args)
|
||||
}
|
||||
}
|
||||
|
||||
PyObject* BSplineCurvePy::split(PyObject* args) const
|
||||
{
|
||||
double u {};
|
||||
double tolerance = 0.0;
|
||||
if (!PyArg_ParseTuple(args, "d|d", &u, &tolerance)) {
|
||||
return nullptr;
|
||||
}
|
||||
try {
|
||||
auto curves = getGeomBSplineCurvePtr()->split(u, tolerance);
|
||||
Py::Tuple tuple(2);
|
||||
tuple.setItem(0, Py::asObject(std::get<0>(curves)->getPyObject()));
|
||||
tuple.setItem(1, Py::asObject(std::get<1>(curves)->getPyObject()));
|
||||
return Py::new_reference_to(tuple);
|
||||
}
|
||||
catch (Standard_Failure& e) {
|
||||
PyErr_SetString(PartExceptionOCCError, e.GetMessageString());
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
PyObject* BSplineCurvePy::setKnot(PyObject* args)
|
||||
{
|
||||
int Index, M = -1;
|
||||
|
||||
@@ -1711,18 +1711,6 @@ bool GeomBSplineCurve::join(const Handle(Geom_BoundedCurve) & other)
|
||||
return true;
|
||||
}
|
||||
|
||||
std::tuple<GeomBSplineCurvePtr, GeomBSplineCurvePtr> GeomBSplineCurve::split(double u, double tol) const
|
||||
{
|
||||
Handle(Geom_BSplineCurve) curveL
|
||||
= GeomConvert::SplitBSplineCurve(myCurve, myCurve->FirstParameter(), u, tol, true);
|
||||
Handle(Geom_BSplineCurve) curveR
|
||||
= GeomConvert::SplitBSplineCurve(myCurve, u, myCurve->LastParameter(), tol, true);
|
||||
return std::make_tuple(
|
||||
std::make_shared<GeomBSplineCurve>(curveL),
|
||||
std::make_shared<GeomBSplineCurve>(curveR)
|
||||
);
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::interpolate(const std::vector<gp_Pnt>& p, Standard_Boolean periodic)
|
||||
{
|
||||
if (p.size() < 2) {
|
||||
|
||||
@@ -311,7 +311,6 @@ private:
|
||||
Handle(Geom_BezierCurve) myCurve;
|
||||
};
|
||||
|
||||
using GeomBSplineCurvePtr = std::shared_ptr<GeomBSplineCurve>;
|
||||
class PartExport GeomBSplineCurve: public GeomBoundedCurve
|
||||
{
|
||||
TYPESYSTEM_HEADER_WITH_OVERRIDE();
|
||||
@@ -378,7 +377,6 @@ public:
|
||||
void setPeriodic() const;
|
||||
bool isRational() const;
|
||||
bool join(const Handle(Geom_BoundedCurve) &);
|
||||
std::tuple<GeomBSplineCurvePtr, GeomBSplineCurvePtr> split(double u, double tol) const;
|
||||
void makeC1Continuous(double, double);
|
||||
std::list<Geometry*> toBiArcs(double tolerance) const;
|
||||
|
||||
|
||||
@@ -22,9 +22,6 @@
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="Gui::PrefCheckBox" name="checkBooleanCheck">
|
||||
<property name="toolTip">
|
||||
<string>Runs a geometry validity check automatically after each Part boolean operation</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Automatically check model after boolean operation</string>
|
||||
</property>
|
||||
@@ -41,9 +38,6 @@
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="Gui::PrefCheckBox" name="checkBooleanRefine">
|
||||
<property name="toolTip">
|
||||
<string>Automatically refines the shape after each Part boolean operation to remove residual edges and faces</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Automatically refine model after boolean operation</string>
|
||||
</property>
|
||||
@@ -60,9 +54,6 @@
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="Gui::PrefCheckBox" name="checkSketchBaseRefine">
|
||||
<property name="toolTip">
|
||||
<string>Automatically refines Part Design features to remove residual edges and faces</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Automatically refine model after applying operations</string>
|
||||
</property>
|
||||
@@ -79,9 +70,6 @@
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="Gui::PrefCheckBox" name="checkAllowCompoundBody">
|
||||
<property name="toolTip">
|
||||
<string>Enables the multiple-solids Body option by default for newly created Part Design bodies</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Allow multiple solids in Part Design bodies by default</string>
|
||||
</property>
|
||||
@@ -113,9 +101,6 @@
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="Gui::PrefCheckBox" name="checkObjectNaming">
|
||||
<property name="toolTip">
|
||||
<string>Currently not implemented: this option does not yet modify automatically generated Part feature names</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add name of base object</string>
|
||||
</property>
|
||||
@@ -146,9 +131,6 @@
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="toolTip">
|
||||
<string>Specifies which profile geometry types are accepted by the Part Design Hole feature</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Default profile type for holes</string>
|
||||
</property>
|
||||
@@ -156,9 +138,6 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Gui::PrefComboBox" name="comboDefaultProfileTypeForHole">
|
||||
<property name="toolTip">
|
||||
<string>Specifies which profile geometry types are accepted by the Part Design Hole feature</string>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
</property>
|
||||
@@ -223,9 +202,6 @@
|
||||
<layout class="QVBoxLayout" name="verticalLayout_31">
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="checkShowFinalPreview">
|
||||
<property name="toolTip">
|
||||
<string>Shows the final computed shape by default while editing Part Design features</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show final result by default when editing features</string>
|
||||
</property>
|
||||
@@ -239,9 +215,6 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="checkShowTransparentPreview">
|
||||
<property name="toolTip">
|
||||
<string>Displays a temporary transparent overlay preview while editing Part Design features</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show transparent preview overlay by default when editing features</string>
|
||||
</property>
|
||||
@@ -258,9 +231,6 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="checkShowProfilePreview">
|
||||
<property name="toolTip">
|
||||
<string>Highlights the sketch or profile geometry used by the feature currently being edited</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Highlight the profile used to create features</string>
|
||||
</property>
|
||||
@@ -302,9 +272,6 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="enableGizmos">
|
||||
<property name="toolTip">
|
||||
<string>Enables draggers for interactive editing of supported feature parameters</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show interactive draggers when editing features</string>
|
||||
</property>
|
||||
@@ -321,9 +288,6 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="delayedGizmoUpdate">
|
||||
<property name="toolTip">
|
||||
<string>Delays recompute until dragging ends when using draggers, improving interaction speed</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Disable recompute while dragging</string>
|
||||
</property>
|
||||
|
||||
@@ -217,6 +217,7 @@ bool TaskDlgFeatureParameters::accept()
|
||||
feature->getDocument()->commitTransaction();
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
feature->getDocument()->abortTransaction();
|
||||
QString errorText = QString::fromUtf8(e.what());
|
||||
QString statusText = QString::fromUtf8(getObject()->getStatusString());
|
||||
|
||||
|
||||
@@ -333,11 +333,15 @@ std::optional<gp_Pnt> ViewProviderHole::getHoleOrigin(const PartDesign::Hole* pc
|
||||
if (!pcHole) {
|
||||
return std::nullopt;
|
||||
}
|
||||
if (auto* profile = pcHole->Profile.getValue()) {
|
||||
const Base::Vector3d pos = profile->getPlacement().getPosition();
|
||||
return Base::convertTo<gp_Pnt>(pos);
|
||||
|
||||
auto* sketch = freecad_cast<Part::Part2DObject*>(pcHole->Profile.getValue());
|
||||
|
||||
if (!sketch) {
|
||||
return std::nullopt;
|
||||
}
|
||||
return std::nullopt;
|
||||
|
||||
const Base::Vector3d& pos = sketch->Placement.getValue().getPosition();
|
||||
return Base::convertTo<gp_Pnt>(pos);
|
||||
}
|
||||
|
||||
std::vector<TopoDS_Face> ViewProviderHole::collectBoreFaces(const PartDesign::Hole* pcHole) const
|
||||
|
||||
Reference in New Issue
Block a user