798 lines
27 KiB
C++
798 lines
27 KiB
C++
#pragma once
|
||
#include "Stdafx.h"
|
||
#include "Stdafx_M.h"
|
||
//#include <list>
|
||
//#include <map>
|
||
//#include <vector>
|
||
#include "OCC/OCCLib/Geometry.h"
|
||
#include "OCC/OCCLib/Hull.h"
|
||
#include "OCC/OCCLib/SplitAllInsectionCurves.h"
|
||
//#include ".\cxml\xml.h"
|
||
//2016srq
|
||
//#include "ISession_Text.h"
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
/*
|
||
#include "Node/AStoctNodePtrDef.h"
|
||
#include "Scene/AScenePtrDef.h"
|
||
#include "Style/AStylePtrDef.h"
|
||
*/
|
||
// END DELETE
|
||
//end
|
||
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
#include "Prs3d_Presentation.hxx"
|
||
#include <TopAbs_Orientation.hxx>
|
||
//#include "Handle_AIS_Shape.hxx" // XUEFENG DELETE 202009
|
||
#include "AIS_Shape.hxx" // XUEFENG ADDED 202009
|
||
#include <string> // XUEFENG ADDED 202009
|
||
|
||
#include "Graphic3d_NameOfMaterial.hxx"
|
||
#include "Quantity_Color.hxx"
|
||
// END ADDED
|
||
|
||
#include "OCC/OCCLib/Calculation.h"
|
||
|
||
// Lvxj
|
||
#include "dl_dxf.h"
|
||
#include "dl_creationadapter.h"
|
||
#include "test_creationclass.h"
|
||
#include <QList>
|
||
// Lvxj
|
||
|
||
//
|
||
//using namespace std;
|
||
//using namespace JWXml;
|
||
|
||
|
||
class SpaceCurve
|
||
{
|
||
public:
|
||
SpaceCurve(){};
|
||
~SpaceCurve(){};
|
||
public:
|
||
vector<gp_Pnt> pSet; //节点坐标
|
||
vector<gp_Vec> dSet_in; //切入方向矢量
|
||
vector<gp_Vec> dSet_out; //切出方向矢量
|
||
int count_first;
|
||
int count_second;//双向投影
|
||
int flag;// 1,多段线
|
||
vector<int> Type; //点类型,0-非分段点,>0-分段点
|
||
|
||
/// 0-无限制(c2) //20170501 by czb
|
||
/// 1-角度(c1) //20170501 by czb
|
||
/// 2-折点(c0) //20170501 by czb
|
||
/// 3-多段线(c0)
|
||
vector<int> flag_in; //切入标志 20170501 by czb 新增,对应KnotDir
|
||
vector<int> flag_out; //切出标志,对应KnotDirII
|
||
};
|
||
|
||
|
||
// Lvxj
|
||
//高度表单元
|
||
class HeightTableCell
|
||
{
|
||
public:
|
||
int rowIndex;
|
||
int colIndex;
|
||
char stationName[32];
|
||
char blName[32];
|
||
vector<gp_Pnt> data;
|
||
};
|
||
//半宽表单元
|
||
class HalfBreadthTableCell
|
||
{
|
||
public:
|
||
int rowIndex;
|
||
int colIndex;
|
||
char stationName[32];
|
||
char wlName[32];
|
||
vector<gp_Pnt> data;
|
||
};
|
||
// Lvxj
|
||
|
||
class OCCStructDataMD
|
||
{
|
||
public:
|
||
OCCStructDataMD(void);
|
||
~OCCStructDataMD(void);
|
||
public:
|
||
void clearData();
|
||
//***初始化数据
|
||
void InitList();
|
||
|
||
//***初始化船舶主尺度信息:loa船长、lpp垂线间长,b船宽,d船深,t 设计吃水,f0x初始肋位,nfrm肋骨个数,frm肋骨数据,nsta站个数,sta站,nwl水线个数,wl水线,nbl纵剖线个数,bl纵剖线
|
||
void ResetPrincipal(double loa,double lpp, double b, double d,double t, double f0x,int iFrame, int nfrm, Frame frm[],
|
||
int nsta, Station sta[],int nwl, WaterlinePos wl[],int nbl,ButtocklinePos bl[]);//主尺度
|
||
|
||
//***Undo Redo flag:0:UNDO,1:REDO
|
||
void UnRedo(int flag, int cmdID);
|
||
void UnRedoPreAction(int cmdID,int id);
|
||
void UnRedoAfterAction(int cmdID,int id);
|
||
|
||
//***显示横剖面位置
|
||
void ShowSectionPos(double x,bool bdrawprofle);//型线
|
||
|
||
//***删除垃圾图元
|
||
void DelObj(int cmdID,int nid);
|
||
//删除垃圾点图元
|
||
void DelPoint( int ID);
|
||
//删除垃圾线图元
|
||
void DelCurve(int ID);
|
||
//删除垃圾面图元
|
||
void DelSurface(int ID);
|
||
//删除垃圾体图元
|
||
void DelSolid(int ID);
|
||
//删除垃圾主甲板面
|
||
void DelMainDeckSurf(int ID);
|
||
//删除垃圾外板面
|
||
void DelShellSurf(int ID);
|
||
//删除垃圾主船体
|
||
void DelHull(int ID);
|
||
//删除垃圾平台面
|
||
void DelDeckSurf(int ID);
|
||
//删除垃圾上建外围面
|
||
void DelBoundSurf(int ID);
|
||
//删除垃圾分舱面
|
||
void DelSubdivSurf(int ID);
|
||
//删除垃圾开敞客货区
|
||
void DelOpenCargoRegion(int ID);
|
||
//删除垃圾舱室
|
||
void DelSpace(int ID);
|
||
//删除垃圾附体
|
||
void DelAppendage(int ID);
|
||
//删除进水力点
|
||
void DelHydroInletPoint(int ID);
|
||
void DelHydroLimitAng(int ID);
|
||
//修改时,根据ID重新验证生成图元,
|
||
BOOL ModifyObj(int cmdID,int id);
|
||
|
||
//增加舱室
|
||
void InsertSpace( Space& space);// 舱室
|
||
|
||
//简单点验证
|
||
BOOL CheckSimplePoint(Point3D *pnt);
|
||
//相交点验证
|
||
BOOL CheckCrossPoint(Point3D *pnt);
|
||
//线上点验证
|
||
BOOL CheckOnLinePoint(Point3D *pnt);
|
||
//线面交点验证
|
||
BOOL CheckLineFacePoint(Point3D *pnt);
|
||
////线引用点C/N=?
|
||
BOOL CheckLineRefPoint(Point3D *pnt);
|
||
//20161117 by czb,镜像点
|
||
TopoDS_Shape CheckMirrorPoint(Point3D& pnt);
|
||
//增加topo点
|
||
BOOL AddTopoPoint(int cmdID,Point3D pnt,bool bchecked=false);
|
||
|
||
//创建折线
|
||
TopoDS_Wire CreatePolyline(vector<gp_Pnt>& pSet);
|
||
//增加静水力点
|
||
BOOL AddTopoInletPoint(int cmdID, HydroInletPoint& pnt,bool bchecked=false);
|
||
//***极限静倾角
|
||
BOOL AddLimitAng(int cmdID, HydroLimitAng& limit);
|
||
//***限界线
|
||
BOOL AddMarginLine(int cmdID, MarginLine& margin);
|
||
//***浸水开口
|
||
BOOL AddImmersionOpen(int cmdID, ImmersionOpen& Iopen1);
|
||
|
||
//***线验证
|
||
BOOL CheckCurve(int cmdID,Curve& crv);
|
||
//20161117 by czb,镜像线
|
||
TopoDS_Shape CheckMirrorCurve(Curve& crv);
|
||
//20170901 by czb,复制线
|
||
TopoDS_Shape CheckCopyCurve(Curve& crv);
|
||
//基本样条曲线验证
|
||
TopoDS_Shape CheckSpaceCurve( Curve& crv,int linetype=0);//linetype =0 =1 临时显示 =2样条曲线双投影曲线中的第一条=3样条曲线双投影曲线中的第二条
|
||
TopoDS_Shape CheckSpaceCurve1( Curve& crv,int linetype);
|
||
SpaceCurve GetSpaceCurve( Curve& crv, int linetype);
|
||
//TopoDS_Wire CreateWire( SpaceCurve& curve, int startId, int count);
|
||
TopoDS_Edge CreateEdge( SpaceCurve& curve, int startId, int count);
|
||
TopoDS_Edge CreateEdge2( SpaceCurve& curve, int startId, int count);
|
||
//折线
|
||
TopoDS_Shape CheckPolygon( Curve& crv);
|
||
//椭圆弧
|
||
TopoDS_Shape CheckEllipse( Curve& crv);
|
||
//三点椭圆弧
|
||
TopoDS_Shape CheckEllipse1( Curve& crv);
|
||
//抛物线
|
||
TopoDS_Shape CheckParabola( Curve& crv);
|
||
//三点抛物线
|
||
TopoDS_Shape CheckParabola1(gp_Pnt p1, gp_Pnt p2, gp_Pnt p3, bool full);
|
||
//双投影曲线
|
||
TopoDS_Shape CheckDProjectCurve( Curve& crv);
|
||
//拼接线
|
||
TopoDS_Shape CheckJoinCurve( Curve& crv);
|
||
//剪切线
|
||
TopoDS_Shape CheckTrimCurve( Curve& crv);
|
||
//面相交线
|
||
TopoDS_Shape CheckInterFaceCurve( Curve& crv);
|
||
|
||
|
||
// XUEFENG ADDED 20211008
|
||
TopoDS_Shape CheckBoundCurve(Curve& crv);
|
||
|
||
//基本样条曲线分段数据获取
|
||
vector<Handle_TColgp_HArray1OfPnt> GetHarryList( Curve& crv, vector<TColgp_Array1OfVec*> &vectorList, vector<Handle_TColStd_HArray1OfBoolean> &boolList,int linetype=0);//linetype =0 样条曲线双投影曲线中的第一条 =1 临时显示 =2样条曲线双投影曲线中的第一条=3样条曲线双投影曲线中的第二条
|
||
|
||
//两直线点之间数据插值
|
||
void AddPointforStraight( vector<gp_Pnt> &pntlist,int & i,gp_Pnt startp,gp_Pnt endp);
|
||
|
||
//***面验证
|
||
BOOL CheckSurface(int cmdID, Surface& srf);
|
||
//网格面,用居工算法
|
||
TopoDS_Shape CheckGeneralSurface( Surface& srf);
|
||
//放样面验证
|
||
TopoDS_Shape CheckLoftSurface( Surface& srf);
|
||
//扫掠面验证
|
||
TopoDS_Shape CheckSweptSurface( Surface& srf);
|
||
TopoDS_Shape CreateSweptSurface(TopoDS_Shape gEdge, TopoDS_Shape bEdge);
|
||
//旋转面
|
||
TopoDS_Shape CheckRotationSurface( Surface& srf);
|
||
//4管道,
|
||
TopoDS_Shape CheckPipedSurface( Surface& srf);
|
||
//5球面,
|
||
TopoDS_Shape CheckSphereSurface( Surface& srf);
|
||
//镜像面
|
||
TopoDS_Shape CheckMirrorSurface( Surface& srf);
|
||
//复制面
|
||
TopoDS_Shape CheckCopySurface( Surface& srf);
|
||
//缝合面
|
||
TopoDS_Shape CheckJoinSurface( Surface& srf);
|
||
//剪切面
|
||
TopoDS_Shape CheckTrimSurface( Surface& srf);
|
||
|
||
TopoDS_Shape CheckTrimSurfaceTranslateOcc( Surface& srf);
|
||
|
||
TopoDS_Shape CheckTrimSurfaceTranslateInsec( Surface& srf);
|
||
|
||
TopoDS_Shape CheckTrimSurfaceTranslate( Surface& srf);
|
||
|
||
TopoDS_Shape CheckTrimSurfaceByTranslate(TopoDS_Shape TopoSrf,TopoDS_Shape TopoTemp,gp_Pnt ptcut,bool & bfindsec);
|
||
//拆分面
|
||
TopoDS_Shape CheckSpliteSurface( Surface& srf);
|
||
//双投影临时面
|
||
TopoDS_Shape CheckTempSurface( Surface& srf);
|
||
//***体验证
|
||
BOOL CheckSolid(int cmdID, Solid& sld);
|
||
|
||
//组合体
|
||
TopoDS_Shape CheckSolidBool(Solid &sld); //20170801 新增 by czb
|
||
|
||
//围拢体
|
||
TopoDS_Shape CheckCell( Solid& sld);
|
||
TopoDS_Shape CloseSolid( Solid& sld);
|
||
vector<int> ClearEdges(map<int, TopoDS_Edge>& edges);
|
||
//TopoDS_Shape CloseSolid1(Solid sld);
|
||
//扫掠体
|
||
TopoDS_Shape CheckSweptCell( Solid& sld);
|
||
//旋转体
|
||
TopoDS_Shape CheckRotationCell( Solid& sld);
|
||
//圆球
|
||
TopoDS_Shape CheckSphereCell( Solid& sld);
|
||
//圆柱
|
||
TopoDS_Shape CheckCylinderCell( Solid& sld);
|
||
//圆罐
|
||
TopoDS_Shape CheckRTankCell( Solid& sld);
|
||
//长方体
|
||
TopoDS_Shape CheckCubeCell( Solid& sld);
|
||
//剪切体
|
||
TopoDS_Shape CheckTrimSolid( Solid& sld);
|
||
//镜像体
|
||
TopoDS_Shape CheckMirrorSolid( Solid& sld);
|
||
//复制体
|
||
TopoDS_Shape CheckCopySolid( Solid& sld);
|
||
|
||
//***船壳模型
|
||
// 主甲板面
|
||
BOOL CheckMainDeckSurf(int cmdID, MainDeckSurf& srf);
|
||
// 外板面
|
||
BOOL CheckShellSurf(int cmdID, ShellSurf& srf);
|
||
// 主船体
|
||
BOOL CheckHull(int cmdID, Hull& srf);
|
||
// 平台面
|
||
BOOL CheckDeckSurf(int cmdID, DeckSurf& srf);
|
||
// 上建外围面
|
||
BOOL CheckBoundSurf(int cmdID, BoundSurf& srf);
|
||
// 分舱面
|
||
BOOL CheckSubdivSurf(int cmdID, SubdivSurf& srf);
|
||
//获取槽型舱壁的边线,dir1:=0横向 =1纵向 dir2 =0水平 =1 垂向
|
||
TopoDS_Wire GetCorrugatedEdgeByRegion(double v,int dir1,int dir2,double s,double a,double d,double f,double x1,double x2,double y1,double y2,double z1,double z2);
|
||
// 开敞客货区
|
||
BOOL CheckOpenCargoRegion(int cmdID, OpenCargoRegion& srf);
|
||
// 舱室
|
||
BOOL CheckSpace(int cmdID, Space& sld);
|
||
// 附体
|
||
BOOL CheckAppendage(int cmdID, Appendage& sld);
|
||
//体的bool运算
|
||
TopoDS_Shape TopoSolidBrepAlgo(int type,TopoDS_Shape solid1,TopoDS_Shape solid2);
|
||
|
||
TopoDS_Shape TopoSolidBool(int type,TopoDS_Shape solid1,TopoDS_Shape solid2);
|
||
|
||
TopoDS_Shape SplitShell(TopoDS_Shape& solid1,TopoDS_Shape& solid2, vector<TopoDS_Face>& faceIn, vector<TopoDS_Face>& faceOut, vector<TopoDS_Face>& faceOn);
|
||
|
||
//肋位
|
||
BOOL CheckFrameRuler();
|
||
BOOL CheckFrameRulerPriv();
|
||
//临时对象显隐
|
||
void ShowTempCurve(bool show, Curve& crv, int npnt, Point3D pnt[]);
|
||
|
||
//***查询
|
||
//查询两点距离
|
||
double Get2PointDistance(int id1,int id2);
|
||
//查询曲面面积
|
||
double GetS(int id);
|
||
//查询体的体积
|
||
double GetV(int id);
|
||
//查询船体总吨位(有主甲板和船壳围城的封闭船体)
|
||
double GetTonnageV1();
|
||
|
||
//判断点集合是不是顺时针
|
||
bool IsClockwise(vector<gp_Pnt>& pointSet);
|
||
//判断线是不是顺时针
|
||
bool IsClockwise(gp_Pnt delPT,TopoDS_Shape face);
|
||
|
||
//写XML
|
||
//void BuilderXmlData(CXml &xml, CSplitAllInsectionCurves& m_tool );
|
||
//写网格面数据到XML
|
||
BOOL WriteXMLData( CSplitAllInsectionCurves& m_tool);
|
||
//获取系统路径
|
||
std::string GetSystemPath();
|
||
|
||
//获取图元显示信息
|
||
OccAisVar ReturnOccDisplayVars(int id);
|
||
|
||
//获取图元的形心信息
|
||
gp_Pnt ReturnOccPropVars(TopoDS_Shape toposhape,int id);
|
||
|
||
//int转为Quantity_Color或RGB
|
||
//2016srq
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
Quantity_Color TransIntToRGB(int color);
|
||
// END ADDED
|
||
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
//AnyCore::ColorValue TransIntToRGB(int color);
|
||
// END DELETE
|
||
|
||
//反色
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
Quantity_Color ReverseRGB(Quantity_Color color);
|
||
// END ADDED
|
||
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
//AnyCore::ColorValue ReverseRGB(AnyCore::ColorValue color); //20171001 added by czb
|
||
// END DELETE
|
||
|
||
//角度弧度转换
|
||
double ConvertDegreesToRadians(double degrees);
|
||
|
||
//截取抛物线上的一段
|
||
TopoDS_Edge ParabSegMent(gp_Parab Parab,gp_Dir dir,gp_Pnt p1,gp_Pnt p2);
|
||
|
||
//拓扑对象的显示
|
||
// DELETE BY XUEFENG 20190402
|
||
//bool OccDisplayAis(int ID,TopoDS_Shape tppoint); //20170601 by czb,返回true表示可见,false表示不可见
|
||
// END DELETE
|
||
|
||
// ADDED BY XUEFENG 20190402
|
||
bool OccDisplayAis(int id,TopoDS_Shape toposhape,int fitWin=1);
|
||
// END ADDED
|
||
|
||
//求交线,并将交线转为B样条曲线
|
||
Handle(Geom_BSplineCurve) GetIntersectionOf2Toposhapes(TopoDS_Shape shape1,TopoDS_Shape shape2,bool &bsucess);
|
||
|
||
//拓扑存为Brep。path:保存路径,从上层界面获取;ids[]topo_compound里面依次存的拓扑对象对应的id,要返回给上层界面
|
||
bool SaveTopoToStep(char* path,int ids[]);
|
||
//拓扑存为Brep。path:保存路径,从上层界面获取;20161227 新增 by czb
|
||
bool SaveTopoToStep2(char* path);
|
||
//获取拓扑对象保存为brep格式时的OCIDX;ids[]topo_compound里面依次存的拓扑对象对应的id,要返回给上层界面,20161214 新增 by czb
|
||
void GetOCIDXOfTopo(int ids[]);
|
||
//拓扑存为Brep。path:保存路径,从上层界面获取
|
||
bool SaveTopoToBrep(char* path);
|
||
//从step读取topo对象。path:文件路径,从上层界面获取;ids[]topo_compound里面依次存的拓扑对象对应的id,从上层界面获取
|
||
bool LoadTopoFromStep(char* path, QVector<int> ids);
|
||
|
||
//拓扑存为Iges。path:保存路径,从上层界面获取;ids[]topo_compound里面依次存的拓扑对象对应的id,要返回给上层界面 目的:JAVA用,3dmax->三方工具->flash
|
||
bool SaveTopoToIges(char* path,int ids[]);
|
||
|
||
//从Iges读取topo对象。path:文件路径,从上层界面获取;ids[]topo_compound里面依次存的拓扑对象对应的id,从上层界面获取
|
||
bool LoadTopoFromIges(char* path,int ids[]);
|
||
|
||
//由交线得到wire的ege序列
|
||
void GetInsectWirePts(TopoDS_Shape splitResult,list<TopoDS_Edge>&edgeList );
|
||
|
||
//将交线wire的无序edge序列转为有序
|
||
void GetInsectWirePts(vector<TopoDS_Edge>& edgeSet,list<TopoDS_Edge>&edgeList);
|
||
|
||
//将交线的有序序列转为拓扑线
|
||
TopoDS_Edge SetInsectWireToEdge(list<TopoDS_Edge>&edgeList);
|
||
|
||
//将交线的有序序列转为拓扑线上的组成B样条的点集合
|
||
vector<gp_Pnt> SetInsectWireToEdgePnts(list<TopoDS_Edge>&edgeList);
|
||
|
||
//由两点截取曲线上的一段
|
||
bool TrimEdgeBy2Points(Handle(Geom_Curve) curve, gp_Pnt& pt1, gp_Pnt& pt2,Handle(Geom_Curve)& newCurve );
|
||
|
||
//所有类型CURVE转为样条曲线 扫掠面不支持抛物线和圆弧
|
||
Handle(Geom_BSplineCurve) ConvertToBSplineCurve( TopoDS_Edge edge ); //20170601 by czb
|
||
|
||
//所有类型CURVE转为样条曲线 扫掠面不支持抛物线和圆弧
|
||
TopoDS_Edge ConvertToBSplineTopo( TopoDS_Edge edge );
|
||
//将曲面转为样条曲面
|
||
TopoDS_Shape ConvertToBSplineSurfTopo( TopoDS_Face edge );
|
||
|
||
BOOL GetTrimSurfaceAllOf2Toposhapes(TopoDS_Shape shape1,TopoDS_Shape shape2,TopoDS_Shape &leftSurface,TopoDS_Shape &rightSurface);
|
||
|
||
//根据交线区分面的集合
|
||
TopoDS_Shape GetCutResult(map<int, TopoDS_Face>& mapFace,TopoDS_Shape& InterSecLine);
|
||
|
||
//计算联通的面的集合
|
||
void GetFaceSet( vector<int> &resultSet, map<int,bool>& mapFaceSign, map<int,vector<int>>& mapConnectFace, vector<int>& tempFaceSet);
|
||
// 判断重边
|
||
bool CheckTwoEdgeOverlapByLinePointProject(TopoDS_Edge& tedgeA,TopoDS_Edge& tedgeB);
|
||
|
||
vector<TopoDS_Edge> GetIntersectionLines(TopoDS_Shape& line, TopoDS_Face& face);
|
||
|
||
//void GetEdgeStartEndPoint( TopoDS_Edge& edge, gp_Pnt& sp, gp_Pnt& ep);
|
||
|
||
//void GetWireSingleEdges(map<int, TopoDS_Edge>& mapEdge,vector<int>& edgeIndex);
|
||
|
||
//void GetWireSingleEdges(map<int, TopoDS_Edge>& mapEdge,vector<vector<int>>& edgeIndex);
|
||
|
||
|
||
//*舱室生成 yc 20140818
|
||
vector<gp_Pnt> CreatePointSet(vector<gp_Pnt2d> p2dSet, double d);
|
||
TopoDS_Shell CreateSplitShell(vector<gp_Pnt> pSet1, vector<gp_Pnt> pSet2);
|
||
vector<gp_Pnt2d> ConvertPoint2dSet(double* values);
|
||
TopoDS_Shape MakeCabin( Space& space);
|
||
TopoDS_Shape CreateHull();
|
||
//*/
|
||
|
||
TopoDS_Edge RebuildEdge(TopoDS_Edge edge, gp_Pnt startP, gp_Pnt endP, bool isReverse);
|
||
//*舱室生成 布尔操作yc 20140929
|
||
TopoDS_Shape MakeCabin1( Space& space);
|
||
vector<gp_Pnt2d> ConvertPoint2dSet(double* values, double width, double height);
|
||
TopoDS_Face CutEndFace(TopoDS_Face face, TopoDS_Shape shell, vector<gp_Pnt> pSet,bool isLeft);
|
||
bool IsReversed(TopoDS_Solid solid);
|
||
///* 特殊单元体
|
||
TopoDS_Shape MakeRegularCabin ( Space& space);
|
||
//计算浸水开口
|
||
double GetImmersionOpenPos(double X, double Y, double oppositZ);
|
||
|
||
//写计算接口参数xml
|
||
void SetCalParaXml(string nodeName, vector<double> step, double max = 0, double min = 0, double dai = 0);
|
||
void SetCalParaXml(string nodeName, vector<double> step, vector<double> c, double max = 0, double min = 0, double dai = 0);
|
||
void SetCalParaXml( string nodeName, double w = 0, double l = 0, double t = 0 );
|
||
void RefreshShape(TopoDS_Shape& shape);
|
||
//计算船壳静水力数据
|
||
void ShellHydrostaticCalculation();
|
||
|
||
//计算数据
|
||
//加载模型的静水力计算结果文件到临时文件夹中
|
||
void LoadCalculationXML(char* file);
|
||
//保存模型的静水力计算结果文件
|
||
void SaveCalculationXML(char* file);
|
||
//关闭静水力计算进程
|
||
void CloseCalculation();
|
||
//获取已计算舱室id
|
||
vector<int> GetCalculatedCompID();
|
||
//获取已计算船壳id
|
||
vector<int> GetCalculated();
|
||
//获取已计算点id
|
||
vector<int> GetCalculatedPointID();
|
||
//将船体表面(主甲板和外板面)模型写到brep中,保存在临时文件中
|
||
void WriteHull();
|
||
//将临时舱室静水力结果文件根据舱室id拆分成独立的结果文件
|
||
void SplitResultCompXML();
|
||
//将临时点静水力结果文件根据点d拆分成独立的结果文件
|
||
void SplitResultPointXML();
|
||
//将临时船壳静水力结果文件根据拆分成独立的结果文件
|
||
void SplitResultXML();
|
||
//将独立的舱室静水力结果文件合成完整的舱室静水力结果文件
|
||
void RebuildResultCompXML();
|
||
//将独立的船壳静水力结果文件合成完整船的壳静水力结果文件
|
||
void RebuildResultXML();
|
||
//将独立的舱室静水力结果文件合成完整的舱室静水力结果文件
|
||
void RebuildResultPointXML();
|
||
//保存静水力计算中船长,船宽和设计吃水
|
||
void SaveCalPara(double w, double l, double t);
|
||
//极限静倾角计算接口
|
||
void SetDeckBilgePoint(int Cnt, Point3D addDeck[], Point3D addBilge[]);
|
||
//进水点计算接口
|
||
void SetInletPoint(int delpnts,Point3D delpnt[],int addpnts,Point3D addpnt[], int updCnt, int oldIDs[], Point3D newIDs[]);
|
||
//
|
||
TopoDS_Edge RebuildEdge(TopoDS_Edge edge);
|
||
//导出计算数据文件
|
||
bool ExportSpace(string fileName, string path,vector<int>& ids);
|
||
//bool ExportHull(char* fileName, char* path, int count, int ids[]);
|
||
bool ExportHull(string fileName, string path, vector<int>& ids);
|
||
bool ExportSolidSTL(char* fileNameWithExtension, char* path, int count, int ids[]); //20190601 added by czb
|
||
|
||
// 数据接口 Lvxj
|
||
//导入型值表
|
||
void ImportOffsetData(bool bImportCtrlPnt,float xSubSectionLen);
|
||
//导出型值表
|
||
void ExportOffsetData(double* shipSize,double* expParam, int* expType);
|
||
//导出所有型值
|
||
void ExportAllOffsetData(double* shipSize,double* expParam, int* expType);
|
||
//导出指定型值
|
||
void ExportSpecialOffsetData(double* shipSize,double* expParam, int* expType);
|
||
//导入CAD
|
||
void ImportCAD(char* fileName);
|
||
//导入IGES
|
||
long ImportIGES(char* fileName, int impType, float*transfromParams);
|
||
//将IGES读入的内容缓存到xml中,方便界面层读取。
|
||
void WriteIGESXML(char* fileName);
|
||
//导出IGES
|
||
void ExportIGES(char* fileName,int expOption,int selectCnt,int* selectLst);
|
||
//转换CAD型线
|
||
void TransfCADLine(int selectedCnt, int* selectLst, int lineType, float* fCADPar, int lens[], Point3D *pnts);
|
||
//计算两条线交点
|
||
int GetIntersectPnt(int selectedCnt, int* selectLst,double *pPnt);
|
||
//求平面剪裁面与船体表面的交线
|
||
void CalCurveBetweenPlaneAndSurface(TopoDS_Shape& tShape,gp_Pln& gPln,vector<TopoDS_Edge>&intersectCurve);
|
||
//求交线与平面剪裁面的交点
|
||
void CalIntersectPntCS(TopoDS_Edge&tEg,gp_Pln& gPln,vector<gp_Pnt>&pntLst);
|
||
//世界坐标系转换,得到dxf文件边界位置
|
||
gp_Pnt setWorldCoordinate(vector<BlockObj> ::iterator myblock, Point2D32f mypoint);
|
||
|
||
// 数据接口 Lvxj
|
||
//合并文件
|
||
void CombineFile(string file, string fileAll);
|
||
//判断是否为体
|
||
bool IsSolid(TopoDS_Shape solid);
|
||
//计算体积
|
||
double GetV(TopoDS_Shape topo);
|
||
//主船体来自面组合
|
||
TopoDS_Shape CreateHullFromSurf( Hull& srf);
|
||
//主船体来自体组合
|
||
TopoDS_Shape CreateHullFromSolid( Hull& srf);
|
||
|
||
//重命名
|
||
BOOL CheckRename(int cmdID,RenameObject& o);
|
||
|
||
|
||
Handle(Geom_BSplineCurve) ConcatBSpline( vector<Handle(Geom_BSplineCurve)>& splList,bool bAngleContinue=true);
|
||
// 生成首尾端带切矢的样条曲线
|
||
Handle(Geom_BSplineCurve) MakeBSpline( vector<gp_Pnt>& pSet, bool bStart, bool bEnd, gp_Vec vStart, gp_Vec vEnd);
|
||
// 生成首尾端带切矢的样条曲线
|
||
Handle(Geom_BSplineCurve) MakeBSpline2( vector<gp_Pnt>& pSet, bool bStart, bool bEnd, gp_Vec vStart, gp_Vec vEnd);
|
||
// 生成节点带切矢的样条曲线
|
||
Handle(Geom_BSplineCurve) MakeBSpline(vector<gp_Pnt>& pSet, vector<bool> bSet, vector<gp_Vec> vSet);
|
||
// 生成多段线的样条曲线,by czb 20161230
|
||
Handle(Geom_BSplineCurve) MakePolyBSpline(vector<gp_Pnt>& pSet);
|
||
|
||
Handle(Geom_BSplineCurve) BuildEdge( vector<gp_Pnt>& pSet, vector<bool>& bSet, vector<gp_Vec>& vSet);
|
||
|
||
////获取曲线首尾端点和肋位或站位点 type=1,肋位;type=2,站位
|
||
int GetCurvePointByFS(int curveID, int xlen, double xSet[], int lens[], Point3D *pnts);
|
||
int GetCurvePointByFSEx(int curveID, int xlen, vector<double>& xSet,vector<Point3D>& pnts);
|
||
|
||
///获取所有肋位
|
||
vector<double> GetAllF();
|
||
|
||
///获取所有站位
|
||
vector<double> GetAllS();
|
||
|
||
double GetSTLCoefficient();
|
||
|
||
public:
|
||
map<int ,Point3D> m_mapPoints;//所有点图元集合
|
||
map<int,Point3D>::iterator ptit;
|
||
map<int,Curve> m_mapCurves;//所有线图元集合
|
||
map<int,Curve>::iterator cvit;
|
||
map<int,Surface> m_mapSurfaces;//所有面图元集合
|
||
map<int,Surface>::iterator sfit;
|
||
map<int,Solid> m_mapSolids;//所有体图元集合
|
||
map<int,Solid>::iterator sdit;
|
||
map<int,TopoDS_Shape> m_mapAllTopoShapes;//所有topo对象集合
|
||
map<int,TopoDS_Shape>::iterator tpit;
|
||
|
||
//2016srq
|
||
//2016srq
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
map<int,Handle_AIS_Shape> m_mapTempAisShapes;// 曲线非引用点临时对象集合(shape)保存曲线高亮时,其临时显示的点集合
|
||
map<int,Handle_AIS_Shape> m_mapAllAis;//所有occ显示对象集合
|
||
map<int,Handle_AIS_Shape>::iterator aisit;
|
||
// END ADDED
|
||
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
/*
|
||
map<int,AnyCore::ASceneNodePtr> m_mapTempAisShapes;// 曲线非引用点临时对象集合(shape)保存曲线高亮时,其临时显示的点集合
|
||
map<int,AnyCore::ASceneNodePtr> m_mapAllAis;//所有occ显示对象集合
|
||
map<int,AnyCore::ASceneNodePtr>::iterator aisit;
|
||
*/
|
||
// END DELETE
|
||
|
||
map<int,MainDeckSurf> m_mapMainDeckSurf;// 主甲板面集合
|
||
map<int,ShellSurf> m_mapShellSurf;// 外板面集合
|
||
map<int,Hull> m_mapHull;// 主船体
|
||
map<int,DeckSurf> m_mapDeckSurf;// 平台面集合
|
||
map<int,BoundSurf> m_mapBoundSurf;// 上建外围面集合
|
||
map<int,SubdivSurf> m_mapSubdivSurf; // 分舱面集合
|
||
map<int,OpenCargoRegion> m_mapOpenCargoRegion;// 开敞客货区集合
|
||
map<int,Space> m_mapSpace;// 舱室集合
|
||
map<int,Appendage> m_mapAppendage;// 附体集合
|
||
|
||
//add by Yu 2014/8/30
|
||
map<int,HydroInletPoint> m_mapInletPoint;// 静水力点集合
|
||
map<int,HydroLimitAng> m_mapLimitAng;// 极限静倾角集合
|
||
map<int,MarginLine> m_mapMarginLine;//限界线
|
||
map<int,ImmersionOpen> m_mapImmersionOpen; //浸水开口
|
||
|
||
// ADDED BY XUEFENG 20230604
|
||
bool b_isAisFrameCreated;
|
||
// END ADDED
|
||
|
||
TopoDS_Shape m_shapeTopoFrame;//肋位
|
||
//2016srq
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
Handle_AIS_Shape m_shapeAisFrame;
|
||
// END ADDED
|
||
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
//AnyCore::ASceneNodePtr m_shapeAisFrame;
|
||
// END DELETE
|
||
|
||
double m_numF0x;//站初始位置
|
||
int m_iFrame; //肋骨定义是递减还是递增 '0 递减 1 递增
|
||
map<int,Frame> m_mapFrameRuler;//站
|
||
map<int,double> m_mapStation;//站集合
|
||
map<int,double> m_mapWaterlinePos;//水线集合
|
||
map<int,double> m_mapButtocklinePos;//纵剖线集合
|
||
|
||
|
||
TopoDS_Shape m_shapeTopoProfile;//型线
|
||
//2016srq
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
Handle_AIS_Shape m_shapeAisProfile;
|
||
// END ADDED
|
||
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
//AnyCore::ASceneNodePtr m_shapeAisProfile;
|
||
// END DELETE
|
||
|
||
map<int,std::string> m_mapAllNames;// 所有拓扑对象对应的名字集合
|
||
map<int,std::string>::iterator csit;
|
||
|
||
//redo undo
|
||
map<int,map<int,GeomTopoVar>> m_mapUndoPre;
|
||
map<int,map<int,GeomTopoVar>> m_mapUndoAfter;
|
||
map<int,map<int,GeomTopoVar>>::iterator undoit;
|
||
map<int,GeomTopoVar>::iterator undosubit;
|
||
|
||
//曲线临时显示对象
|
||
map<int,TopoDS_Shape> m_maptopoTempShowCurve ;
|
||
//2016srq
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
map<int,Handle_AIS_Shape> m_mapaisTempShowCurve;
|
||
// END ADDED
|
||
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
//map<int,AnyCore::ASceneNodePtr> m_mapaisTempShowCurve ;
|
||
// END DELETE
|
||
|
||
map<int,Point3D> m_mapTempShowPoints;
|
||
|
||
|
||
string errorinfo;//返回上层的错误信息
|
||
|
||
int m_curInteractType;//设置图形交互类型(可选择对象类型) type可选择对象类型:0所有图元,1屏幕任意位置,2曲线节点(knot)
|
||
|
||
int m_preselid;//上个选中的线的ID
|
||
|
||
double m_shipLength;//船长
|
||
double m_shipWidth;//船宽
|
||
double m_shipDepth;//船深
|
||
double m_shipLpp;//垂线间长
|
||
double m_t; //设计吃水
|
||
|
||
int AutoCrossFlag;//网格面生成时,交点的来源判断,=1线线求交 =2依赖生成
|
||
/// 船舶数据每类图元的颜色显示属性
|
||
/// 0-点,1-线,2-面,3-体,4-主甲板,5-外板
|
||
/// 6~9-待定
|
||
/// 10-舱室,11-附体,12-主船体
|
||
// 14-高亮色,13-背景色 20171001 by czb
|
||
ModelDisplayOption displayOptions[15]; //20171001 by czb, 13->15
|
||
//2016srq
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
Graphic3d_NameOfMaterial m_shipMaterial;
|
||
// END ADDED
|
||
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
//AnyCore::AFaceStylePtr m_shipMaterial;
|
||
//AnyCore::APointStylePtr m_pointStyle;
|
||
// END DELETE
|
||
|
||
|
||
bool bCtrlSelect;//是不是CTRL多选
|
||
|
||
bool m_bshowPoint;
|
||
bool m_bshowCurve;
|
||
bool m_bshowSurface;
|
||
bool m_bshowSolid;
|
||
bool m_bshowMainDeck;
|
||
bool m_bshowShell;
|
||
bool m_bshowDeck;
|
||
bool m_bshowBound;
|
||
bool m_bshowSubdiv;
|
||
bool m_bshowOpenCargoRegion;
|
||
bool m_bshowSpace;
|
||
bool m_bshowAppendage;
|
||
bool m_bshowFrameRuler;
|
||
bool m_bshowProfile;
|
||
bool m_bshowHull;
|
||
bool m_bshowMainHull; //主船体
|
||
bool m_bshowSpaceElement; //舱室单元体
|
||
|
||
//2016srq
|
||
//map<int,Handle_ISession_Text> m_mapTextFrameDisplay;//肋位号
|
||
//map<int,Handle_ISession_Text> m_mapTextDisplay;//显示文本列表
|
||
//map<int,Handle_ISession_Text>::iterator txtit;
|
||
// DELETE BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
/*
|
||
map<int,AnyCore::ATextNodePtr> m_mapTextFrameDisplay;//肋位号
|
||
map<int,AnyCore::ATextNodePtr> m_mapTextDisplay;//显示文本列表
|
||
|
||
map<int,AnyCore::ATextNodePtr> m_mapCurveNodeTextDisplay;//显示曲线节点序号,20170801 新增 by czb
|
||
map<int,AnyCore::ATextNodePtr>::iterator txtit;
|
||
*/
|
||
// END DELETE
|
||
|
||
//二维CAD图纸边界 Lvxj
|
||
float m_cadLeft;
|
||
float m_cadRight;
|
||
float m_cadTop;
|
||
float m_cadBottom;
|
||
float m_lastCADHeight;
|
||
|
||
// ADDED BY XUEFENG 20180731
|
||
// FOR CODES COMBINE
|
||
/* NOT EXIST IN 7.6.0
|
||
map<int,Handle_Prs3d_Presentation> m_mapTextFrameDisplay;
|
||
map<int,Handle_Prs3d_Presentation> m_mapTextDisplay;
|
||
map<int,Handle_Prs3d_Presentation> m_mapCurveNodeTextDisplay;
|
||
map<int,Handle_Prs3d_Presentation>::iterator txtit;
|
||
*/
|
||
// XUEFENG ADDED for OCC 7.6.0
|
||
map<int,Handle(Prs3d_Presentation)> m_mapTextFrameDisplay;
|
||
map<int,Handle(Prs3d_Presentation)> m_mapTextDisplay;
|
||
map<int,Handle(Prs3d_Presentation)> m_mapCurveNodeTextDisplay;
|
||
map<int,Handle(Prs3d_Presentation)>::iterator txtit;
|
||
// END ADDED
|
||
// END ADDED
|
||
|
||
// XUEFENG ADDED 202009
|
||
// FOR OCC 7.1.0
|
||
// BRepTools::Read need UTF-8 filepath.
|
||
private:
|
||
int preNUm(unsigned char byte);
|
||
bool isUtf8(unsigned char* data, int len);
|
||
bool isGBK(unsigned char* data, int len);
|
||
std::string GbkToUtf8(const char *src_str);
|
||
// END ADDED
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
|