LAMPCAE/src/LAMPTool/FEKOSimulationSARClass.h

259 lines
7.3 KiB
C++

#pragma once
/*
* FEKO_SIMULAION_SAR_CLASS 是适配FEKO成像算法
* FEKOSimulationSARClass
*
*/
#ifndef FEKO_SIMULATION_SAR_CLASS_H
#define FEKO_SIMULATION_SAR_CLASS_H
#include "referenceHeader.h"
#include "OCCTBase.h"
#include "BaseToollib/GeoOperator.h"
#include "SARImage/FEKOBaseToolClass.h"
#include "SARBaseToolLib/SARImageBase.h"
#include <QObject>
namespace FEKOBase {
//==========================================================
// FEKO成像仿真参数类
//==========================================================
class FEKOSimulationDataparams:public QObject
{ // 仿真参数类
Q_OBJECT
public:
FEKOSimulationDataparams(QObject* parent=nullptr);
~FEKOSimulationDataparams();
signals:
void FEKOSimulationDataparamsChanged(); // 响应时间,作为一个参数分发
public: // 频率更新
void CalFEKOSimulationFreqParams(double centerFreq, double resolution, double bandWidth, double scenceRange, bool isResolution = false);
void updateFEKOSimulationFreqParams(double startfreq, double endfreq, size_t freqpoints);
public:
void loadXml(const QString& fileName);
void saveXml(const QString& fileName);
public: // 属性字段
QString taskName; // 任务名称
FEKOImageMode imagemode; // 成像时间
QString AntennaRadiationFileName; // 远程天线等效辐射方向图文件地址
long farsource_thetaPoints;
long farsource_phiPoints;
bool isRight = false; // 是否为右视
double refRange;// 参考距离 m
double incangle; // 入射角 °
double centerFreq; // 中心频率
double rangeResolution;//分辨率
double bandwidth;// 带宽
double startfreq; // 频率参数
double endfreq;
double freqpoints;
//成像场景设置
double x_min;
double x_max;
double y_min;
double y_max;
double z_plane;
size_t imageheight; // 图像高度
size_t imagewidth; // 图像宽度
// 条带模式参数
size_t prfcount; // 脉冲数量
double start_x;
double end_x;
double start_y;
double end_y;
double start_z;
double end_z;
// 扫描模式参数
double start_az_angle; // 扫描起始角
double end_az_angle; // 扫描终止角
// ISAR模式参数 , 圆迹模式参数
double start_circle_angle; // 起始扫描角
double end_circle_angle; // 终止扫描角
double delta_angle;// 扫描角间隔
public:
void setTaskName(QString taskName);
QString getTaskName();
// 成像模式
void setImagemode(FEKOImageMode imagemode);
FEKOImageMode getImagemode();
// 是否为右视
void setIsRight(bool isRight);
bool getIsRight();
// 参考距离
void setRefRange(double refRange);
double getRefRange();
// 入射角
void setIncangle(double incangle);
double getIncangle();
// 中心频率
void setCenterFreq(double centerFreq);
double getCenterFreq();
// 分辨率
void setRangeResolution(double rangeResolution);
double getRangeResolution();
// 带宽
void setBandwidth(double bandwidth);
double getBandwidth();
// 频率参数
void setStartfreq(double startfreq);
double getStartfreq();
void setEndfreq(double endfreq);
double getEndfreq();
void setFreqpoints(double freqpoints);
double getFreqpoints();
// 成像范围
void setX_min(double x_min);
double getX_min();
void setX_max(double x_max);
double getX_max();
void setY_min(double y_min);
double getY_min();
void setY_max(double y_max);
double getY_max();
void setZ_plane(double z_plane);
double getZ_plane();
// 图像高度
void setImageheight(size_t imageheight);
size_t getImageheight();
// 图像宽度
void setImagewidth(size_t imagewidth);
size_t getImagewidth();
// 条带模式参数
void setPRFCount(size_t prfcount);
size_t getPRFCount();
void setStart_x(double start_x);
double getStart_x();
void setEnd_x(double end_x);
double getEnd_x();
void setStart_y(double start_y);
double getStart_y();
void setEnd_y(double end_y);
double getEnd_y();
void setStart_z(double start_z);
double getStart_z();
void setEnd_z(double end_z);
double getEnd_z();
double getStart_az_angle(); // 扫描起始角
double getEnd_az_angle(); // 扫描终止角
double getStart_circle_angle(); // 起始扫描角
double getEnd_circle_angle(); // 终止扫描角
double getDelta_angle();// 扫描角间隔
void setStart_az_angle(double Start_az_angle); // 扫描起始角
void setEnd_az_angle(double End_az_angle); // 扫描终止角
void setStart_circle_angle(double Start_circle_angle); // 起始扫描角
void setEnd_circle_angle(double End_circle_angle); // 终止扫描角
void setDelta_angle(double Delta_angle);// 扫描角间隔
QString getAntennaRadiationFileName();
void setAntennaRadiationFileName( QString path);
long getFarsourceThetaPoints();
void setFarsourceThetaPoints(long thetaPoints);
long getFarsourcePhiPoints();
void setFarsourcePhiPoints(long phiPoints);
};
class FEKOSimulationDataparamsHandler {
public:
FEKOSimulationDataparamsHandler();
~FEKOSimulationDataparamsHandler();
public:
std::shared_ptr<FEKOBase::FEKOSimulationDataparams> simulationparams;
void setFEKOSimulationDataparams(std::shared_ptr<FEKOBase::FEKOSimulationDataparams> simulationparams);
std::shared_ptr<FEKOBase::FEKOSimulationDataparams> getFEKOSimulationDataparams();
public:
virtual void bandingsetFEKOSimulationDataparams();
};
//==========================================================
// FEKO仿真成像参数类
// 解析成像参数xml
//==========================================================
class FEKOSimulationSARClass : public FEKOSimulationDataparamsHandler
{
public:
FEKOSimulationSARClass();
~FEKOSimulationSARClass();
public:
std::vector<FEKOBase::FEKOSatelliteParams> FEKOAntPoselist;// FEKO的天线参数设置
void setFEKOAntPoselist(std::vector<FEKOBase::FEKOSatelliteParams> FEKOAntPoselist); // FEKO的天线参数设置
std::vector<FEKOBase::FEKOSatelliteParams> getFEKOAntPoselist();
public:
void generator_STRIP_FEKOSatelliteParams();
void generator_SCAN_FEKOSatelliteParams();
void generator_ISAR_FEKOSatelliteParams();
void generator_CircleSAR_FEKOSatelliteParams();
void generator_FEKOSatelliteParams();
virtual void refreshFEKOSimulationParams();
public:
QString workSpace; // 工作空间
QString AntennaRadiationPath; // 远程天线等效辐射方向图文件地址
QString xmlpath;
public : // 初始化模型
void loadFEKOImageSettingXML(QString xmlpath);
void saveFEKOImageSettingXML();
QString createLuaSciptString(size_t startprfidx, size_t endprfidx);
};
//==========================================================
// FEKO成像
//==========================================================
bool FEKOImageProcess(EchoDataClass& echodata, FEKOImageSettingParams& imageSettingParams, QString& outPath, FEKOImageAlgorithm algmethod = FEKOImageAlgorithm::TBP_FREQ, ImageAlgWindowFun winfun = ImageAlgWindowFun::HANMMING);
class FEKOImageProcessAbstractClass {
public:
FEKOImageProcessAbstractClass();
~FEKOImageProcessAbstractClass();
private:
EchoDataClass echodata; // 原始回波数据 -
FEKOImageSettingParams imageSettingParams; // 成像参数
FEKOImageAlgorithm algmethod; // 成像算法
QString tiffPath;
public:
// 构建与成员变量有关的属性函数
void setEchoData(EchoDataClass echodata);
EchoDataClass getEchoData() const;
void setImageSettingParams(FEKOImageSettingParams imageSettingParams);
FEKOImageSettingParams getImageSettingParams();
void setAlgmethod(FEKOImageAlgorithm algmethod);
FEKOImageAlgorithm getAlgmethod();
void settiffPath(QString outtiffPath);
QString gettiffPath();
void LoadEchoDataPath(QString echoPath);
public: // 成像参数
bool Imageprocess();
};
};
#endif