#ifndef _SECTIONUTILITY_H_ #define _SECTIONUTILITY_H_ #include "SectionStructDef.h" #include "acgiutil.h" #include "TGGiExplodeDrawBase.h" namespace SectionUtility { // 线到面投影 // 返回值为1,说明线与平面垂直,则 out_pt 值有效, 返回值为0,说明 out_seg 值有效, 返回值为-1, 说明投不到平面上 short GEOAPI Projection_line2plane(const TGGeSectionPlane &plane, const AcGeLineSeg3d &in_seg, AcGeLineSeg3d &out_seg, AcGePoint3d &out_pt); short GEOAPI Projection_line2plane(const TGGeSectionPlane &plane, const TGGeLine &in_seg, TGGeLine &out_seg, AcGePoint3d &out_pt); // 线到面的投影,只处理线段两端点都在面法向方向同侧的线段 short GEOAPI Projection_line2Plane_sub(const TGGeSectionPlane &plane, const AcGeLineSeg3d &in_seg, AcGeLineSeg3d &out_seg, AcGePoint3d &out_pt); // 面到面投影, 返回值为 两面之间最短距离 double GEOAPI Projection_plane2plane(const TGGeSectionPlane §ion, const TGGeSectionPlane &plane, TGGePoly2D &poly); // poly2d 到 投影面的投影 double GEOAPI Projection_poly2plane(const TGGeSectionPlane §ion, const TGGePoly2D &plane, TGGePoly2D &poly); // 画一个箭头 void GEOAPI MakeArrow(AcDbPolyline &poly, const AcGePoint3d &arrowHead, const AcGePoint3d &arrowTail); // 画一个画柱体 void GEOAPI DrawColumn3D(TGGiExplodeDrawBase &dc, const AcGePoint3d& TopCenter, const AcGePoint3d &BottomCenter, const double &scale); // 画一个圆锥体 void GEOAPI DrawTaper3D(TGGiExplodeDrawBase &dc, const AcGePoint3d &BottomCenter, const AcGeVector3d &vtDir, const double &scale); bool GEOAPI GetLine(const std::vector > &lines, const int nIndex, TGGeLine &line); // 对全部 TDbSectionPathSign 实例 进行刷新 void GEOAPI RefreshSectionPath(); // objId - 被 clone 的 对象 ID // sLine - 线形 AcDbObjectId GEOAPI CloneAndResetLineTypeForBlockTableRecord(AcDbObjectId &objId, const CString &sLine); TGGeCurveSegment GetSegmentOfPoly(const TGGePoly2D &poly, const int nIdx); int GetCountOfSegmentForPoly(const TGGePoly2D &poly); AcGeMatrix3d GEOAPI GetCoordSystem(const AcGeVector3d &vt); // 跟据 xy 面上的 poly 曲线 将之上下拉伸,生成系列的面 void GEOAPI MakeFacesByPoly(const TGGePoly2D &poly, const double &elev, const double &height, std::vector &planes, const bool bTopFace = false); // bTopface 是否需要顶面和底面. // 跟据 xy 面上的 poly 曲线 将之上下拉伸,生成系列的面 并将这些面进行投影,添充到 TObjSectionRecord 数组中 void GEOAPI FillRecordsByPoly(const TGGePoly2D &poly, const TGGeSectionPlane §ion, std::vector &records, const double &elev, const double &height, const AcDbEntity &ent, TObjSectionRecord::SectionType type = TObjSectionRecord::eTCH_WALL, const bool bTopFace = false); // bTopface 是否需要顶面和底面. // for test void GEOAPI DrawPoly2D(const TGGePoly2D &poly, const int color = 7); void GEOAPI DrawTGGePlane(const TGGeSectionPlane &plane, const int color = 7); void GEOAPI DrawLines(const std::vector &lines, const AcCmColor color); } #endif