mon0l1t

заголовочный файл

Sep 29th, 2020
765
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //---------------------------------------------------------------------------
  2. #include "UCObjectArray.h"
  3. #include "UGPC.h"
  4.  
  5. #ifndef UCFloatPointH
  6. #define UCFloatPointH
  7.  
  8. //---------------------------------------------------------------------------
  9. // ---------------------------------------------------------------------------
  10. class CFloatPoint
  11. {
  12. public:
  13.   CFloatPoint() : m_X(0), m_Y(0), m_Name(""), m_BeginVirez(false), m_PointShov(false),m_IndexShov(-1)/*,m_NameShov("")*/ {  }
  14.  
  15.   CFloatPoint(double x, double y, UnicodeString name = "") : m_X(x), m_Y(y),
  16.   m_Name(name), m_BeginVirez(false), m_PointShov(false),m_IndexShov(-1)/*,m_NameShov("")*/ {  }
  17.  
  18.   CFloatPoint(TPoint p) : m_X(p.x), m_Y(p.y), m_Name(""), m_BeginVirez(false), m_PointShov(false),m_IndexShov(-1)/*,m_NameShov("")*/ {  }
  19.  
  20.   CFloatPoint(CFloatPoint *fp)
  21.   {
  22.     m_X=fp->m_X;
  23.     m_Y=fp->m_Y;
  24.     m_Name=fp->m_Name;
  25.     m_BeginVirez=fp->m_BeginVirez;
  26.     m_PointShov=fp->m_PointShov;
  27. //  m_NameShov=fp->m_NameShov;
  28.     m_IndexShov=fp->m_IndexShov;
  29.   }
  30.  
  31.   void RotatePoint(double angle, bool radian = false);
  32.  
  33.   int DetectNumChetvertByPoint(CFloatPoint p);
  34.   void Minus(double x, double y);
  35.   void ChangeValuesKoef(double kx, double ky, int typek, bool mult = true);
  36.   void ChangeEdinIzm(double k);
  37.  
  38.   double m_X, m_Y;
  39.   UnicodeString m_Name;
  40.   bool m_BeginVirez; // флаг для начала точек для выреза,Ю что бы рисовать с разрывом...
  41.   bool m_PointShov;
  42. //  UnicodeString m_NameShov;//соседняя точка для шва
  43.   int m_IndexShov;
  44. };
  45.  
  46. // ---------------------------------------------------------------------------
  47. class CFloatPointArray : public CObectArray
  48. {
  49. public:
  50.   CFloatPointArray()
  51.   {
  52.     m_GPC = true;
  53.   }
  54.  
  55.   CFloatPointArray(CFloatPointArray *array)
  56.   {
  57.     Append(array);
  58.     m_GPC = true;
  59.   }
  60.   // копируем массив...
  61.   void Append(CFloatPoint p, AnsiString name = "")
  62.   {
  63.     CFloatPoint *tp = GetByXY(p.m_X, p.m_Y);
  64.     if (tp != NULL)
  65.       return;
  66.     CFloatPoint *p1 = new CFloatPoint(p.m_X, p.m_Y);
  67.     p1->m_Name = name;
  68.     Add(p1);
  69.   }
  70.  
  71.   void Append(double x, double y, AnsiString name = "", bool  detectduplicate = true)
  72.   {
  73.     if (detectduplicate)
  74.     {
  75.       CFloatPoint *tp = GetByXY(x, y);
  76.       if (tp != NULL) return;
  77.     }
  78.  
  79.     CFloatPoint *p1 = new CFloatPoint(x, y, name);
  80.     Add(p1);
  81.   }
  82.  
  83.   void Append(CFloatPoint *p1, bool checkduble = true)
  84.   {
  85.     if (checkduble)
  86.     {
  87.       CFloatPoint *tp = GetByXY(p1->m_X, p1->m_Y);
  88.       if (tp != NULL) return;
  89.     }
  90.  
  91.     CFloatPoint *p2 = new CFloatPoint(p1->m_X, p1->m_Y);
  92.     p2->m_Name = p1->m_Name;
  93.     p2->m_BeginVirez = p1->m_BeginVirez;
  94.     Add(p2);
  95.   }
  96.  
  97.   void Append(CFloatPointArray *parray);
  98.   int Insert(int ind, CFloatPoint *p);
  99.  
  100.   void CopyAll(CFloatPointArray *parray);
  101.  
  102.   CFloatPoint *Get(int ind) {
  103.     return(CFloatPoint*)operator[](ind);
  104.   }
  105.   CFloatPoint *GetByXY(double x, double y);
  106.   CFloatPoint *GetByName(AnsiString name);
  107.   CFloatPoint *GetNext(int ind);
  108.   CFloatPoint *GetPrev(int ind);
  109.   CFloatPoint *GetNext(CFloatPoint *p);
  110.   CFloatPoint *GetPrev(CFloatPoint *p);
  111.   int IndexByName(AnsiString name);
  112.   int IndexByPoint(CFloatPoint *p);
  113.  
  114.   bool CheckedLine(double x1, double y1, double x2, double y2);
  115.   double CheckedLineForMFShov(double x1, double y1, double x2, double y2);
  116.  
  117.   void GetGPCPolygon(gpc_polygon *polygon);
  118.   void ConvertGPCPolygon(gpc_polygon polygon);
  119.  
  120.   bool RotateAllPoint(double angle, bool radian = false);
  121.  
  122.   void DetectMinXY(double &x, double &y);
  123.   void DetectMaxXY(double &x, double &y);
  124.   void GetMinMaxXY(CFloatPoint &Min, CFloatPoint &Max);
  125.   void Swap(int ind1, int ind2);
  126.   int Move(int cur, int npos); // return next index; возвращает следующий индекс...
  127.   bool PointInPolygon(double x, double y);
  128.   bool PointInLine(double x,double y,CFloatPoint *fp1,CFloatPoint *fp2);
  129.   bool LineInLine(double x1, double y1,double x2, double y2);
  130.  
  131.   void DeletePointNotPolotno(double shov1, double shov2);
  132.  
  133.   void SortByX();
  134.   void SortByYAndX(); // сортировка для варианта печати координат...
  135.   void SortByXHight(); // сортируем по возрастанию вдоль оси ОХ
  136.   void SortNameInPoints(); // сортирует только имена, а не элименты в целом!!!
  137.   void SortByName();
  138.  
  139.   void ChangeBaseAngle(int PosXY); // меняем нулевую точку для координат...
  140.  
  141.   void DeleteDuplicate();
  142.  
  143.   double CalcPlochad(bool virez = false);
  144.   double CalcPlochadTriangl(CFloatPoint *p1, CFloatPoint *p2, CFloatPoint *p3);
  145.  
  146.   void ChangeValuesKoef(double kx, double ky, int typek, bool mult = true);
  147.  
  148.   void Minus(double x, double y);
  149.   void Invert();
  150.  
  151.   UnicodeString SaveToStr();
  152.   UnicodeString LoadFromString(UnicodeString str);
  153.  
  154.   void SaveToDXF(UnicodeString FileName);
  155.   void ChangeEdinIzm(double k);
  156.   void ChangeEdinIzm(int curtype,int type);
  157.   double SideLength(double x1,double y1,double x2,double y2);
  158.   int GetPointByCircle(double x1, double y1, double r1, double x2, double y2, double r2, double &rx1, double &ry1, double &rx2, double &ry2);  // получаем точки пересечения двух окружностей...
  159.   CFloatPoint *GetCrossPointTwoLine(CFloatPoint p1, CFloatPoint p2, CFloatPoint P1, CFloatPoint P2);
  160.   CFloatPointArray *GetCrossPoint(CFloatPoint P1, CFloatPoint P2, bool line2point = false, bool NotPointLine = false, bool TwinsPoint = false, bool Epsilon = false);
  161.   CFloatPoint *GetCrossPoint(CFloatPoint *p1, CFloatPoint *p2, CFloatPoint P1,CFloatPoint P2, bool line2point = false,bool NotPointLine = false); // line2point - проверка на пренодлежность точки ОТРЕЗКУ
  162.  
  163.   bool m_GPC; // флаг о том что этот массив точек получен путем применения алгоритма GPC при раскрое потолка
  164. };
  165.  
  166. // ---------------------------------------------------------------------------
  167. class CFloatPointArrayArray : public CObectArray {
  168. public:
  169.   CFloatPointArrayArray() {
  170.   }
  171.  
  172.   CFloatPointArrayArray(int q) {
  173.     int i;
  174.     for (i = 0; i < q; i++)
  175.       Append();
  176.   }
  177.   CFloatPointArrayArray(CFloatPointArrayArray *mass);
  178.  
  179.   void Destroy() {
  180.     int i, q = Count;
  181.     for (i = 0; i < q; i++)
  182.       Get(i)->Destroy();
  183.     CObectArray::Destroy();
  184.   }
  185.  
  186.   void Append(CFloatPointArray *flpa) {
  187.     Add(flpa);
  188.   }
  189.   void Append(CFloatPointArrayArray *array);
  190.  
  191.   void Append() {
  192.     CFloatPointArray *flpa = new CFloatPointArray();
  193.     Add(flpa);
  194.   }
  195.  
  196.   CFloatPointArray *Get(int ind) {
  197.     return(CFloatPointArray*)operator[](ind);
  198.   }
  199.  
  200.   bool CheckedLine(double x1, double y1, double x2, double y2);
  201.  
  202.   int GetCountPoints();
  203.  
  204.   void GetMinMaxXY(CFloatPoint &Min, CFloatPoint &Max);
  205.  
  206.   void ChangeValuesKoef(double kx, double ky, int typek, bool mult = true);
  207.  
  208. //  void ConvertGPCPolygon(gpc_polygon polygon);
  209. //  void GetGPCPolygon(gpc_polygon *polygon);
  210.  
  211.   void RotateAllPoint(double angle, bool radian = false);
  212.  
  213.   void SortPointByCentr();
  214.  
  215.   void Minus(double x, double y);
  216.   void Invert();
  217.  
  218.   void ChangeEdinIzm(double k);
  219.   void ChangeEdinIzm(int curtype,int type);
  220.  
  221.   double CalcPlochad();
  222. };
  223.  
  224. #endif
RAW Paste Data