Files
OCCT/samples/mfc/standard
Pasukhin Dmitry fe2595e21a Modeling - Refactor Evaluator classes to inline Utils and variant-based Adaptors (#935)
This commit completes the refactoring of geometry evaluator classes, replacing polymorphic Handle-based evaluators with inline template utilities and std::variant-based data storage in adaptor classes.

Key changes:

1. Removed GeomEvaluator and Geom2dEvaluator packages:
   - Deleted GeomEvaluator_Curve, GeomEvaluator_Surface base classes
   - Deleted GeomEvaluator_OffsetCurve, GeomEvaluator_OffsetSurface
   - Deleted GeomEvaluator_SurfaceOfExtrusion, GeomEvaluator_SurfaceOfRevolution
   - Deleted Geom2dEvaluator_Curve, Geom2dEvaluator_OffsetCurve

2. Added private utility headers (.pxx files) with inline template functions:
   - Geom_OffsetCurveUtils.pxx - offset curve evaluation
   - Geom_OffsetSurfaceUtils.pxx - offset surface evaluation
   - Geom_ExtrusionUtils.pxx - surface of extrusion evaluation
   - Geom_RevolutionUtils.pxx - surface of revolution evaluation
   - Geom2d_OffsetCurveUtils.pxx - 2D offset curve evaluation

3. Refactored GeomAdaptor_Curve:
   - Moved BezierData and BSplineData structs inside the class
   - Added std::variant<monostate, OffsetData, BezierData, BSplineData> for type-specific evaluation data
   - Removed separate myBSplineCurve and myCurveCache members
   - Updated all evaluation methods to use variant-based access

4. Refactored GeomAdaptor_Surface:
   - Changed ExtrusionData and RevolutionData to use Handle(Adaptor3d_Curve) instead of Handle(GeomAdaptor_Curve) for flexibility
   - Changed RevolutionData to store gp_Ax1 instead of separate AxisLoc/AxisDir
   - Updated OffsetData to store Handle(Geom_OffsetSurface) for osculating surface queries instead of creating new Geom_OsculatingSurface

5. Updated Geom_OsculatingSurface:
   - Renamed UOscSurf/VOscSurf methods to UOsculatingSurface/VOsculatingSurface for consistency with Geom_OffsetSurface public API

6. Fixed specialized adaptor classes:
   - GeomAdaptor_SurfaceOfLinearExtrusion - removed evaluator, uses variant
   - GeomAdaptor_SurfaceOfRevolution - removed evaluator, uses variant
   - Geom2dAdaptor_Curve - updated to use variant-based data
   - Adaptor2d_OffsetCurve - updated to use Geom2d_OffsetCurveUtils

7. Fixed Geom_SurfaceOfRevolution:
   - Updated utility calls to use gp_Ax1 parameter instead of separate XYZ

8. Added missing includes in dependent files:
   - Adaptor3d_HSurfaceTool.cxx - added GeomAdaptor_Curve.hxx
   - GeomAdaptor.cxx - added Adaptor3d_Surface.hxx, GeomAbs_SurfaceType.hxx
   - Extrema_GenExtPS.cxx - added Adaptor3d_Curve/Surface.hxx, GeomAbs_IsoType.hxx
   - TopOpeBRepTool_GEOMETRY.cxx - added Geom2dAdaptor_Curve.hxx
   - BRepAdaptor_Curve2d.cxx - updated ShallowCopy for variant

Benefits:
- Reduced virtual function call overhead in hot evaluation paths
- Better code locality with inline template functions
- Simplified class hierarchy without abstract evaluator base classes
- More efficient memory layout with variant instead of polymorphic handles
- Consistent method naming across related classes
2025-12-21 10:28:25 +00:00
..

MFC: OCCT Samples (C++|MFC)

Visual C++ programming samples for Windows platform containing illustrating how to use a particular module or functionality, including the following MFC samples:

  • Geometry
  • Modeling
  • ImportExport
  • HLR

@figure{samples_mvc.png}

  1. Contents

The directory samples/mfc/standard contains the following packages and files:

  • Numbered packages: 01_Geometry, 02_Modeling, etc. provide projects and sources of samples;
  • Files All-vc(number).sln are auxiliary utility projects depending on all other sample projects. When such project is rebuilt, all samples and mfcsample library are also rebuilt.
  • Common directory provides common source and header files for samples and dynamic-link library mfcsample.dll.
  • Data directory stores data files.
  • mfcsample directory contains project for mfcsample.dll library providing basic functionality used by all OCC samples.
  • File env.bat is called from msvc.bat.
  1. Launching Open CASCADE Technology samples:

To run the Open CASCADE Technology samples, use command:

execute run.bat [vc10|vc11|vc12|vc14] [win32|win64] [Release|Debug] [SampleName]

To run the Geometry sample, use command:

execute run.bat vc10 win64 Debug Geometry
  1. Modifying and rebuilding samples:

You can modify, compile and launch all sample projects in MS Visual C++ at once with command:

execute msvc.bat [vc10|vc11|vc12|vc14] [win32|win64] [Release|Debug]

To run all sample projects in MS Visual C++ at once, use command:

execute msvc.bat vc10 win64 Debug

Note: make sure that your PATH environment variable contains a directory, where msdev.exe is located.