git: 4271b76acc5d - main - cad/pythonocc-core: new port, 3D modeling based on the OpenCascade Technology

Thierry Thomas <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.ports
Message-ID <6a806ae6.38694.f177816__40419.1994153493$1786800888$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by thierry:

URL: https://cgit.FreeBSD.org/ports/commit/?id=4271b76acc5d1ff350d56b896d532d22524cc4a1

commit 4271b76acc5d1ff350d56b896d532d22524cc4a1
Author:     Philippe Hay <[email protected]>
AuthorDate: 2026-08-11 15:24:01 +0000
Commit:     Thierry Thomas <[email protected]>
CommitDate: 2026-08-15 13:34:26 +0000

    cad/pythonocc-core: new port, 3D modeling based on the OpenCascade Technology
    
    pythonocc provides 3D modeling and dataexchange features.
    It is intended to CAD/PDM/PLM/BIM development.
    The module is based on the OpenCascade Technology modeling kernel.
    
    PR:             290214
    Reported by:    Philippe Hay
---
 cad/pythonocc-core/Makefile                        |   34 +
 cad/pythonocc-core/distinfo                        |    3 +
 cad/pythonocc-core/files/patch-CMakeLists.txt      |   63 +
 .../files/patch-src_PkgBase_____init____.py        |   19 +
 ...atch-src_SWIG__files_headers_Approx__module.hxx |   12 +
 ...ch-src_SWIG__files_headers_GeomFill__module.hxx |   12 +
 .../files/patch-src_SWIG__files_wrapper_Approx.i   |  295 +++
 .../files/patch-src_SWIG__files_wrapper_Approx.pyi |   18 +
 .../patch-src_SWIG__files_wrapper_BRepAlgoAPI.i    |  127 +
 .../files/patch-src_SWIG__files_wrapper_GeomFill.i |  178 ++
 .../patch-src_SWIG__files_wrapper_GeomFill.pyi     |   18 +
 .../patch-src_SWIG__files_wrapper_TCollection.i    | 2485 ++++++++++++++++++++
 cad/pythonocc-core/pkg-descr                       |   18 +
 cad/pythonocc-core/pkg-plist                       |  980 ++++++++
 14 files changed, 4262 insertions(+)

diff --git a/cad/pythonocc-core/Makefile b/cad/pythonocc-core/Makefile
new file mode 100644
index 000000000000..2ea437c5e945
--- /dev/null
+++ b/cad/pythonocc-core/Makefile
@@ -0,0 +1,34 @@
+PORTNAME=	pythonocc-core
+DISTVERSION=	8.0.0.a
+CATEGORIES=	cad python
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER=	[email protected]
+COMMENT=	3D modeling based on the OpenCascade Technology modeling kernel
+WWW=		https://github.com/tpaviot/pythonocc-core
+
+LICENSE=	LGPL3
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}numpy>=1.17:math/py-numpy@${PY_FLAVOR} \
+		${LOCALBASE}/include/rapidjson/reader.h:devel/rapidjson \
+		swig:devel/swig \
+		${PYTHON_PKGNAMEPREFIX}qt5-pyqt>0:devel/py-qt5-pyqt@${PY_FLAVOR}
+LIB_DEPENDS=	libTKernel.so:cad/opencascade
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}numpy>=1.17:math/py-numpy@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}svgwrite>0:graphics/py-svgwrite@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}numpy-stl>0:math/py-numpy-stl@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}matplotlib>0:math/py-matplotlib@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}qt5-pyqt>0:devel/py-qt5-pyqt@${PY_FLAVOR}
+TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}black>0:devel/py-black@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}twisted>0:devel/py-twisted@${PY_FLAVOR}
+
+USES=		cmake compiler:c++17-lang gl pytest python
+USE_GL=		opengl
+USE_PYTHON=	cython
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	tpaviot
+GH_PROJECT=	pythonocc-core
+GH_TAGNAME=	fe54be6549db400da0d59caeed7af1d04e92a9ab
+
+.include <bsd.port.mk>
diff --git a/cad/pythonocc-core/distinfo b/cad/pythonocc-core/distinfo
new file mode 100644
index 000000000000..800401335373
--- /dev/null
+++ b/cad/pythonocc-core/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1785766941
+SHA256 (tpaviot-pythonocc-core-8.0.0.a-fe54be6549db400da0d59caeed7af1d04e92a9ab_GH0.tar.gz) = c5e32990e2bfd70c4985442aab00aa47c38f2cb42eac7894cf1484d716cb8f8a
+SIZE (tpaviot-pythonocc-core-8.0.0.a-fe54be6549db400da0d59caeed7af1d04e92a9ab_GH0.tar.gz) = 5931962
diff --git a/cad/pythonocc-core/files/patch-CMakeLists.txt b/cad/pythonocc-core/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..de3cb37144dd
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-CMakeLists.txt
@@ -0,0 +1,63 @@
+--- CMakeLists.txt.orig	2026-06-25 05:33:03 UTC
++++ CMakeLists.txt
+@@ -22,15 +22,16 @@ set(PYTHONOCC_VERSION_MINOR 0)
+ # set pythonOCC version
+ set(PYTHONOCC_VERSION_MAJOR 8)
+ set(PYTHONOCC_VERSION_MINOR 0)
+-set(PYTHONOCC_VERSION_PATCH 0)
++set(PYTHONOCC_VERSION_PATCH 1)
+ 
+ #  Empty for official releases, set to -dev, -rc1, etc for development releases
+-set(PYTHONOCC_VERSION_DEVEL )
++set(PYTHONOCC_VERSION_DEVEL alpha)
+ 
+ # set OCCT version
++
+ set(OCCT_VERSION_MAJOR 8)
+ set(OCCT_VERSION_MINOR 0)
+-set(OCCT_VERSION_PATCH 0)
++set(OCCT_VERSION_PATCH 1)
+ 
+ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
+ 
+@@ -73,6 +74,12 @@ include_directories(${OPENGL_INCLUDE_DIR})
+ find_package(OpenGL)
+ include_directories(${OPENGL_INCLUDE_DIR})
+ 
++##############################
++# rapidjson
++#############################
++find_package(RapidJSON REQUIRED)
++set(RapidJSON_INCLUDE_DIR /usr/local/include CACHE PATH "path to the rapidjson include directory")
++
+ #################
+ # Build options #
+ #################
+@@ -88,7 +95,7 @@ option_with_default(OCCT_HIDE_DEPRECATED "Check this o
+ option_with_default(PYTHONOCC_WRAP_OCAF "Compile OCCT Application Framework wrapper" ON)
+ option_with_default(SWIG_HIDE_WARNINGS "Check this option if you want a less verbose swig output." ON)
+ option_with_default(OCCT_HIDE_DEPRECATED "Check this option to disable deprecation warnings for OCCT." ON)
+-option_with_default(PYTHONOCC_MESHDS_NUMPY "Enable using numpy to speed up mesh data source arrays (requires numpy dev libraries and headers)." OFF)
++option_with_default(PYTHONOCC_MESHDS_NUMPY "Enable using numpy to speed up mesh data source arrays (requires numpy dev libraries and headers)." ON)
+ 
+ ############
+ # Python 3 #
+@@ -100,8 +107,6 @@ if(PYTHONOCC_MESHDS_NUMPY)
+     include_directories(${Python3_NumPy_INCLUDE_DIRS})
+     message(STATUS "Numpy include directory: ${Python3_NumPy_INCLUDE_DIRS}")
+     set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DBUILD_MESHDS_NUMPY)
+-else(PYTHONOCC_MESHDS_NUMPY)
+-    find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
+ endif(PYTHONOCC_MESHDS_NUMPY)
+ message(STATUS "Python3 interpreter:" ${Python3_EXECUTABLE})
+ message(STATUS "Python include directory: ${Python3_INCLUDE_DIRS}")
+@@ -110,7 +115,8 @@ message(STATUS "Python library release: ${Python3_LIBR
+ ########
+ # SWIG #
+ ########
+-find_package(SWIG 4.2.1...4.4.1 REQUIRED)
++#find_package(SWIG 4.2.1...4.4.1 REQUIRED)
++find_package(SWIG 4.2.1)
+ message(STATUS "SWIG version found: ${SWIG_VERSION}")
+ include(${SWIG_USE_FILE})
+ set(SWIG_FILES_PATH src/SWIG_files/wrapper)
diff --git a/cad/pythonocc-core/files/patch-src_PkgBase_____init____.py b/cad/pythonocc-core/files/patch-src_PkgBase_____init____.py
new file mode 100644
index 000000000000..7facc3a6ccac
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_PkgBase_____init____.py
@@ -0,0 +1,19 @@
+--- src/PkgBase/__init__.py.orig	2026-08-07 14:05:22 UTC
++++ src/PkgBase/__init__.py
+@@ -3,12 +3,12 @@ import platform
+ import platform
+ 
+ # Version number
+-PYTHONOCC_VERSION_MAJOR = 7
+-PYTHONOCC_VERSION_MINOR = 9
+-PYTHONOCC_VERSION_PATCH = 0
++PYTHONOCC_VERSION_MAJOR = 8
++PYTHONOCC_VERSION_MINOR = 0
++PYTHONOCC_VERSION_PATCH = 1
+ 
+ # Empty for official releases, set to -dev, -rc1, etc for development releases
+-PYTHONOCC_VERSION_DEVEL = ""
++PYTHONOCC_VERSION_DEVEL = "alpha"
+ 
+ VERSION = f"{PYTHONOCC_VERSION_MAJOR}.{PYTHONOCC_VERSION_MINOR}.{PYTHONOCC_VERSION_PATCH}{PYTHONOCC_VERSION_DEVEL}"
+ 
diff --git a/cad/pythonocc-core/files/patch-src_SWIG__files_headers_Approx__module.hxx b/cad/pythonocc-core/files/patch-src_SWIG__files_headers_Approx__module.hxx
new file mode 100644
index 000000000000..fa3c424d5f47
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_SWIG__files_headers_Approx__module.hxx
@@ -0,0 +1,12 @@
+--- src/SWIG_files/headers/Approx_module.hxx.orig	2026-08-04 19:50:29 UTC
++++ src/SWIG_files/headers/Approx_module.hxx
+@@ -21,7 +21,8 @@ along with pythonOCC.  If not, see <http://www.gnu.org
+ 
+ #include<Approx_Array1OfAdHSurface.hxx>
+ #include<Approx_Array1OfGTrsf2d.hxx>
+-#include<Approx_BSplineApproxInterp.hxx>
++// Approx_BSplineApproxInterp.hxx is removed
++// #include<Approx_BSplineApproxInterp.hxx>
+ #include<Approx_Curve2d.hxx>
+ #include<Approx_Curve3d.hxx>
+ #include<Approx_CurveOnSurface.hxx>
diff --git a/cad/pythonocc-core/files/patch-src_SWIG__files_headers_GeomFill__module.hxx b/cad/pythonocc-core/files/patch-src_SWIG__files_headers_GeomFill__module.hxx
new file mode 100644
index 000000000000..ecf0ccf7e059
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_SWIG__files_headers_GeomFill__module.hxx
@@ -0,0 +1,12 @@
+--- src/SWIG_files/headers/GeomFill_module.hxx.orig	2026-08-04 19:50:29 UTC
++++ src/SWIG_files/headers/GeomFill_module.hxx
+@@ -51,7 +51,8 @@ along with pythonOCC.  If not, see <http://www.gnu.org
+ #include<GeomFill_FunctionGuide.hxx>
+ #include<GeomFill_Generator.hxx>
+ #include<GeomFill_Gordon.hxx>
+-#include<GeomFill_GordonBuilder.hxx>
++// removed in 8.0.1
++// #include<GeomFill_GordonBuilder.hxx>
+ #include<GeomFill_GuideTrihedronAC.hxx>
+ #include<GeomFill_GuideTrihedronPlan.hxx>
+ #include<GeomFill_HArray1OfLocationLaw.hxx>
diff --git a/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_Approx.i b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_Approx.i
new file mode 100644
index 000000000000..7fd96836ea5e
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_Approx.i
@@ -0,0 +1,295 @@
+--- src/SWIG_files/wrapper/Approx.i.orig	2026-08-04 19:52:44 UTC
++++ src/SWIG_files/wrapper/Approx.i
+@@ -153,290 +153,9 @@ typedef NCollection_Sequence<opencascade::handle<TColS
+ typedef NCollection_Sequence<opencascade::handle<TColStd_HArray1OfReal>> Approx_SequenceOfHArray1OfReal;
+ /* end typedefs declaration */
+ 
+-/***********************************
+-* class Approx_BSplineApproxInterp *
+-***********************************/
+-class Approx_BSplineApproxInterp {
+-	public:
+-		/****** Approx_BSplineApproxInterp::Approx_BSplineApproxInterp ******/
+-		/****** md5 signature: 327aa9c8cae4778ed421f8deffe06de7 ******/
+-		%feature("compactdefaultargs") Approx_BSplineApproxInterp;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-thePoints: TColgp_Array1OfPnt
+-theNbControlPts: int
+-theDegree: int (optional, default to 3)
+-theContinuousIfClosed: bool (optional, default to false)
++/* Begin remove Class Approx_BSplineApproxInterp */
+ 
+-Return
+--------
+-None
+-
+-Description
+------------
+-Creates a constrained approximation solver. 
+-Input parameter: thePoints array of 3D points to fit (1-based indexing) 
+-Input parameter: theNbControlPts desired number of control points for the B-spline 
+-Input parameter: theDegree degree of the B-spline (default 3) 
+-Input parameter: theContinuousIfClosed if true, enforces C2 continuity for closed curves.
+-") Approx_BSplineApproxInterp;
+-		 Approx_BSplineApproxInterp(const TColgp_Array1OfPnt & thePoints, int theNbControlPts, int theDegree = 3, bool theContinuousIfClosed = false);
+-
+-		/****** Approx_BSplineApproxInterp::Curve ******/
+-		/****** md5 signature: c38eea3d03f43cd4ac9ae236a908e33c ******/
+-		%feature("compactdefaultargs") Curve;
+-		%feature("autodoc", "Return
+--------
+-opencascade::handle<Geom_BSplineCurve>
+-
+-Description
+------------
+-Returns the resulting B-spline curve.
+-") Curve;
+-		const opencascade::handle<Geom_BSplineCurve> & Curve();
+-
+-		/****** Approx_BSplineApproxInterp::InterpolatePoint ******/
+-		/****** md5 signature: 88cab115881f613dfba7ed44fe7f3eca ******/
+-		%feature("compactdefaultargs") InterpolatePoint;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-thePointIndex: int
+-theWithKink: bool (optional, default to false)
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Marks a point to be exactly interpolated rather than approximated. 
+-Input parameter: thePointIndex 0-based index of the point 
+-Input parameter: theWithKink if true, a kink (C0 break) is inserted at this parameter.
+-") InterpolatePoint;
+-		void InterpolatePoint(int thePointIndex, bool theWithKink = false);
+-
+-		/****** Approx_BSplineApproxInterp::IsDone ******/
+-		/****** md5 signature: 05e29e49040d98b489fbc7af11aabb8e ******/
+-		%feature("compactdefaultargs") IsDone;
+-		%feature("autodoc", "Return
+--------
+-bool
+-
+-Description
+------------
+-Returns true if the fit was successfully computed.
+-") IsDone;
+-		bool IsDone();
+-
+-		/****** Approx_BSplineApproxInterp::MaxError ******/
+-		/****** md5 signature: 48ec91e4ff08cef7b377cac5e0e8d40a ******/
+-		%feature("compactdefaultargs") MaxError;
+-		%feature("autodoc", "Return
+--------
+-double
+-
+-Description
+------------
+-Returns the maximum approximation error (distance at approximated points).
+-") MaxError;
+-		double MaxError();
+-
+-		/****** Approx_BSplineApproxInterp::Perform ******/
+-		/****** md5 signature: c04b01412cba7220c024b5eb4532697f ******/
+-		%feature("compactdefaultargs") Perform;
+-		%feature("autodoc", "Return
+--------
+-None
+-
+-Description
+------------
+-Performs the fit using automatically computed parameters. Parameters are computed from input points using current parametrization alpha.
+-") Perform;
+-		void Perform();
+-
+-		/****** Approx_BSplineApproxInterp::Perform ******/
+-		/****** md5 signature: edd8da24abbeab549db6739ff7d86cac ******/
+-		%feature("compactdefaultargs") Perform;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theParams: TColStd_Array1OfReal
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Performs the fit with given parameters. 
+-Input parameter: theParams parameter values for each point (size must match point count).
+-") Perform;
+-		void Perform(const TColStd_Array1OfReal & theParams);
+-
+-		/****** Approx_BSplineApproxInterp::PerformOptimal ******/
+-		/****** md5 signature: 9208ad1faca7f61290cf24b3e701c16d ******/
+-		%feature("compactdefaultargs") PerformOptimal;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theMaxIter: int
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Performs the fit with iterative parameter optimization using automatically computed initial parameters. 
+-Input parameter: theMaxIter maximum number of optimization iterations.
+-") PerformOptimal;
+-		void PerformOptimal(int theMaxIter);
+-
+-		/****** Approx_BSplineApproxInterp::PerformOptimal ******/
+-		/****** md5 signature: 39ed52935923f49d5478c48507e4540a ******/
+-		%feature("compactdefaultargs") PerformOptimal;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theParams: TColStd_Array1OfReal
+-theMaxIter: int
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Performs the fit with iterative parameter optimization. Parameters of approximated points are re-projected onto the curve after each iteration to improve the fit. 
+-Input parameter: theParams initial parameter values 
+-Input parameter: theMaxIter maximum number of optimization iterations.
+-") PerformOptimal;
+-		void PerformOptimal(const TColStd_Array1OfReal & theParams, int theMaxIter);
+-
+-		/****** Approx_BSplineApproxInterp::SetClosedTolerance ******/
+-		/****** md5 signature: c8a4c45fa8db6f2cf7a3064333529aef ******/
+-		%feature("compactdefaultargs") SetClosedTolerance;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theRelTol: double
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Sets the relative tolerance for detecting closed curves. Closedness is detected when first/last points are within theRelTol * (bounding box diagonal). 
+-Input parameter: theRelTol relative tolerance (default 1e-12).
+-") SetClosedTolerance;
+-		void SetClosedTolerance(double theRelTol);
+-
+-		/****** Approx_BSplineApproxInterp::SetConvergenceTolerance ******/
+-		/****** md5 signature: 32dd19fe3bd8a68a10704dfeaf23af3f ******/
+-		%feature("compactdefaultargs") SetConvergenceTolerance;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theTol: double
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Sets the convergence tolerance for parameter optimization. Optimization stops when relative error reduction falls below this value. 
+-Input parameter: theTol convergence tolerance (default 1e-3).
+-") SetConvergenceTolerance;
+-		void SetConvergenceTolerance(double theTol);
+-
+-		/****** Approx_BSplineApproxInterp::SetKnotInsertionTolerance ******/
+-		/****** md5 signature: fba00dbe4b829b430f2eca8881356d4f ******/
+-		%feature("compactdefaultargs") SetKnotInsertionTolerance;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theTol: double
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Sets the tolerance for detecting duplicate knot positions during insertion. 
+-Input parameter: theTol knot matching tolerance (default 1e-4).
+-") SetKnotInsertionTolerance;
+-		void SetKnotInsertionTolerance(double theTol);
+-
+-		/****** Approx_BSplineApproxInterp::SetMinPivot ******/
+-		/****** md5 signature: 76d4a0e19014e897215028588328ad63 ******/
+-		%feature("compactdefaultargs") SetMinPivot;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theMinPivot: double
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Sets the minimum pivot value for the Gauss solver. Matrices with pivots below this threshold are treated as singular. 
+-Input parameter: theMinPivot minimum pivot threshold (default 1e-20).
+-") SetMinPivot;
+-		void SetMinPivot(double theMinPivot);
+-
+-		/****** Approx_BSplineApproxInterp::SetParametrizationAlpha ******/
+-		/****** md5 signature: ac54d445809a59b404b537fce3ccc531 ******/
+-		%feature("compactdefaultargs") SetParametrizationAlpha;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theAlpha: double
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Sets the parametrization power for automatic parameter computation. 0.0 = uniform, 0.5 = centripetal (default), 1.0 = chord-length. 
+-Input parameter: theAlpha parametrization exponent in [0, 1].
+-") SetParametrizationAlpha;
+-		void SetParametrizationAlpha(double theAlpha);
+-
+-		/****** Approx_BSplineApproxInterp::SetProjectionTolerance ******/
+-		/****** md5 signature: a2d46914406443eccff22bac9af1d607 ******/
+-		%feature("compactdefaultargs") SetProjectionTolerance;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theTol: double
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Sets the tolerance for point projection onto curve during optimization. 
+-Input parameter: theTol projection accuracy (default 1e-6).
+-") SetProjectionTolerance;
+-		void SetProjectionTolerance(double theTol);
+-
+-};
+-
+-
+-%extend Approx_BSplineApproxInterp {
+-	%pythoncode {
+-	__repr__ = _dumps_object
+-	}
+-};
++/*  End remove Class Approx_BSplineApproxInterp  */
+ 
+ /***********************
+ * class Approx_Curve2d *
diff --git a/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_Approx.pyi b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_Approx.pyi
new file mode 100644
index 000000000000..85ae3271b3b2
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_Approx.pyi
@@ -0,0 +1,18 @@
+--- src/SWIG_files/wrapper/Approx.pyi.orig	2026-08-04 19:52:44 UTC
++++ src/SWIG_files/wrapper/Approx.pyi
+@@ -100,6 +100,7 @@ Approx_NoApproximation = Approx_Status.Approx_NoApprox
+ Approx_NoPointsAdded = Approx_Status.Approx_NoPointsAdded
+ Approx_NoApproximation = Approx_Status.Approx_NoApproximation
+ 
++"""
+ class Approx_BSplineApproxInterp:
+     def __init__(self, thePoints: TColgp_Array1OfPnt, theNbControlPts: int, theDegree: Optional[int] = 3, theContinuousIfClosed: Optional[bool] = false) -> None: ...
+     def Curve(self) -> Geom_BSplineCurve: ...
+@@ -120,6 +121,7 @@ class Approx_BSplineApproxInterp:
+     def SetMinPivot(self, theMinPivot: float) -> None: ...
+     def SetParametrizationAlpha(self, theAlpha: float) -> None: ...
+     def SetProjectionTolerance(self, theTol: float) -> None: ...
++""" 
+ 
+ class Approx_Curve2d:
+     def __init__(self, C2D: Adaptor2d_Curve2d, First: float, Last: float, TolU: float, TolV: float, Continuity: GeomAbs_Shape, MaxDegree: int, MaxSegments: int) -> None: ...
diff --git a/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_BRepAlgoAPI.i b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_BRepAlgoAPI.i
new file mode 100644
index 000000000000..e6b4faea641d
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_BRepAlgoAPI.i
@@ -0,0 +1,127 @@
+--- src/SWIG_files/wrapper/BRepAlgoAPI.i.orig	2026-08-06 17:32:08 UTC
++++ src/SWIG_files/wrapper/BRepAlgoAPI.i
+@@ -148,10 +148,10 @@ -----------
+ 
+ Description
+ -----------
+-Constructor for checking single shape. //! 
+-Input parameter: theS - the shape to check; 
+-Input parameter: bTestSE - flag which specifies whether to check the shape  on small edges or not; by default it is set to True; 
+-Input parameter: bTestSI - flag which specifies whether to check the shape  on self-interference or not; by default it is set to True; 
++Constructor for checking single shape. //!
++Input parameter: theS - the shape to check;
++Input parameter: bTestSE - flag which specifies whether to check the shape  on small edges or not; by default it is set to True;
++Input parameter: bTestSI - flag which specifies whether to check the shape  on self-interference or not; by default it is set to True;
+ Input parameter: theRange - parameter to use progress indicator.
+ ") BRepAlgoAPI_Check;
+ 		 BRepAlgoAPI_Check(const TopoDS_Shape & theS, const bool bTestSE = true, const bool bTestSI = true, const Message_ProgressRange & theRange = Message_ProgressRange());
+@@ -175,12 +175,12 @@ -----------
+ 
+ Description
+ -----------
+-Constructor for checking the couple of shapes. Additionally to the validity checks of each given shape, the types of the given shapes will be checked on validity for Boolean operation of given type. //! 
+-Input parameter: theS1 - the first shape to check; 
+-Input parameter: theS2 - the second shape to check; 
+-Input parameter: theOp - the type of Boolean Operation for which the validity of given shapes should be checked. 
+-Input parameter: bTestSE - flag which specifies whether to check the shape  on small edges or not; by default it is set to True; 
+-Input parameter: bTestSI - flag which specifies whether to check the shape  on self-interference or not; by default it is set to True; 
++Constructor for checking the couple of shapes. Additionally to the validity checks of each given shape, the types of the given shapes will be checked on validity for Boolean operation of given type. //!
++Input parameter: theS1 - the first shape to check;
++Input parameter: theS2 - the second shape to check;
++Input parameter: theOp - the type of Boolean Operation for which the validity of given shapes should be checked.
++Input parameter: bTestSE - flag which specifies whether to check the shape  on small edges or not; by default it is set to True;
++Input parameter: bTestSI - flag which specifies whether to check the shape  on self-interference or not; by default it is set to True;
+ Input parameter: theRange - parameter to use progress indicator.
+ ") BRepAlgoAPI_Check;
+ 		 BRepAlgoAPI_Check(const TopoDS_Shape & theS1, const TopoDS_Shape & theS2, const BOPAlgo_Operation theOp = BOPAlgo_UNKNOWN, const bool bTestSE = true, const bool bTestSI = true, const Message_ProgressRange & theRange = Message_ProgressRange());
+@@ -245,9 +245,9 @@ -----------
+ 
+ Description
+ -----------
+-Initializes the algorithm with single shape. //! 
+-Input parameter: theS - the shape to check; 
+-Input parameter: bTestSE - flag which specifies whether to check the shape  on small edges or not; by default it is set to True; 
++Initializes the algorithm with single shape. //!
++Input parameter: theS - the shape to check;
++Input parameter: bTestSE - flag which specifies whether to check the shape  on small edges or not; by default it is set to True;
+ Input parameter: bTestSI - flag which specifies whether to check the shape  on self-interference or not; by default it is set to True;.
+ ") SetData;
+ 		void SetData(const TopoDS_Shape & theS, const bool bTestSE = true, const bool bTestSI = true);
+@@ -270,11 +270,11 @@ -----------
+ 
+ Description
+ -----------
+-Initializes the algorithm with couple of shapes. Additionally to the validity checks of each given shape, the types of the given shapes will be checked on validity for Boolean operation of given type. //! 
+-Input parameter: theS1 - the first shape to check; 
+-Input parameter: theS2 - the second shape to check; 
+-Input parameter: theOp - the type of Boolean Operation for which the validity of given shapes should be checked. 
+-Input parameter: bTestSE - flag which specifies whether to check the shape  on small edges or not; by default it is set to True; 
++Initializes the algorithm with couple of shapes. Additionally to the validity checks of each given shape, the types of the given shapes will be checked on validity for Boolean operation of given type. //!
++Input parameter: theS1 - the first shape to check;
++Input parameter: theS2 - the second shape to check;
++Input parameter: theOp - the type of Boolean Operation for which the validity of given shapes should be checked.
++Input parameter: bTestSE - flag which specifies whether to check the shape  on small edges or not; by default it is set to True;
+ Input parameter: bTestSI - flag which specifies whether to check the shape  on self-interference or not; by default it is set to True;.
+ ") SetData;
+ 		void SetData(const TopoDS_Shape & theS1, const TopoDS_Shape & theS2, const BOPAlgo_Operation theOp = BOPAlgo_UNKNOWN, const bool bTestSE = true, const bool bTestSI = true);
+@@ -320,6 +320,22 @@ Returns a shape built by the shape construction algori
+ /********************************
+ * class BRepAlgoAPI_BuilderAlgo *
+ ********************************/
++// occt-800: BRepAlgoAPI_BuilderAlgo gained deleted copy/move members, so the
++// generator dropped it into the excluded-classes list. That severed the
++// inheritance chain (BooleanOperation/Splitter -> BuilderAlgo -> Algo), hiding
++// the inherited Shape() from every boolean operation. Re-wrap it (empty body
++// is enough) so Shape() is exposed again.
++%nodefaultctor BRepAlgoAPI_BuilderAlgo;
++class BRepAlgoAPI_BuilderAlgo : public BRepAlgoAPI_Algo {
++	public:
++};
++
++%extend BRepAlgoAPI_BuilderAlgo {
++	%pythoncode {
++	__repr__ = _dumps_object
++	}
++};
++
+ /********************************
+ * class BRepAlgoAPI_Defeaturing *
+ ********************************/
+@@ -352,7 +368,7 @@ -----------
+ 
+ Description
+ -----------
+-Adds the features to remove from the input shape. 
++Adds the features to remove from the input shape.
+ Input parameter: theFace The shape to extract the faces for removal.
+ ") AddFaceToRemove;
+ 		void AddFaceToRemove(const TopoDS_Shape & theFace);
+@@ -371,7 +387,7 @@ -----------
+ 
+ Description
+ -----------
+-Adds the faces to remove from the input shape. 
++Adds the faces to remove from the input shape.
+ Input parameter: theFaces The list of shapes to extract the faces for removal.
+ ") AddFacesToRemove;
+ 		void AddFacesToRemove(const TopTools_ListOfShape & theFaces);
+@@ -553,7 +569,7 @@ -----------
+ 
+ Description
+ -----------
+-Sets the shape for processing. 
++Sets the shape for processing.
+ Input parameter: theShape The shape to remove the features from.  It should either be the SOLID, COMPSOLID or COMPOUND of Solids.
+ ") SetShape;
+ 		void SetShape(const TopoDS_Shape & theShape);
+@@ -1475,10 +1491,6 @@ initialize the tool <Sf> - tool Obsolete.
+ 
+ /* python proxy for excluded classes */
+ %pythoncode {
+-@classnotwrapped
+-class BRepAlgoAPI_BuilderAlgo:
+-	pass
+-
+ }
+ /* end python proxy for excluded classes */
+ /* harray1 classes */
diff --git a/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_GeomFill.i b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_GeomFill.i
new file mode 100644
index 000000000000..16808e53e2d2
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_GeomFill.i
@@ -0,0 +1,178 @@
+--- src/SWIG_files/wrapper/GeomFill.i.orig	2026-08-04 19:52:44 UTC
++++ src/SWIG_files/wrapper/GeomFill.i
+@@ -3696,173 +3696,9 @@ Returns the resulting Gordon B-spline surface.
+ 	}
+ };
+ 
+-/*******************************
+-* class GeomFill_GordonBuilder *
+-*******************************/
+-class GeomFill_GordonBuilder {
+-	public:
+-		/****** GeomFill_GordonBuilder::GeomFill_GordonBuilder ******/
+-		/****** md5 signature: 8cfff7419d8602124f7a3bb0671c8e11 ******/
+-		%feature("compactdefaultargs") GeomFill_GordonBuilder;
+-		%feature("autodoc", "Return
+--------
+-None
++/* Begin remove GeomFill_GordonBuilder  */
+ 
+-Description
+------------
+-Creates an empty Gordon builder.
+-") GeomFill_GordonBuilder;
+-		 GeomFill_GordonBuilder();
+-
+-		/****** GeomFill_GordonBuilder::GuideSurface ******/
+-		/****** md5 signature: f7188aa3d7330d2975199a54b7a0e3ff ******/
+-		%feature("compactdefaultargs") GuideSurface;
+-		%feature("autodoc", "Return
+--------
+-opencascade::handle<Geom_BSplineSurface>
+-
+-Description
+------------
+-Returns the intermediate surface skinned through guides.
+-") GuideSurface;
+-		const opencascade::handle<Geom_BSplineSurface> & GuideSurface();
+-
+-		/****** GeomFill_GordonBuilder::Init ******/
+-		/****** md5 signature: cf6c78e4bb888a09ebec543dbd8e0ccb ******/
+-		%feature("compactdefaultargs") Init;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theProfiles: TColGeom_Array1OfBSplineCurve
+-theGuides: TColGeom_Array1OfBSplineCurve
+-theProfileParams: TColStd_Array1OfReal
+-theGuideParams: TColStd_Array1OfReal
+-theTolerance: double
+-theIsUClosed: bool (optional, default to false)
+-theIsVClosed: bool (optional, default to false)
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Initializes the builder with compatible BSpline curves and intersection parameters. 
+-Input parameter: theProfiles array of profile curves (V-direction sections), must share  the same degree and knot vector 
+-Input parameter: theGuides array of guide curves (U-direction sections), must share  the same degree and knot vector 
+-Input parameter: theProfileParams parameter values at which profiles are positioned  (in V-direction), size must equal theProfiles.Length() 
+-Input parameter: theGuideParams parameter values at which guides are positioned  (in U-direction), size must equal theGuides.Length() 
+-Input parameter: theTolerance geometric tolerance for validation 
+-Input parameter: theIsUClosed if true, the U-direction (guides) forms a closed loop 
+-Input parameter: theIsVClosed if true, the V-direction (profiles) forms a closed loop.
+-") Init;
+-		void Init(const TColGeom_Array1OfBSplineCurve & theProfiles, const TColGeom_Array1OfBSplineCurve & theGuides, const TColStd_Array1OfReal & theProfileParams, const TColStd_Array1OfReal & theGuideParams, double theTolerance, bool theIsUClosed = false, bool theIsVClosed = false);
+-
+-		/****** GeomFill_GordonBuilder::IsDone ******/
+-		/****** md5 signature: 05e29e49040d98b489fbc7af11aabb8e ******/
+-		%feature("compactdefaultargs") IsDone;
+-		%feature("autodoc", "Return
+--------
+-bool
+-
+-Description
+------------
+-Returns true if the surface was successfully constructed.
+-") IsDone;
+-		bool IsDone();
+-
+-		/****** GeomFill_GordonBuilder::IsParallelMode ******/
+-		/****** md5 signature: 8f26eb5f23a1592f8117f2bf9193e47d ******/
+-		%feature("compactdefaultargs") IsParallelMode;
+-		%feature("autodoc", "Return
+--------
+-bool
+-
+-Description
+------------
+-Returns true if internal parallel processing is enabled.
+-") IsParallelMode;
+-		bool IsParallelMode();
+-
+-		/****** GeomFill_GordonBuilder::Perform ******/
+-		/****** md5 signature: c04b01412cba7220c024b5eb4532697f ******/
+-		%feature("compactdefaultargs") Perform;
+-		%feature("autodoc", "Return
+--------
+-None
+-
+-Description
+------------
+-Performs the Gordon surface construction.
+-") Perform;
+-		void Perform();
+-
+-		/****** GeomFill_GordonBuilder::ProfileSurface ******/
+-		/****** md5 signature: 7fd4d3d18e51b899c482734ee0a7b127 ******/
+-		%feature("compactdefaultargs") ProfileSurface;
+-		%feature("autodoc", "Return
+--------
+-opencascade::handle<Geom_BSplineSurface>
+-
+-Description
+------------
+-Returns the intermediate surface skinned through profiles.
+-") ProfileSurface;
+-		const opencascade::handle<Geom_BSplineSurface> & ProfileSurface();
+-
+-		/****** GeomFill_GordonBuilder::SetParallelMode ******/
+-		/****** md5 signature: dfd8184bddd5dc09e9a96572f87e3ce5 ******/
+-		%feature("compactdefaultargs") SetParallelMode;
+-		%feature("autodoc", "
+-Parameters
+-----------
+-theToUseParallel: bool
+-
+-Return
+--------
+-None
+-
+-Description
+------------
+-Enables/disables parallel processing in internal stages. By default, single-thread mode is used.
+-") SetParallelMode;
+-		void SetParallelMode(bool theToUseParallel);
+-
+-		/****** GeomFill_GordonBuilder::Surface ******/
+-		/****** md5 signature: 671a5de971e9a6baf08b4e111daa768f ******/
+-		%feature("compactdefaultargs") Surface;
+-		%feature("autodoc", "Return
+--------
+-opencascade::handle<Geom_BSplineSurface>
+-
+-Description
+------------
+-Returns the resulting Gordon surface. 
+-Return: handle to the constructed B-spline surface.
+-") Surface;
+-		const opencascade::handle<Geom_BSplineSurface> & Surface();
+-
+-		/****** GeomFill_GordonBuilder::TensorSurface ******/
+-		/****** md5 signature: eb73bf4ca862fd8c7260a69831a03769 ******/
+-		%feature("compactdefaultargs") TensorSurface;
+-		%feature("autodoc", "Return
+--------
+-opencascade::handle<Geom_BSplineSurface>
+-
+-Description
+------------
+-Returns the intermediate tensor product surface.
+-") TensorSurface;
+-		const opencascade::handle<Geom_BSplineSurface> & TensorSurface();
+-
+-};
+-
+-
+-%extend GeomFill_GordonBuilder {
+-	%pythoncode {
+-	__repr__ = _dumps_object
+-	}
+-};
++/*  end of remove GeomFill_GordonBuilder  */
+ 
+ /**********************
+ * class GeomFill_Line *
diff --git a/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_GeomFill.pyi b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_GeomFill.pyi
new file mode 100644
index 000000000000..5b6f457f1b93
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_GeomFill.pyi
@@ -0,0 +1,18 @@
+--- src/SWIG_files/wrapper/GeomFill.pyi.orig	2026-08-04 19:52:44 UTC
++++ src/SWIG_files/wrapper/GeomFill.pyi
+@@ -397,6 +397,7 @@ class GeomFill_Gordon:
+     def SetParallelMode(self, theToUseParallel: bool) -> None: ...
+     def Surface(self) -> Geom_BSplineSurface: ...
+ 
++"""
+ class GeomFill_GordonBuilder:
+     def __init__(self) -> None: ...
+     def GuideSurface(self) -> Geom_BSplineSurface: ...
+@@ -408,6 +409,7 @@ class GeomFill_GordonBuilder:
+     def SetParallelMode(self, theToUseParallel: bool) -> None: ...
+     def Surface(self) -> Geom_BSplineSurface: ...
+     def TensorSurface(self) -> Geom_BSplineSurface: ...
++"""
+ 
+ class GeomFill_Line(Standard_Transient):
+     @overload
diff --git a/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_TCollection.i b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_TCollection.i
new file mode 100644
index 000000000000..dd887ca42b3f
--- /dev/null
+++ b/cad/pythonocc-core/files/patch-src_SWIG__files_wrapper_TCollection.i
@@ -0,0 +1,2485 @@
+--- src/SWIG_files/wrapper/TCollection.i.orig	2026-08-06 17:42:37 UTC
++++ src/SWIG_files/wrapper/TCollection.i
+@@ -141,7 +141,7 @@ -----------
+ 
+ Description
+ -----------
+-Initializes a AsciiString with a string_view. 
++Initializes a AsciiString with a string_view.
+ Input parameter: theStringView the string view to initialize from.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(const std::string_view & theStringView);
+@@ -160,7 +160,7 @@ -----------
+ 
+ Description
+ -----------
+-Initializes a AsciiString with a CString (null-terminated). 
++Initializes a AsciiString with a CString (null-terminated).
+ Input parameter: theMessage the C string to initialize from.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(const char * const theMessage);
+@@ -180,8 +180,8 @@ -----------
+ 
+ Description
+ -----------
+-Initializes a AsciiString with a CString and explicit length. 
+-Input parameter: theMessage the C string to initialize from 
++Initializes a AsciiString with a CString and explicit length.
++Input parameter: theMessage the C string to initialize from
+ Input parameter: theLength the length of the string.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(const char * const theMessage, const int theLength);
+@@ -200,7 +200,7 @@ -----------
+ 
+ Description
+ -----------
+-Initializes a AsciiString with a single character. 
++Initializes a AsciiString with a single character.
+ Input parameter: theChar the character to initialize from.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(const char theChar);
+@@ -220,8 +220,8 @@ -----------
+ 
+ Description
+ -----------
+-Initializes an AsciiString with specified length space allocated and filled with filler character. This is useful for buffers. 
+-Input parameter: theLength the length to allocate 
++Initializes an AsciiString with specified length space allocated and filled with filler character. This is useful for buffers.
++Input parameter: theLength the length to allocate
+ Input parameter: theFiller the character to fill with.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(const int theLength, const char theFiller);
+@@ -240,7 +240,7 @@ -----------
+ 
+ Description
+ -----------
+-Initializes an AsciiString with an integer value 
++Initializes an AsciiString with an integer value
+ Input parameter: theValue the integer value to convert to string.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(const int theValue);
+@@ -259,7 +259,7 @@ -----------
+ 
+ Description
+ -----------
+-Initializes an AsciiString with a real value 
++Initializes an AsciiString with a real value
+ Input parameter: theValue the real value to convert to string.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(const double theValue);
+@@ -278,7 +278,7 @@ -----------
+ 
+ Description
+ -----------
+-Initializes a AsciiString with another AsciiString. 
++Initializes a AsciiString with another AsciiString.
+ Input parameter: theString the string to copy from.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(TCollection_AsciiString theString);
+@@ -297,7 +297,7 @@ -----------
+ 
+ Description
+ -----------
+-Move constructor 
++Move constructor
+ Input parameter: theOther the string to move from.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(TCollection_AsciiString & theOther);
+@@ -317,8 +317,8 @@ -----------
+ 
+ Description
+ -----------
+-Initializes a AsciiString with copy of another AsciiString concatenated with the message character. 
+-Input parameter: theString the string to copy 
++Initializes a AsciiString with copy of another AsciiString concatenated with the message character.
++Input parameter: theString the string to copy
+ Input parameter: theChar the character to append.
+ ") TCollection_AsciiString;
+ 		 TCollection_AsciiString(TCollection_AsciiString theString, const char theChar);
+@@ -338,8 +338,8 @@ -----------
+ 
*** 3395 LINES SKIPPED ***
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.