Библиотека myPolyBool

Материал из roboforum.ru Wiki
Версия от 09:04, 19 января 2008; =DeaD= (обсуждение | вклад) (Новая: == Назначение библиотеки == Обеспечить удобные интерфейсные функции для связи объектов POLYBOOLEAN и объек...)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Назначение библиотеки

Обеспечить удобные интерфейсные функции для связи объектов POLYBOOLEAN и объектов графического интерфейса Windows.

Функции (описание)

mybpDrawPAREA

Показать множество многоугольников PAREA на форме. Позволяет передать смещение и масштаб. Пока внутренние области закрашивает белым цветом (не оставлять там то, что должно было остаться).

mybpDrawPLINE2

Показать область PLINE2 на форме заполненную переданным цветом. Позволяет передать смещение и масштаб.

Файлы библиотеки

myPolyBool.h

<source lang="cpp">

  1. ifndef myPolyBoolH
  2. define myPolyBoolH
  3. include "polybool.h"
  4. include <ExtCtrls.hpp>

using namespace POLYBOOLEAN;

void mybpDrawPAREA(TImage* img, PAREA* ar, TColor border, TColor area, int shift_x, int shift_y, int scale); void mybpDrawPLINE2(TImage* img, PLINE2* pl, int shift_x, int shift_y, int scale);

  1. endif

</source>

myPolyBool.cpp

<source lang="cpp">

  1. pragma hdrstop

//---------------------------------------------------------------------------

  1. pragma package(smart_init)
  2. include "myPolyBool.h"

TPoint points[1000]; int size;

void mybpDrawPLINE2(TImage* img, PLINE2* pl, int shift_x, int shift_y, int scale){

 VNODE2* cur=pl->head; size=0;
 while (cur!=NULL){
   points[size].x=cur->g.x*scale+shift_x;
   points[size].y=cur->g.y*scale+shift_y;
   //Memo1->Lines->Add("x="+IntToStr(points[size].x)+" y="+IntToStr(points[size].y));
   size++;
   cur=cur->next;
   if(cur==pl->head){
     points[size].x=cur->g.x*scale+shift_x;
     points[size].y=cur->g.y*scale+shift_y;
     //points[size].x=0;
     //points[size].y=0;
     size++;
     cur=NULL;
   };
 };
 //img->Canvas->MoveTo(points[0].x,points[0].y);
 img->Canvas->Polygon(points,size-1);

};

void mybpDrawPAREA(TImage* img, PAREA* ar, TColor border, TColor area, int shift_x,int shift_y, int scale){

 PAREA* curp=ar;
 while(curp!=NULL){
   img->Canvas->Pen->Color=border;
   img->Canvas->Brush->Color=area;
   PLINE2* cur=curp->cntr;
   while(cur!=NULL){
     mybpDrawPLINE2(img, cur, shift_x, shift_y, scale);
     cur=cur->next;
     img->Canvas->Brush->Color=clWhite;
   };
   curp=curp->f;
   if(curp==ar){curp=NULL;};
 };

};

</source>