//---------------------------------------------------------------------------
#ifndef MultiSupportH
#define MultiSupportH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
/*
#include <Chart.hpp>
#include <Series.hpp>
#include <TeEngine.hpp>
#include <TeeProcs.hpp>
#include <Dialogs.hpp>
#include <Buttons.hpp>
#include <TeeFunci.hpp>
*/
#include "CSPIN.h"
#include <ComCtrls.hpp>
#include "MultiSupportBeam.h"
#include "WRData_Check.h"
//#include "WRData_Dll.h"
#include "GArrow.h"
#include <Grids.hpp>
#include <CheckLst.hpp>
#include <Vcl.Buttons.hpp>
#include <Vcl.Dialogs.hpp>
#include <VCLTee.Chart.hpp>
#include <VCLTee.Series.hpp>
#include <VCLTee.TeeFunci.hpp>
#include <VclTee.TeeGDIPlus.hpp>
#include <VCLTee.TeEngine.hpp>
#include <VCLTee.TeeProcs.hpp>

#define PORTION_REGION 100  // начальный размер массива регионов
#define MAX_BEAM_DATA  100  // Максимальное количество моделей балок в депозитарии

class TData3
{
   public:
     AnsiString Variant;
     AnsiString Function[100];
     AnsiString Koeff;
     TColor Color;
     AnsiString ItemSign;
     int Nfun;
};
//---------------------------------------------------------------------------
class TMultiSupportForm : public TForm
{
__published:	// IDE-managed Components
    TChart *Chart1;
    TLineSeries *Series1;
    TBitBtn *BitBtnChoiceColor;
    TShape *Shape1;
    TColorDialog *ColorDialog1;
    TComboBox *ComboBoxKoeff;
        TLineSeries *Series2;
        TLineSeries *Series3;
        TAverageTeeFunction *TeeFunction1;
        TLineSeries *Series4;
        TLineSeries *Series5;
        TLineSeries *Series6;
        TLineSeries *Series7;
        TLineSeries *Series8;
        TCSpinEdit *CSpinEditLineWidth;
        TGroupBox *GroupBoxGraph;
        TPageControl *PageControl1;
        TTabSheet *TabSheetSourse;
        TTabSheet *TabSheetResult;
        TBitBtn *BitBtn_Add;
        TBitBtn *BitBtnDelete;
        TBitBtn *BitBtn_Insert;
        TGroupBox *GroupBox_Source;
        TBitBtn *BitBtn_Calculate;
        TBitBtn *BitBtnCancel;
        TStringGrid *StringGrid_param;
        TPanel *Panel2;
        TListBox *ListBox1;
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TBitBtn *BitBtnOutEMF;
        TBitBtn *BitBtn_Replace;
	TImage *Image1;
	TPageControl *PageControl_Param;
	TTabSheet *TabSheet_ConcentrLoad;
	TTabSheet *TabSheet_LinearLoad;
	TLabel *Label_x0;
	TLabel *Label_Len;
	TLabel *Label_p1;
	TLabel *Label_p2;
	TEdit *Edit_x0;
	TEdit *Edit_Len;
	TCheckBox *CheckBox_Linear;
	TEdit *Edit_p1;
	TEdit *Edit_p2;
	TTabSheet *TabSheet_Constraint;
	TLabel *Label_X0Constr;
	TEdit *Edit_X0Constr;
	TGroupBox *GroupBox4;
	TCheckBox *CheckBox_Tz;
	TCheckBox *CheckBox_Ry;
	TCheckBox *CheckBox_Tx;
	TLabel *Label_X0Load;
	TLabel *Label_Fz;
	TLabel *Label_My;
	TEdit *Edit_X0Load;
	TEdit *Edit_Fz;
	TEdit *Edit_My;
	TLabel *Label_Fx;
	TEdit *Edit_Fx;
	TLabel *Label_Length;
	TEdit *Edit_Length;
	TTabSheet *TabSheet_DistrN;
	TLabel *Label7;
	TLabel *Label8;
	TLabel *Label9;
	TLabel *Label10;
	TEdit *Edit2;
	TEdit *Edit3;
	TCheckBox *CheckBox1;
	TEdit *Edit4;
	TEdit *Edit5;
    void __fastcall BitBtnChoiceColorClick(TObject *Sender);
    void __fastcall ComboBoxKoeffChange(TObject *Sender);
        void __fastcall CSpinEditLineWidthChange(TObject *Sender);
        void __fastcall BitBtnCloseClick(TObject *Sender);
        void __fastcall BitBtnCancelClick(TObject *Sender);
        void __fastcall BitBtn_AddClick(TObject *Sender);
        void __fastcall FormShow(TObject *Sender);
        void __fastcall CheckBox_LinearClick(TObject *Sender);
        void __fastcall Edit_p1Change(TObject *Sender);
        void __fastcall BitBtn_CalculateClick(TObject *Sender);
        void __fastcall BitBtn_NewClick(TObject *Sender);
        void __fastcall printExtremum (MultiSupportBeam oneFE);
        int __fastcall OpenBeamData(FILE* BD_file);
        int __fastcall SaveBeamData(FILE* BD_file);
        void __fastcall Alloc_region(int n_reg);
        void __fastcall ReAlloc_region(int n_reg);
        void __fastcall Free_region();
        int __fastcall Get_beam_data(int k);
        int __fastcall Write_beam_data(int k, FData * data1);
        int __fastcall Read_beam_data(int k, FData * data1);
        void __fastcall LoadDataToGrid_param(int type_param);
        void __fastcall BitBtnDeleteClick(TObject *Sender);
        double __fastcall CalcLengthBeam();
        void __fastcall BeamRegionToGrid_param(BeamRegion br, int index_row);
        void __fastcall LoadToGrid_param(Load ld, int index_row);
        void __fastcall ConstraintToGrid_param(Constraint cn, int index_row);
        void __fastcall StringGrid_paramSelectCell(TObject *Sender,
          int ACol, int ARow, bool &CanSelect);
        void __fastcall  CheckRegion_at_Put(BeamRegion *P_v, int iP, int P_length, int k, int nP);
        void __fastcall  CheckLoad_at_Put(Load *P_v, int iP, int P_length, int k, int nP);
        void __fastcall  CheckConstraint_at_Put(Constraint *P_v, int iP, int P_length, int k, int nP);
        void __fastcall Draw_beam();
        void __fastcall Draw_opora(double zero_px, double zero_py, int i, float scale );
        void __fastcall Shtrih(TPoint *points, float s_s, float mx, float my);
        int __fastcall LoadDataFromGrid_param();
        void __fastcall BitBtn_InsertClick(TObject *Sender);
        void __fastcall Draw_load(double zero_px, double zero_py, int i, float scale, float scale_load);
        void __fastcall Draw_q_or_kp(AnsiString Name, TColor color, float mult, BeamRegion* Ar, double zero_px, double zero_py, int i, float scale, float scale_load, float step);
        void __fastcall printResult(double X);
        void __fastcall GetResult(int n_break);
        void __fastcall DrawOut(int nfun, int n_result, int *index);
        void __fastcall ListBox1Click(TObject *Sender);
        void __fastcall BitBtnOutEMFClick(TObject *Sender);
        void __fastcall BitBtnOutGrapClick(TObject *Sender);
        void __fastcall BitBtnCancel2Click(TObject *Sender);
        void __fastcall Draw_N(TColor colorPen, TColor colorBrush, BeamRegion* Ar, double zero_px, double zero_py, int i, float scale, float scale_load, float step);
        int __fastcall  LoadDataFromGrid_ToText();
        void __fastcall BitBtn_ReplaceClick(TObject *Sender);
        void __fastcall InsertToGridFromText(int index_row);
	void __fastcall PageControl_ParamChange(TObject *Sender);

private:	// User declarations
     TArrow CoorAx;
     float **matr_result;
     float *x_result;
     int n_result;
     int n_fun;
     int index_fun[6];
     float Max_Value[6];
     float Min_Value[6];
     float Max_X[6];
     float Min_X[6];
     int Margins;
     int HText;
     int StepGrid;


public:		// User declarations
	__fastcall TMultiSupportForm(TComponent* Owner);
	TData3 *Data;
	int index_portion;
	char NameBeam[80];
	BeamRegion* EI;  // Регионы поперечной жесткости
	BeamRegion* q_;  // Регионы погонной поперечной нагрузки
	BeamRegion* N_;  // Регионы эпюры продольных сил
	BeamRegion* m_;  // Регионы погонного момента
	BeamRegion* kp;  // Регионы погонной жесткости упругого основания
	BeamRegion* Arbit;  // Обобщенные регионы
	int *index_place;   // Приложение нагрузки
	double *dist;       // дистанция
	int       *A_length;
	Load*    loads;         // Точки задания сосредоточенных нагрузок
	Constraint* constr;     // Точки задания связей (опор)
	MultiSupportBeam beam_mod;
	int type_region;
	bool flag_rigid;   // true - если закреплений НЕ хватает для исключения перемещений ТТ
	int n_beam;        // число балок в депозитарии
	int k_beam;        // номер текущей балки
	double Length_beam;
	// Депозитарий
	BeamRegion* EI_v;  // Регионы поперечной жесткости
	BeamRegion* q_v;  // Регионы погонной поперечной нагрузки
	BeamRegion* N_v;  // Регионы эпюры продольных сил
	BeamRegion* m_v;  // Регионы погонного момента
	BeamRegion* kp_v;  // Регионы погонной жесткости упругого основания
	Load*    loads_v;         // Точки задания сосредоточенных нагрузок
	Constraint* constr_v;     // Точки задания связей (опор)
	int *index_place_v;   // Приложение нагрузки
	double *dist_v;       // дистанция

	int SelectRow;
	char NameBeam_v[MAX_BEAM_DATA*80];
	int  index_beam[MAX_BEAM_DATA][7];
	int Len_v;               // текущай размер депозитария

};
//---------------------------------------------------------------------------
extern PACKAGE TMultiSupportForm *MultiSupportForm;
void DrawOut(int);
//---------------------------------------------------------------------------

#endif
