MeshLib C++ Docs
Loading...
Searching...
No Matches
MROffsetContours.h
Go to the documentation of this file.
1#pragma once
2#include "MRMeshFwd.h"
3#include "MRConstants.h"
4#include "MRExpected.h"
5#include <functional>
6#include <string>
7
8namespace MR
9{
10
11struct OffsetContourIndex
12{
13 // -1 means unknown index
14 int contourId{ -1 };
15 // -1 means unknown index
16 int vertId{ -1 };
17 bool valid() const { return contourId >= 0 && vertId >= 0; }
18};
19
20struct OffsetContoursOrigins
21{
22 // Should be always valid
23 // index of lower corresponding origin point on input contour
24 OffsetContourIndex lOrg;
25 // index of lower corresponding destination point on input contour
26 OffsetContourIndex lDest;
27 // index of upper corresponding origin point on input contour
28 OffsetContourIndex uOrg;
29 // index of upper corresponding destination point on input contour
30 OffsetContourIndex uDest;
31
32 // ratio of intersection point on lOrg->lDest segment
33 // 0.0 -> lOrg
34 // 1.0 -> lDest
35 float lRatio{ 0.0f };
36 // ratio of intersection point on uOrg->uDest segment
37 // 0.0 -> uOrg
38 // 1.0 -> uDest
39 float uRatio{ 0.0f };
40
41 bool valid() const { return lOrg.valid(); }
42 bool isIntersection() const { return lDest.valid(); }
43};
44using OffsetContoursVertMap = std::vector<OffsetContoursOrigins>;
45using OffsetContoursVertMaps = std::vector<OffsetContoursVertMap>;
46
47struct OffsetContoursParams
48{
50 enum class Type
51 {
52 Offset,
53 Shell
54 } type{ Type::Offset };
55
57 enum class EndType
58 {
59 Round,
60 Cut
61 } endType{ EndType::Round };
62
64 enum class CornerType
65 {
66 Round,
67 Sharp
68 } cornerType{ CornerType::Round };
69
71 float minAnglePrecision = PI_F / 9.0f; // 20 deg
73 float maxSharpAngle = PI_F * 2.0f / 3.0f; // 120 deg
74
77};
78
80[[nodiscard]] MRMESH_API Contours2f offsetContours( const Contours2f& contours, float offset,
81 const OffsetContoursParams& params = {} );
82
83
84using ContoursVariableOffset = std::function<float( int, int )>;
86[[nodiscard]] MRMESH_API Contours2f offsetContours( const Contours2f& contours,
87 ContoursVariableOffset offset, const OffsetContoursParams& params = {} );
88
90struct OffsetContoursRestoreZParams
91{
94 using OriginZCallback = std::function<float( const Contours2f& offsetCont, const OffsetContourIndex& offsetIndex, const OffsetContoursOrigins& origingContourMapoing)>;
95 OriginZCallback zCallback;
97 int relaxIterations = 1;
98};
99
101[[nodiscard]] MRMESH_API Contours3f offsetContours( const Contours3f& contours, float offset,
102 const OffsetContoursParams& params = {}, const OffsetContoursRestoreZParams& zParmas = {} );
103
105[[nodiscard]] MRMESH_API Contours3f offsetContours( const Contours3f& contours,
106 ContoursVariableOffset offset, const OffsetContoursParams& params = {}, const OffsetContoursRestoreZParams& zParmas = {} );
107
108}
#define MRMESH_API
Definition MRMeshFwd.h:80
Definition MROffsetContours.h:48
new unsafe MR.Std.? Vector_StdVectorMROffsetContoursOrigins indicesMap
new unsafe ref int relaxIterations
Definition MRCameraOrientationPlugin.h:8
MRMESH_API Contours2f offsetContours(const Contours2f &contours, float offset, const OffsetContoursParams &params={})
offsets 2d contours in plane
OffsetContoursVertMaps