5 changed files with 174 additions and 79 deletions
			
			
		@ -1,2 +1,95 @@ | 
				
			|||||
# PMClassifier | 
					# PMClassifier | 
				
			||||
 | 
					用于计算Extrusion体在空间查询点处的SDF | 
				
			||||
 | 
					## Extrusion体描述 | 
				
			||||
 | 
					- 沿多段线路径拉伸 | 
				
			||||
 | 
					```C++ | 
				
			||||
 | 
					class ExtrudedSolidPolyline { | 
				
			||||
 | 
						/** | 
				
			||||
 | 
						* @brief Construct a new extruded solid using a polyline as the axis | 
				
			||||
 | 
						* @param profiles The profiles of the extruded solid | 
				
			||||
 | 
						* @param axis The axis of the extruded solid | 
				
			||||
 | 
						* @param rScale The radius scale of the extruded solid, unused for now | 
				
			||||
 | 
						*/ | 
				
			||||
 | 
						ExtrudedSolidPolyline(std::vector<Polyline> profiles, Polyline axis, real rScale = 1.0); | 
				
			||||
 | 
					} | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					- 沿单段线路径拉伸 | 
				
			||||
 | 
					```C++ | 
				
			||||
 | 
					class ExtrudeSolidArcLine : public ExtrudedSolidPolyline { | 
				
			||||
 | 
					public: | 
				
			||||
 | 
						/** | 
				
			||||
 | 
						* @brief Construct a new extruded solid using an arc line as the axis | 
				
			||||
 | 
						* @param profiles The profiles of the extruded solid | 
				
			||||
 | 
						* @param axis The axis of the extruded solid | 
				
			||||
 | 
						* @param rScale The radius scale of the extruded solid, unused for now | 
				
			||||
 | 
						*/ | 
				
			||||
 | 
						ExtrudeSolidArcLine(std::vector<Polyline> profiles, ArcLine axis, real rScale = 1.0); | 
				
			||||
 | 
					};  | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					- 沿螺旋路径拉伸 | 
				
			||||
 | 
					```C++ | 
				
			||||
 | 
					class ExtrudedSolidHelixLine { | 
				
			||||
 | 
					public: | 
				
			||||
 | 
						/** | 
				
			||||
 | 
						* @brief Construct a new extruded solid using a helix as the axis | 
				
			||||
 | 
						* @param profiles The profiles of the extruded solid (still polyline) | 
				
			||||
 | 
						* @param axis The axis of the extruded solid | 
				
			||||
 | 
						* @param rScale The radius scale of the extruded solid, unused for now | 
				
			||||
 | 
						*/ | 
				
			||||
 | 
						ExtrudedSolidHelixLine(std::vector<Polyline> profiles, HelixLine axis, real rScale = 1.0); | 
				
			||||
 | 
					};  | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					## 曲线描述 | 
				
			||||
 | 
					- 多段线 | 
				
			||||
 | 
					```C++ | 
				
			||||
 | 
					using Pt3Array = std::vector<Vec3>; | 
				
			||||
 | 
					class Polyline { | 
				
			||||
 | 
					public: | 
				
			||||
 | 
							/** | 
				
			||||
 | 
							* @brief Construct a new Polyline object | 
				
			||||
 | 
							* @param points The points of the polyline | 
				
			||||
 | 
							* @param bugles The bugles of the polyline | 
				
			||||
 | 
							* @param refNormal The reference normal of the polyline | 
				
			||||
 | 
							* @param closed Whether the polyline is closed | 
				
			||||
 | 
							*/ | 
				
			||||
 | 
					    Polyline(Pt3Array points, std::vector<real> bugles, const Vec3 &refNormal, bool closed = false); | 
				
			||||
 | 
					} | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					- 单段线/圆弧线 | 
				
			||||
 | 
					```C++ | 
				
			||||
 | 
					class ArcLine : public Polyline { | 
				
			||||
 | 
					public: | 
				
			||||
 | 
						/** | 
				
			||||
 | 
						* @brief Construct a new ArcLine object | 
				
			||||
 | 
						* @param a The start point of the arc line | 
				
			||||
 | 
						* @param b The end point of the arc line | 
				
			||||
 | 
						* @param bugle The bugle of the arc line | 
				
			||||
 | 
						* @param refNormal The reference normal of the arc line | 
				
			||||
 | 
						*/ | 
				
			||||
 | 
					    ArcLine(const Vec3 &a, const Vec3 &b, real bugle, const Vec3 &refNormal); | 
				
			||||
 | 
					}; | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					- 螺旋线 | 
				
			||||
 | 
					```C++ | 
				
			||||
 | 
					class HelixLine : public ILine { | 
				
			||||
 | 
					public: | 
				
			||||
 | 
						/** | 
				
			||||
 | 
						* @brief Construct a new HelixLine object | 
				
			||||
 | 
						* @param axisStart The start point of the helix line | 
				
			||||
 | 
						* @param axisEnd The end point of the helix line | 
				
			||||
 | 
						* @param r The radius of the helix line | 
				
			||||
 | 
						* @param advancePerRound The advance per round of the helix line | 
				
			||||
 | 
						* @param startDir The direction from axisStart to start of the helix line | 
				
			||||
 | 
						*/ | 
				
			||||
 | 
					    HelixLine(const Vec3 &axisStart, const Vec3 &axisEnd, real r, real advancePerRound, | 
				
			||||
 | 
					              const Vec3 &startDir); | 
				
			||||
 | 
					} | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					## 距离查询 | 
				
			||||
 | 
					对拉伸体对象使用.sdf(Vec3 queryPoint) | 
				
			||||
 | 
					```C++ | 
				
			||||
 | 
					Polyline axis{...}; | 
				
			||||
 | 
					ExtrudedSolidPolyline a{..., axis}; | 
				
			||||
 | 
					const Vec3 queryP = Vec3(...); | 
				
			||||
 | 
					auto f = a.sdf(queryP); | 
				
			||||
 | 
					``` | 
				
			||||
					Loading…
					
					
				
		Reference in new issue