BIMHome v1.0.0
BIMHome接口文档说明
IDispersionCurve.h
浏览该文件的文档.
1/************************************************************************
2* @file IDispersionCurve.h
3*
4* @brief 离散算法抽象基类
5*
6* @details 离散算法抽象基类-- 通过固定长度,弦高,固定点数量离散曲线
7*
8* @author sunpeng
9*
10* @version 版本号 V0.1
11*
12* @date 2025-6-11
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef PLATFORMALGORITHM_INTERFACE_IDISPERSIONCURVE_H
19#define PLATFORMALGORITHM_INTERFACE_IDISPERSIONCURVE_H
20
21#include <BHGlobal.h>
22#include <string>
23#include <memory>
24#include <vector>
25
26#include "Base/Vector3D.h"
27
28namespace App {
29 class Document;
30 class IDocumentObject;
31}
32
33namespace Base {
34 class PolyLine;
35}
36
37namespace PlatformAlgorithm
38{
39 class PlatformAlgorithmEXPORTS IDispersionCurve
40 {
41 public:
42
43 //通过弦高
53 static std::shared_ptr<IDispersionCurve> dispersionByDeflection(App::IDocumentObject* pOriginalCurveObj, const double deflection, const double toler = -1, bool precision = false);
54
55 static std::shared_ptr<IDispersionCurve> dispersionByDeflection(Base::PolyLine bPolyline, const double deflection, const double toler = -1, bool precision = false);
56
57 //通过弦高和角度差
67 static std::shared_ptr<IDispersionCurve> dispersionByTangentialDeflection(App::IDocumentObject* pOriginalCurveObj, const double deflection, const double angular, const double toler = -1);
68
69 static std::shared_ptr<IDispersionCurve> dispersionByTangentialDeflection(Base::PolyLine bPolyline, const double deflection, const double angular, const double toler = -1);
70
71 //通过固定长度
81 static std::shared_ptr<IDispersionCurve> dispersionByLength(App::IDocumentObject* pOriginalCurveObj, const double unitLength, const double toler = -1, bool precision = false);
82
83 static std::shared_ptr<IDispersionCurve> dispersionByLength(Base::PolyLine bPolyline, const double unitLength, const double toler = -1, bool precision = false);
84
85 //通过点数量
95 static std::shared_ptr<IDispersionCurve> dispersionByNbPoints(App::IDocumentObject* pOriginalCurveObj, const int nbPoints, const double toler = -1, bool precision = false);
96
97 static std::shared_ptr<IDispersionCurve> dispersionByNbPoints(Base::PolyLine bPolyline, const int nbPoints, const double toler = -1, bool precision = false);
98
99
100
101 public:
102 //算法是否运算成功
103 virtual bool isDone() const = 0;
104
105 //返回点的个数
106 virtual int nbPoints() const = 0;
107
108 //返回某个点的U值
109 virtual double parameter(const int Index) const = 0;
110
111 //通过索引返回点
112 virtual Base::Vector3d value(const int Index) = 0;
113
114 //返回所有点
115 virtual std::vector<Base::Vector3d> points() = 0;
116
117 //返回某个点处的切线方向
118 virtual Base::Vector3d dir(const int Index) = 0;
119
120 //通过索引返回点和某个点处的方向
121 virtual std::pair<Base::Vector3d, Base::Vector3d> pointAndDir(const int Index) = 0;
122
123 //返回所有点和对应的方向
124 virtual std::vector<std::pair<Base::Vector3d, Base::Vector3d>> pointAndDirList() = 0;
125 };
126}
127
128#endif //PLATFORMALGORITHM_INTERFACE_IDISPERSIONCURVE_H
Definition IDocumentObject.h:35
Definition PolyLine.h:27
virtual int nbPoints() const =0
static std::shared_ptr< IDispersionCurve > dispersionByNbPoints(Base::PolyLine bPolyline, const int nbPoints, const double toler=-1, bool precision=false)
virtual std::vector< Base::Vector3d > points()=0
virtual double parameter(const int Index) const =0
virtual bool isDone() const =0
static std::shared_ptr< IDispersionCurve > dispersionByDeflection(Base::PolyLine bPolyline, const double deflection, const double toler=-1, bool precision=false)
virtual std::pair< Base::Vector3d, Base::Vector3d > pointAndDir(const int Index)=0
static std::shared_ptr< IDispersionCurve > dispersionByNbPoints(App::IDocumentObject *pOriginalCurveObj, const int nbPoints, const double toler=-1, bool precision=false)
通过点数量离散曲线
static std::shared_ptr< IDispersionCurve > dispersionByLength(Base::PolyLine bPolyline, const double unitLength, const double toler=-1, bool precision=false)
static std::shared_ptr< IDispersionCurve > dispersionByLength(App::IDocumentObject *pOriginalCurveObj, const double unitLength, const double toler=-1, bool precision=false)
通过固定长度离散曲线
static std::shared_ptr< IDispersionCurve > dispersionByTangentialDeflection(Base::PolyLine bPolyline, const double deflection, const double angular, const double toler=-1)
static std::shared_ptr< IDispersionCurve > dispersionByDeflection(App::IDocumentObject *pOriginalCurveObj, const double deflection, const double toler=-1, bool precision=false)
通过弦高离散曲线
virtual std::vector< std::pair< Base::Vector3d, Base::Vector3d > > pointAndDirList()=0
virtual Base::Vector3d dir(const int Index)=0
virtual Base::Vector3d value(const int Index)=0
static std::shared_ptr< IDispersionCurve > dispersionByTangentialDeflection(App::IDocumentObject *pOriginalCurveObj, const double deflection, const double angular, const double toler=-1)
通过弦高和角度差离散曲线
Definition IDispersionCurve.h:40
Definition BaseFigureFactory.h:28
Definition BaseFigureFactory.h:24
Definition BaseFigureFactory.h:33