Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------
- #include "UCObjectArray.h"
- #include "UGPC.h"
- #ifndef UCFloatPointH
- #define UCFloatPointH
- //---------------------------------------------------------------------------
- // ---------------------------------------------------------------------------
- class CFloatPoint
- {
- public:
- CFloatPoint() : m_X(0), m_Y(0), m_Name(""), m_BeginVirez(false), m_PointShov(false),m_IndexShov(-1)/*,m_NameShov("")*/ { }
- CFloatPoint(double x, double y, UnicodeString name = "") : m_X(x), m_Y(y),
- m_Name(name), m_BeginVirez(false), m_PointShov(false),m_IndexShov(-1)/*,m_NameShov("")*/ { }
- CFloatPoint(TPoint p) : m_X(p.x), m_Y(p.y), m_Name(""), m_BeginVirez(false), m_PointShov(false),m_IndexShov(-1)/*,m_NameShov("")*/ { }
- CFloatPoint(CFloatPoint *fp)
- {
- m_X=fp->m_X;
- m_Y=fp->m_Y;
- m_Name=fp->m_Name;
- m_BeginVirez=fp->m_BeginVirez;
- m_PointShov=fp->m_PointShov;
- // m_NameShov=fp->m_NameShov;
- m_IndexShov=fp->m_IndexShov;
- }
- void RotatePoint(double angle, bool radian = false);
- int DetectNumChetvertByPoint(CFloatPoint p);
- void Minus(double x, double y);
- void ChangeValuesKoef(double kx, double ky, int typek, bool mult = true);
- void ChangeEdinIzm(double k);
- double m_X, m_Y;
- UnicodeString m_Name;
- bool m_BeginVirez; // флаг для начала точек для выреза,Ю что бы рисовать с разрывом...
- bool m_PointShov;
- // UnicodeString m_NameShov;//соседняя точка для шва
- int m_IndexShov;
- };
- // ---------------------------------------------------------------------------
- class CFloatPointArray : public CObectArray
- {
- public:
- CFloatPointArray()
- {
- m_GPC = true;
- }
- CFloatPointArray(CFloatPointArray *array)
- {
- Append(array);
- m_GPC = true;
- }
- // копируем массив...
- void Append(CFloatPoint p, AnsiString name = "")
- {
- CFloatPoint *tp = GetByXY(p.m_X, p.m_Y);
- if (tp != NULL)
- return;
- CFloatPoint *p1 = new CFloatPoint(p.m_X, p.m_Y);
- p1->m_Name = name;
- Add(p1);
- }
- void Append(double x, double y, AnsiString name = "", bool detectduplicate = true)
- {
- if (detectduplicate)
- {
- CFloatPoint *tp = GetByXY(x, y);
- if (tp != NULL) return;
- }
- CFloatPoint *p1 = new CFloatPoint(x, y, name);
- Add(p1);
- }
- void Append(CFloatPoint *p1, bool checkduble = true)
- {
- if (checkduble)
- {
- CFloatPoint *tp = GetByXY(p1->m_X, p1->m_Y);
- if (tp != NULL) return;
- }
- CFloatPoint *p2 = new CFloatPoint(p1->m_X, p1->m_Y);
- p2->m_Name = p1->m_Name;
- p2->m_BeginVirez = p1->m_BeginVirez;
- Add(p2);
- }
- void Append(CFloatPointArray *parray);
- int Insert(int ind, CFloatPoint *p);
- void CopyAll(CFloatPointArray *parray);
- CFloatPoint *Get(int ind) {
- return(CFloatPoint*)operator[](ind);
- }
- CFloatPoint *GetByXY(double x, double y);
- CFloatPoint *GetByName(AnsiString name);
- CFloatPoint *GetNext(int ind);
- CFloatPoint *GetPrev(int ind);
- CFloatPoint *GetNext(CFloatPoint *p);
- CFloatPoint *GetPrev(CFloatPoint *p);
- int IndexByName(AnsiString name);
- int IndexByPoint(CFloatPoint *p);
- bool CheckedLine(double x1, double y1, double x2, double y2);
- double CheckedLineForMFShov(double x1, double y1, double x2, double y2);
- void GetGPCPolygon(gpc_polygon *polygon);
- void ConvertGPCPolygon(gpc_polygon polygon);
- bool RotateAllPoint(double angle, bool radian = false);
- void DetectMinXY(double &x, double &y);
- void DetectMaxXY(double &x, double &y);
- void GetMinMaxXY(CFloatPoint &Min, CFloatPoint &Max);
- void Swap(int ind1, int ind2);
- int Move(int cur, int npos); // return next index; возвращает следующий индекс...
- bool PointInPolygon(double x, double y);
- bool PointInLine(double x,double y,CFloatPoint *fp1,CFloatPoint *fp2);
- bool LineInLine(double x1, double y1,double x2, double y2);
- void DeletePointNotPolotno(double shov1, double shov2);
- void SortByX();
- void SortByYAndX(); // сортировка для варианта печати координат...
- void SortByXHight(); // сортируем по возрастанию вдоль оси ОХ
- void SortNameInPoints(); // сортирует только имена, а не элименты в целом!!!
- void SortByName();
- void ChangeBaseAngle(int PosXY); // меняем нулевую точку для координат...
- void DeleteDuplicate();
- double CalcPlochad(bool virez = false);
- double CalcPlochadTriangl(CFloatPoint *p1, CFloatPoint *p2, CFloatPoint *p3);
- void ChangeValuesKoef(double kx, double ky, int typek, bool mult = true);
- void Minus(double x, double y);
- void Invert();
- UnicodeString SaveToStr();
- UnicodeString LoadFromString(UnicodeString str);
- void SaveToDXF(UnicodeString FileName);
- void ChangeEdinIzm(double k);
- void ChangeEdinIzm(int curtype,int type);
- double SideLength(double x1,double y1,double x2,double y2);
- int GetPointByCircle(double x1, double y1, double r1, double x2, double y2, double r2, double &rx1, double &ry1, double &rx2, double &ry2); // получаем точки пересечения двух окружностей...
- CFloatPoint *GetCrossPointTwoLine(CFloatPoint p1, CFloatPoint p2, CFloatPoint P1, CFloatPoint P2);
- CFloatPointArray *GetCrossPoint(CFloatPoint P1, CFloatPoint P2, bool line2point = false, bool NotPointLine = false, bool TwinsPoint = false, bool Epsilon = false);
- CFloatPoint *GetCrossPoint(CFloatPoint *p1, CFloatPoint *p2, CFloatPoint P1,CFloatPoint P2, bool line2point = false,bool NotPointLine = false); // line2point - проверка на пренодлежность точки ОТРЕЗКУ
- bool m_GPC; // флаг о том что этот массив точек получен путем применения алгоритма GPC при раскрое потолка
- };
- // ---------------------------------------------------------------------------
- class CFloatPointArrayArray : public CObectArray {
- public:
- CFloatPointArrayArray() {
- }
- CFloatPointArrayArray(int q) {
- int i;
- for (i = 0; i < q; i++)
- Append();
- }
- CFloatPointArrayArray(CFloatPointArrayArray *mass);
- void Destroy() {
- int i, q = Count;
- for (i = 0; i < q; i++)
- Get(i)->Destroy();
- CObectArray::Destroy();
- }
- void Append(CFloatPointArray *flpa) {
- Add(flpa);
- }
- void Append(CFloatPointArrayArray *array);
- void Append() {
- CFloatPointArray *flpa = new CFloatPointArray();
- Add(flpa);
- }
- CFloatPointArray *Get(int ind) {
- return(CFloatPointArray*)operator[](ind);
- }
- bool CheckedLine(double x1, double y1, double x2, double y2);
- int GetCountPoints();
- void GetMinMaxXY(CFloatPoint &Min, CFloatPoint &Max);
- void ChangeValuesKoef(double kx, double ky, int typek, bool mult = true);
- // void ConvertGPCPolygon(gpc_polygon polygon);
- // void GetGPCPolygon(gpc_polygon *polygon);
- void RotateAllPoint(double angle, bool radian = false);
- void SortPointByCentr();
- void Minus(double x, double y);
- void Invert();
- void ChangeEdinIzm(double k);
- void ChangeEdinIzm(int curtype,int type);
- double CalcPlochad();
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement