aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Victorovich <yuri@FreeBSD.org>2024-04-04 07:29:20 +0000
committerYuri Victorovich <yuri@FreeBSD.org>2024-04-04 08:05:05 +0000
commit228664f500b999a301ef1b271ea9f35f91288fbe (patch)
tree4ba37903ecf0fe07ddff244c9e316fe0b1b1f070
parent80504eeb6042fcd6174b84e75c6dc4a9d67c583e (diff)
downloadports-228664f500b999a301ef1b271ea9f35f91288fbe.tar.gz
ports-228664f500b999a301ef1b271ea9f35f91288fbe.zip
graphics/{,py-}f3d: update 2.3.1 → 2.4.0
Reported by: portscout
-rw-r--r--graphics/f3d/Makefile8
-rw-r--r--graphics/f3d/distinfo6
-rw-r--r--graphics/f3d/files/patch-external_dmon_dmon.h20
-rw-r--r--graphics/f3d/files/patch-plugins_occt_CMakeLists.txt35
-rw-r--r--graphics/f3d/files/patch-plugins_occt_module_vtkF3DOCCTReader.cxx381
-rw-r--r--graphics/f3d/pkg-plist34
-rw-r--r--graphics/py-f3d/Makefile2
-rw-r--r--graphics/py-f3d/distinfo6
8 files changed, 52 insertions, 440 deletions
diff --git a/graphics/f3d/Makefile b/graphics/f3d/Makefile
index c2cdec098793..bf3fc902170a 100644
--- a/graphics/f3d/Makefile
+++ b/graphics/f3d/Makefile
@@ -1,6 +1,6 @@
PORTNAME= f3d
DISTVERSIONPREFIX= v
-DISTVERSION= 2.3.1
+DISTVERSION= 2.4.0
CATEGORIES= graphics
MAINTAINER= yuri@FreeBSD.org
@@ -16,12 +16,14 @@ LIB_DEPENDS= libavcodec.so:multimedia/ffmpeg4 \
libfreetype.so:print/freetype2 \
libhdf5.so:science/hdf5 \
libImath-3_1.so:math/Imath \
+ libinotify.so:devel/libinotify \
libnetcdf.so:science/netcdf \
+ libtbb.so:devel/onetbb \
libvtkCommonMisc-${VTK_VER}.so:math/vtk${VTK_VER:R}
USES= cmake:testing compiler:c++17-lang desktop-file-utils gl \
shared-mime-info tcl tk xorg
-USE_GL= gl glu
+USE_GL= gl
USE_XORG= ice sm x11 xt
USE_LDCONFIG= yes
@@ -31,6 +33,8 @@ GH_ACCOUNT= f3d-app
CMAKE_OFF= F3D_STRICT_BUILD # disable -Werror
CMAKE_OFF+= F3D_LINUX_APPLICATION_LINK_FILESYSTEM
+LDFLAGS+= -linotify
+
# dependency descroptions are in https://f3d.app/doc/dev/BUILD.html
OPTIONS_GROUP= MODULES PLUGINS
OPTIONS_GROUP_MODULES= EXTERNAL_RENDERING RAYTRACING
diff --git a/graphics/f3d/distinfo b/graphics/f3d/distinfo
index 43031ac59e5d..abcfe7d9c4ad 100644
--- a/graphics/f3d/distinfo
+++ b/graphics/f3d/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1711990779
-SHA256 (f3d-app-f3d-v2.3.1_GH0.tar.gz) = e6ada89851cd27c84117b5b73dd69475fa7442f05e1dbf2fa76e1dc34d2c0006
-SIZE (f3d-app-f3d-v2.3.1_GH0.tar.gz) = 40726219
+TIMESTAMP = 1712209039
+SHA256 (f3d-app-f3d-v2.4.0_GH0.tar.gz) = 3286ad1b324b995fd95818679b4ced80ebc3cc3b4bd4c8e6964695c05c934c8f
+SIZE (f3d-app-f3d-v2.4.0_GH0.tar.gz) = 44886935
diff --git a/graphics/f3d/files/patch-external_dmon_dmon.h b/graphics/f3d/files/patch-external_dmon_dmon.h
new file mode 100644
index 000000000000..d6239980cb57
--- /dev/null
+++ b/graphics/f3d/files/patch-external_dmon_dmon.h
@@ -0,0 +1,20 @@
+--- external/dmon/dmon.h.orig 2024-04-03 12:42:33 UTC
++++ external/dmon/dmon.h
+@@ -137,7 +137,7 @@ DMON_API_DECL void dmon_unwatch(dmon_watch_id id);
+ #if defined(_WIN32) || defined(_WIN64)
+ # undef DMON_OS_WINDOWS
+ # define DMON_OS_WINDOWS 1
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ # undef DMON_OS_LINUX
+ # define DMON_OS_LINUX 1
+ #elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
+@@ -167,7 +167,7 @@ DMON_API_DECL void dmon_unwatch(dmon_watch_id id);
+ # include <dirent.h>
+ # include <errno.h>
+ # include <fcntl.h>
+-# include <linux/limits.h>
++//# include <linux/limits.h>
+ # include <pthread.h>
+ # include <sys/inotify.h>
+ # include <sys/stat.h>
diff --git a/graphics/f3d/files/patch-plugins_occt_CMakeLists.txt b/graphics/f3d/files/patch-plugins_occt_CMakeLists.txt
deleted file mode 100644
index 922c86cde9d6..000000000000
--- a/graphics/f3d/files/patch-plugins_occt_CMakeLists.txt
+++ /dev/null
@@ -1,35 +0,0 @@
---- plugins/occt/CMakeLists.txt.orig 2024-01-21 15:29:01 UTC
-+++ plugins/occt/CMakeLists.txt
-@@ -17,18 +17,30 @@ endif()
- message(FATAL_ERROR "Plugin: OpenCASCADE: ${OpenCASCADE_VERSION} is not supported by F3D, please update your OpenCASCADE installation.")
- endif()
-
--if((NOT TARGET "TKSTEP") AND (NOT TARGET "TKIGES") AND (NOT TARGET "TKMesh"))
-+if("${OpenCASCADE_VERSION}" VERSION_LESS "7.8.0")
-+ if((NOT TARGET "TKSTEP") AND (NOT TARGET "TKIGES") AND (NOT TARGET "TKMesh"))
- message(FATAL_ERROR "Plugin: OpenCASCADE does not contain required modules")
-+ endif()
- endif()
-
-+if((NOT TARGET "TKDESTEP") AND (NOT TARGET "TKDEIGES") AND (NOT TARGET "TKMesh"))
-+ message(FATAL_ERROR "Plugin: OpenCASCADE does not contain required modules")
-+endif()
-+
- message(STATUS "Plugin: OpenCASCADE ${OpenCASCADE_VERSION} found")
-
- option(F3D_PLUGIN_OCCT_COLORING_SUPPORT "Enable coloring support in occt plugin" ON)
- mark_as_advanced(F3D_PLUGIN_OCCT_COLORING_SUPPORT)
-
- if(F3D_PLUGIN_OCCT_COLORING_SUPPORT)
-- if (NOT (TARGET "TKXDESTEP") OR NOT (TARGET "TKXDEIGES"))
-+ if("${OpenCASCADE_VERSION}" VERSION_LESS "7.8.0")
-+ if (NOT (TARGET "TKXDESTEP") OR NOT (TARGET "TKXDEIGES"))
- message(FATAL_ERROR "occt plugin: TKXDESTEP and TKXDEIGES OCCT modules are not found. Turn off F3D_PLUGIN_OCCT_COLORING_SUPPORT or enable them in your OpenCascade build.")
-+ endif()
-+ else()
-+ if (NOT (TARGET "TKXSDRAWSTEP") OR NOT (TARGET "TKXSDRAWIGES"))
-+ message(FATAL_ERROR "occt plugin: TKXSDRAWSTEP and TKXSDRAWIGES OCCT modules are not found. Turn off F3D_PLUGIN_OCCT_COLORING_SUPPORT or enable them in your OpenCascade build.")
-+ endif()
- endif()
- endif()
-
diff --git a/graphics/f3d/files/patch-plugins_occt_module_vtkF3DOCCTReader.cxx b/graphics/f3d/files/patch-plugins_occt_module_vtkF3DOCCTReader.cxx
deleted file mode 100644
index 270c6e9fd49b..000000000000
--- a/graphics/f3d/files/patch-plugins_occt_module_vtkF3DOCCTReader.cxx
+++ /dev/null
@@ -1,381 +0,0 @@
---- plugins/occt/module/vtkF3DOCCTReader.cxx.orig 2024-01-21 15:29:01 UTC
-+++ plugins/occt/module/vtkF3DOCCTReader.cxx
-@@ -31,14 +31,17 @@
- #if F3D_PLUGIN_OCCT_XCAF
- #include <IGESCAFControl_Reader.hxx>
- #include <STEPCAFControl_Reader.hxx>
-+#include <Standard_Version.hxx>
- #include <TDF_ChildIterator.hxx>
- #include <TDataStd_Name.hxx>
- #include <TDocStd_Document.hxx>
- #include <XCAFApp_Application.hxx>
--#include <XCAFDoc_ColorTool.hxx>
- #include <XCAFDoc_DocumentTool.hxx>
- #include <XCAFDoc_Location.hxx>
- #include <XCAFDoc_ShapeTool.hxx>
-+#include <XCAFPrs.hxx>
-+#include <XCAFPrs_IndexedDataMapOfShapeStyle.hxx>
-+#include <XCAFPrs_Style.hxx>
- #endif
-
- #if defined(__GNUC__)
-@@ -71,6 +74,10 @@ class vtkF3DOCCTReader::vtkInternals
-
- class vtkF3DOCCTReader::vtkInternals
- {
-+#if F3D_PLUGIN_OCCT_XCAF
-+ using StyleMap = XCAFPrs_IndexedDataMapOfShapeStyle;
-+#endif
-+
- public:
- //----------------------------------------------------------------------------
- explicit vtkInternals(vtkF3DOCCTReader* parent)
-@@ -79,7 +86,11 @@ class vtkF3DOCCTReader::vtkInternals
- }
-
- //----------------------------------------------------------------------------
-+#if F3D_PLUGIN_OCCT_XCAF
-+ vtkSmartPointer<vtkPolyData> CreateShape(const TopoDS_Shape& shape, const TDF_Label& label)
-+#else
- vtkSmartPointer<vtkPolyData> CreateShape(const TopoDS_Shape& shape)
-+#endif
- {
- vtkNew<vtkPoints> points;
- vtkNew<vtkFloatArray> normals;
-@@ -88,32 +99,49 @@ class vtkF3DOCCTReader::vtkInternals
- vtkNew<vtkFloatArray> uvs;
- uvs->SetNumberOfComponents(2);
- uvs->SetName("UV");
-+#if F3D_PLUGIN_OCCT_XCAF
- vtkNew<vtkUnsignedCharArray> colors;
- colors->SetNumberOfComponents(3);
- colors->SetName("Colors");
-+#endif
- vtkNew<vtkCellArray> trianglesCells;
- vtkNew<vtkCellArray> linesCells;
-
- Standard_Integer shift = 0;
-
-+#if F3D_PLUGIN_OCCT_XCAF
-+ const StyleMap inheritedStyles = this->CollectInheritedStyles(label, shape);
-+#endif
-+
-+ /* Mesh the whole shape. This only affect faces, edges have to be handled separately. */
-+ BRepMesh_IncrementalMesh(shape, this->Parent->GetLinearDeflection(),
-+ this->Parent->GetRelativeDeflection(), this->Parent->GetAngularDeflection(), Standard_True);
-+
- if (this->Parent->GetReadWire())
- {
-- // Add all edges to polydata
-- for (TopExp_Explorer exEdge(shape, TopAbs_EDGE); exEdge.More(); exEdge.Next())
-+ std::vector<TopoDS_Edge> edges;
- {
-- TopoDS_Edge edge = TopoDS::Edge(exEdge.Current());
-+ /* add all edges to a compound to remesh them all at once */
-+ TopoDS_Builder builder;
-+ TopoDS_Compound compound;
-+ builder.MakeCompound(compound);
-+ for (TopExp_Explorer exEdge(shape, TopAbs_EDGE); exEdge.More(); exEdge.Next())
-+ {
-+ const TopoDS_Edge edge = TopoDS::Edge(exEdge.Current());
-+ builder.Add(compound, edge);
-+ edges.push_back(edge);
-+ }
-+ BRepMesh_IncrementalMesh(compound, this->Parent->GetLinearDeflection(),
-+ this->Parent->GetRelativeDeflection(), this->Parent->GetAngularDeflection(),
-+ Standard_True);
-+ }
-
-+ // Add all edges to polydata
-+ for (const TopoDS_Edge& edge : edges)
-+ {
- TopLoc_Location location;
- const auto& poly = BRep_Tool::Polygon3D(edge, location);
-
-- if (poly.IsNull() || poly->Nodes().Length() <= 0)
-- {
-- // meshing
-- BRepMesh_IncrementalMesh(edge, this->Parent->GetLinearDeflection(),
-- this->Parent->GetRelativeDeflection(), this->Parent->GetAngularDeflection(),
-- Standard_True);
-- }
--
- if (poly.IsNull())
- {
- continue;
-@@ -134,23 +162,29 @@ class vtkF3DOCCTReader::vtkInternals
- uvs->InsertNextTypedTuple(fn);
- }
-
-- std::vector<vtkIdType> polyline(nbV - 1);
-+ std::vector<vtkIdType> polyline(nbV);
- std::iota(polyline.begin(), polyline.end(), shift);
- linesCells->InsertNextCell(polyline.size(), polyline.data());
-
- #if F3D_PLUGIN_OCCT_XCAF
-- if (this->ColorTool)
-+ std::array<unsigned char, 3> rgb = { 0, 0, 0 };
-+ try
- {
-- std::array<unsigned char, 3> rgb = { 0, 0, 0 };
-- Quantity_Color aColor;
-- if (this->ColorTool->GetColor(edge, XCAFDoc_ColorCurv, aColor))
-+ const auto& style = inheritedStyles.FindFromKey(edge);
-+ if (style.IsSetColorCurv())
- {
-- rgb[0] = static_cast<unsigned char>(255.0 * aColor.Red());
-- rgb[1] = static_cast<unsigned char>(255.0 * aColor.Green());
-- rgb[2] = static_cast<unsigned char>(255.0 * aColor.Blue());
-+ Quantity_Color color = style.GetColorCurv();
-+ rgb[0] = static_cast<unsigned char>(255.0 * color.Red());
-+ rgb[1] = static_cast<unsigned char>(255.0 * color.Green());
-+ rgb[2] = static_cast<unsigned char>(255.0 * color.Blue());
- }
-- colors->InsertNextTypedTuple(rgb.data());
- }
-+ catch (Standard_NoSuchObject&)
-+ {
-+ /* edge has no style, safe to ignore */
-+ }
-+
-+ colors->InsertNextTypedTuple(rgb.data());
- #endif
-
- shift += nbV;
-@@ -165,14 +199,6 @@ class vtkF3DOCCTReader::vtkInternals
- TopLoc_Location location;
- const auto& poly = BRep_Tool::Triangulation(face, location);
-
-- if (poly.IsNull() || poly->NbTriangles() <= 0)
-- {
-- // meshing
-- BRepMesh_IncrementalMesh(face, this->Parent->GetLinearDeflection(),
-- this->Parent->GetRelativeDeflection(), this->Parent->GetAngularDeflection(),
-- Standard_True);
-- }
--
- if (poly.IsNull())
- {
- continue;
-@@ -243,23 +269,32 @@ class vtkF3DOCCTReader::vtkInternals
- std::swap(cell[0], cell[2]);
- }
- trianglesCells->InsertNextCell(3, cell);
-+ }
-
- #if F3D_PLUGIN_OCCT_XCAF
-- if (this->ColorTool)
-+ std::array<unsigned char, 3> rgb = { 255, 255, 255 };
-+ try
-+ {
-+ const auto& style = inheritedStyles.FindFromKey(face);
-+ if (style.IsSetColorSurf())
- {
-- std::array<unsigned char, 3> rgb = { 255, 255, 255 };
-- Quantity_Color aColor;
-- if (this->ColorTool->GetColor(face, XCAFDoc_ColorSurf, aColor))
-- {
-- rgb[0] = static_cast<unsigned char>(255.0 * aColor.Red());
-- rgb[1] = static_cast<unsigned char>(255.0 * aColor.Green());
-- rgb[2] = static_cast<unsigned char>(255.0 * aColor.Blue());
-- }
-- colors->InsertNextTypedTuple(rgb.data());
-+ Quantity_Color color = style.GetColorSurf();
-+ rgb[0] = static_cast<unsigned char>(255.0 * color.Red());
-+ rgb[1] = static_cast<unsigned char>(255.0 * color.Green());
-+ rgb[2] = static_cast<unsigned char>(255.0 * color.Blue());
- }
--#endif
- }
-+ catch (Standard_NoSuchObject&)
-+ {
-+ /* face has no style, safe to ignore */
-+ }
-
-+ for (int i = 1; i <= nbT; i++)
-+ {
-+ colors->InsertNextTypedTuple(rgb.data());
-+ }
-+#endif
-+
- shift += nbV;
- }
-
-@@ -271,11 +306,7 @@ class vtkF3DOCCTReader::vtkInternals
- polydata->SetLines(linesCells);
-
- #if F3D_PLUGIN_OCCT_XCAF
-- /* colors may be left empty if this->ColorTool has not been initialized */
-- if (colors->GetSize() > 0)
-- {
-- polydata->GetCellData()->SetScalars(colors);
-- }
-+ polydata->GetCellData()->SetScalars(colors);
- #endif
-
- polydata->Squeeze();
-@@ -283,7 +314,99 @@ class vtkF3DOCCTReader::vtkInternals
- }
-
- #if F3D_PLUGIN_OCCT_XCAF
-+ StyleMap CollectInheritedStyles(const TDF_Label& rootLabel, const TopoDS_Shape& rootShape)
-+ {
-+ StyleMap inheritedStyles;
-+
-+ if (rootLabel.IsNull())
-+ {
-+ return inheritedStyles;
-+ }
-+
-+ /* collect styled shapes from the document */
-+ StyleMap collectedStyles;
-+ XCAFPrs::CollectStyleSettings(rootLabel, TopLoc_Location(), collectedStyles);
-+
-+ /* iterate styled shapes and collect sorted by ascending shape type depth */
-+ const auto cmp = [](const TopoDS_Shape& a, const TopoDS_Shape& b)
-+ { return a.ShapeType() > b.ShapeType(); };
-+ std::multimap<TopoDS_Shape, XCAFPrs_Style, decltype(cmp)> styledShapes(cmp);
-+
-+ const TopAbs_ShapeEnum leafType = this->Parent->GetReadWire() ? TopAbs_EDGE : TopAbs_FACE;
-+ for (StyleMap::Iterator iter(collectedStyles); iter.More(); iter.Next())
-+ {
-+ const TopoDS_Shape& shape = iter.Key();
-+ if (shape.ShapeType() <= leafType)
-+ {
-+ styledShapes.insert({ shape, iter.Value() });
-+ }
-+ }
-+
-+ /* pass down each parent style props to descendent edge/face leaves */
-+ const auto passDownToLeaves = [&](TopAbs_ShapeEnum type)
-+ {
-+ for (const auto& styledShape : styledShapes)
-+ {
-+ for (TopExp_Explorer iter(styledShape.first, type); iter.More(); iter.Next())
-+ {
-+ try
-+ {
-+ this->PassDownStyleProps(
-+ styledShape.second, inheritedStyles.ChangeFromKey(iter.Current()));
-+ }
-+ catch (Standard_NoSuchObject&)
-+ {
-+ inheritedStyles.Add(iter.Current(), styledShape.second);
-+ }
-+ }
-+ }
-+ };
-+
-+ passDownToLeaves(TopAbs_FACE);
-+
-+ if (this->Parent->GetReadWire())
-+ {
-+ passDownToLeaves(TopAbs_EDGE);
-+ }
-+
-+ /* pass down default style (if any) to all leaves */
-+ try
-+ {
-+ const XCAFPrs_Style& defaultStyle = collectedStyles.FindFromKey(rootShape);
-+ for (StyleMap::Iterator iter(inheritedStyles); iter.More(); iter.Next())
-+ {
-+ XCAFPrs_Style style = iter.Value();
-+ this->PassDownStyleProps(defaultStyle, style);
-+ }
-+ }
-+ catch (Standard_NoSuchObject&)
-+ {
-+ /* root shape has no style, safe to ignore */
-+ }
-+
-+ return inheritedStyles;
-+ }
-+
- //----------------------------------------------------------------------------
-+ void PassDownStyleProps(const XCAFPrs_Style& parent, XCAFPrs_Style& child)
-+ {
-+ if (!child.IsSetColorCurv() && parent.IsSetColorCurv())
-+ {
-+ child.SetColorCurv(parent.GetColorCurv());
-+ }
-+
-+ if (!child.IsSetColorSurf() && parent.IsSetColorSurf())
-+ {
-+ child.SetColorSurf(parent.GetColorSurfRGBA());
-+ }
-+
-+ if (child.Material().IsNull() && !parent.Material().IsNull())
-+ {
-+ child.SetMaterial(parent.Material());
-+ }
-+ };
-+
-+ //----------------------------------------------------------------------------
- void AddLabel(const TDF_Label& label, vtkMatrix4x4* position, vtkMultiBlockDataSet* mb)
- {
- if (this->ShapeTool->IsSimpleShape(label) && this->ShapeTool->IsTopLevel(label))
-@@ -365,7 +488,11 @@ class vtkF3DOCCTReader::vtkInternals
- int GetHash(const TDF_Label& label)
- {
- TopoDS_Shape aShape;
-+#if OCC_VERSION_HEX < 0x070800
- return this->ShapeTool->GetShape(label, aShape) ? aShape.HashCode(INT_MAX) : 0;
-+#else
-+ return this->ShapeTool->GetShape(label, aShape) ? std::hash<TopoDS_Shape>{}(aShape) : 0;
-+#endif
- }
-
- //----------------------------------------------------------------------------
-@@ -401,7 +528,6 @@ class vtkF3DOCCTReader::vtkInternals
-
- std::unordered_map<int, vtkSmartPointer<vtkPolyData> > ShapeMap;
- Handle(XCAFDoc_ShapeTool) ShapeTool;
-- Handle(XCAFDoc_ColorTool) ColorTool;
- #endif
-
- vtkF3DOCCTReader* Parent;
-@@ -424,7 +550,10 @@ class ProgressIndicator : public Message_ProgressIndic
- class ProgressIndicator : public Message_ProgressIndicator
- {
- public:
-- explicit ProgressIndicator(vtkF3DOCCTReader* reader) { this->Reader = reader; }
-+ explicit ProgressIndicator(vtkF3DOCCTReader* reader)
-+ {
-+ this->Reader = reader;
-+ }
-
- protected:
- void Show(const Message_ProgressScope&, const Standard_Boolean) override
-@@ -493,7 +622,12 @@ int vtkF3DOCCTReader::RequestData(
- if (success)
- {
- output->SetNumberOfBlocks(1);
-+#if F3D_PLUGIN_OCCT_XCAF
-+ const vtkSmartPointer<vtkPolyData> polydata =
-+ this->Internals->CreateShape(shape, TDF_Label());
-+#else
- const vtkSmartPointer<vtkPolyData> polydata = this->Internals->CreateShape(shape);
-+#endif
- if (polydata && polydata->GetNumberOfCells() > 0)
- {
- output->SetBlock(1, polydata);
-@@ -522,7 +656,6 @@ int vtkF3DOCCTReader::RequestData(
- }
-
- this->Internals->ShapeTool = XCAFDoc_DocumentTool::ShapeTool(doc->Main());
-- this->Internals->ColorTool = XCAFDoc_DocumentTool::ColorTool(doc->Main());
-
- TDF_LabelSequence topLevelShapes;
-
-@@ -537,9 +670,9 @@ int vtkF3DOCCTReader::RequestData(
- this->Internals->ShapeTool->GetShape(label, shape);
-
- this->Internals->ShapeMap[this->Internals->GetHash(label)] =
-- this->Internals->CreateShape(shape);
-+ this->Internals->CreateShape(shape, label);
-
-- double progress = 0.5 + static_cast<double>(iLabel) / topLevelShapes.Length();
-+ double progress = 0.5 + (static_cast<double>(iLabel) / topLevelShapes.Length()) / 2;
- this->InvokeEvent(vtkCommand::ProgressEvent, &progress);
- }
-
diff --git a/graphics/f3d/pkg-plist b/graphics/f3d/pkg-plist
index adc827863ddd..cfd02f534d6f 100644
--- a/graphics/f3d/pkg-plist
+++ b/graphics/f3d/pkg-plist
@@ -26,28 +26,32 @@ include/f3d/plugin.h
include/f3d/reader.h
include/f3d/types.h
include/f3d/utils.h
+include/f3d/vtkF3DFaceVaryingPointDispatcher.h
+include/f3d/vtkextModule.h
include/f3d/window.h
+lib/cmake/f3d/application-config.cmake
lib/cmake/f3d/f3dConfig.cmake
lib/cmake/f3d/f3dConfigVersion.cmake
lib/cmake/f3d/f3dEmbed.cmake
-lib/cmake/f3d/f3dPlugin.cmake
+lib/cmake/f3d/f3dLibraryTargets-%%CMAKE_BUILD_TYPE%%.cmake
+lib/cmake/f3d/f3dLibraryTargets.cmake
lib/cmake/f3d/f3dTargets-%%CMAKE_BUILD_TYPE%%.cmake
lib/cmake/f3d/f3dTargets.cmake
-lib/cmake/f3d/plugin.cxx.in
-lib/cmake/f3d/plugin.desktop.in
-lib/cmake/f3d/plugin.thumbnailer.in
-lib/cmake/f3d/readerBoilerPlate.h.in
-%%ALEMBIC%%lib/libVTKExtensionsAlembicReader.a
-lib/libVTKExtensionsApplicative.a
-%%ASSIMP%%lib/libVTKExtensionsAssimpReader.a
-lib/libVTKExtensionsCore.a
-%%DRACO%%lib/libVTKExtensionsDracoReader.a
-%%OCCT%%lib/libVTKExtensionsOCCTReader.a
-lib/libVTKExtensionsReaders.a
-lib/libVTKExtensionsRendering.a
+lib/cmake/f3d/library-config.cmake
+lib/cmake/f3d_vtkext/f3d_vtkext-targets-%%CMAKE_BUILD_TYPE%%.cmake
+lib/cmake/f3d_vtkext/f3d_vtkext-targets.cmake
+lib/cmake/f3d_vtkext/f3d_vtkext-vtk-module-properties.cmake
lib/libf3d.so
lib/libf3d.so.2
-lib/libf3d.so.2.3
+lib/libf3d.so.2.4
+lib/libvtkext.so
+lib/libvtkextAlembic.a
+lib/libvtkextAssimp.a
+lib/libvtkextDraco.a
+lib/libvtkextNative.a
+lib/libvtkextOCCT.a
+lib/libvtkextPrivate.a
+lib/vtk/hierarchy/f3d_vtkext/vtkext-hierarchy.txt
%%ALEMBIC%%share/applications/f3d-plugin-alembic.desktop
%%ASSIMP%%share/applications/f3d-plugin-assimp.desktop
%%DRACO%%share/applications/f3d-plugin-draco.desktop
@@ -70,12 +74,12 @@ share/icons/hicolor/48x48/apps/f3d.png
share/icons/hicolor/64x64/apps/f3d.png
share/icons/hicolor/scalable/apps/f3d.svg
share/metainfo/app.f3d.F3D.metainfo.xml
-%%EXODUS%%share/mime/packages/f3d-exodus-formats.xml
share/mime/packages/f3d-3d-formats.xml
share/mime/packages/f3d-3d-image-formats.xml
%%ALEMBIC%%share/mime/packages/f3d-alembic-formats.xml
%%ASSIMP%%share/mime/packages/f3d-assimp-formats.xml
%%DRACO%%share/mime/packages/f3d-draco-formats.xml
+%%EXODUS%%share/mime/packages/f3d-exodus-formats.xml
%%OCCT%%share/mime/packages/f3d-occt-formats.xml
share/mime/packages/f3d-vtk-formats.xml
%%ALEMBIC%%share/thumbnailers/f3d-plugin-alembic.thumbnailer
diff --git a/graphics/py-f3d/Makefile b/graphics/py-f3d/Makefile
index 4377719512ef..80f1b98e4d37 100644
--- a/graphics/py-f3d/Makefile
+++ b/graphics/py-f3d/Makefile
@@ -1,6 +1,6 @@
PORTNAME= f3d
DISTVERSIONPREFIX= v
-DISTVERSION= 2.3.1
+DISTVERSION= 2.4.0
CATEGORIES= graphics
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/graphics/py-f3d/distinfo b/graphics/py-f3d/distinfo
index be58a4847de1..c6533a6e941b 100644
--- a/graphics/py-f3d/distinfo
+++ b/graphics/py-f3d/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1712010259
-SHA256 (f3d-app-f3d-v2.3.1_GH0.tar.gz) = e6ada89851cd27c84117b5b73dd69475fa7442f05e1dbf2fa76e1dc34d2c0006
-SIZE (f3d-app-f3d-v2.3.1_GH0.tar.gz) = 40726219
+TIMESTAMP = 1712204626
+SHA256 (f3d-app-f3d-v2.4.0_GH0.tar.gz) = 3286ad1b324b995fd95818679b4ced80ebc3cc3b4bd4c8e6964695c05c934c8f
+SIZE (f3d-app-f3d-v2.4.0_GH0.tar.gz) = 44886935