else c |= 0x7f00;
}
if(color&0x4)
{ if(a) c |= 0xff0000;
else c |= 0x7f0000;
}
FillColor = c;
continue;
}
if ((op&0xF0)==PIC_END) break;
switch (op)
{ case PIC_FONT:
GetByte(&b,&nFont);
continue;
case PIC_TEXT:
GetByte(&b,&c);
cc[1]='\0';
c='a';
while (c!='\0')
{ GetByte(&b,&c);
cc[0]=c;
TextOut(hdcComp, textSize.x, textSize.y, cc, 1);
}
continue;
case PIC_SIZE:
pic_getCoord(&b,&textSize);
continue;
}
if (op==PIC_MOVE)
{ pic_getCoord(&b,&cpd);//&cp);
cp = cpd;
continue;
}
if (op==PIC_DRAW)
{ pic_getCoord(&b,&pd);
Line(hdcComp,cp.x/PixelSize, cp.y/PixelSize, (int)pd.x/PixelSize,(int)pd.y/PixelSize);
cp.x=pd.x;
cp.y=pd.y;
continue;
}
if (op==PIC_FILL)
{ pic_getop(&b,&n);
for (k=0; k<=n; k++)
{
pic_getCoord(&b,&pd);
Line(hdcComp,cp.x/PixelSize, cp.y/PixelSize, (int)pd.x/PixelSize,(int)pd.y/PixelSize);
cp.x=pd.x;
cp.y=pd.y;
}
continue;
}
if (op==PIC_FILL0)
{ pic_getop(&b,&n);
for (k=0; k<=n; k++)
{
pic_getCoord(&b,&pd);
Line(hdcComp,cp.x/PixelSize, cp.y/PixelSize, (int)pd.x/PixelSize,(int)pd.y/PixelSize);
cp.x=pd.x;
cp.y=pd.y;
}
continue;
} }
fclose(fp);
FillColor = flclr;
return 1;
}
//<-------PIC PROCS
//корректировка отрицательных координат
inline int AdjustC(int c1in[2], int c2in[2])
{ return c2in[0] - c1in[0]/fabs(c1in[1]-c1in[0])*(c2in[1] - c2in[0]);
}
//функция выполняет отсечение линии, заданной координатами(xin[0],yin[0])-(xin[1],yin[1])
inline int ClipLine(int xin[2], int yin[2], int xout[2], int yout[2], int xR, int yB)
{ int xin1[2];
int yin1[2];
int xin2[2];
int yin2[2];
xin2[0] = xin[0];
xin2[1] = xin[1];
yin2[0] = yin[0];
yin2[1] = yin[1];
if(xin2[0] < 0)
{ if(xin2[1] < 0) return 0;//отрезок полностью отсекается
xin1[0] = xin2[0];
xin1[1] = xin2[1];
yin1[0] = yin2[0];
yin1[1] = yin2[1];
yin2[0] = AdjustC(xin1, yin1);
xin2[0] = 0;
}else if(xin2[0] > xR)
{ if(xin2[1] > xR) return 0;
xin1[0] = xin2[1] - xR;
xin1[1] = xin2[0] - xR;
yin1[0] = yin2[1];
yin1[1] = yin2[0];
yin2[0] = AdjustC(xin1, yin1);
xin2[0] = xR;
}
if(yin2[0] < 0)
{ if(yin2[1] < 0) return 0;//отрезок полностью отсекается
xin1[0] = xin2[0];
xin1[1] = xin2[1];
yin1[0] = yin2[0];
yin1[1] = yin2[1];
xin2[0] = AdjustC(yin1, xin1);
yin2[0] = 0;
}else if(yin2[0] > yB)
{ if(yin2[1] > yB) return 0;
yin1[0] = yin2[1] - yB;
yin1[1] = yin2[0] - yB;
xin1[0] = xin2[1];
xin1[1] = xin2[0];
xin2[0] = AdjustC(yin1, xin1);
yin2[0] = yB;
}
if(xin2[1] < 0)
{ if(xin2[0] < 0) return 0;//отрезок полностью отсекается
xin1[0] = xin2[1];
xin1[1] = xin2[0];
yin1[0] = yin2[1];
yin1[1] = yin2[0];
yin2[1] = AdjustC(xin1, yin1);
xin2[1] = 0;
}else if(xin2[1] > xR)
{ if(xin2[0] > xR) return 0;//отрезок полностью отсекается
xin1[0] = xin2[0] - xR;
xin1[1] = xin2[1] - xR;
yin1[0] = yin2[0];
yin1[1] = yin2[1];
yin2[1] = AdjustC(xin1, yin1);
xin2[1] = xR;
}
if(yin2[1] < 0)
{ if(yin2[0] < 0) return 0;//отрезок полностью отсекается
xin1[0] = xin2[1];
xin1[1] = xin2[0];
yin1[0] = yin2[1];
yin1[1] = yin2[0];
xin2[1] = AdjustC(yin1, xin1);
yin2[1] = 0;
}else if(yin2[1] > yB)
{ if(yin2[0] > yB) return 0;//отрезок полностью отсекается
yin1[0] = yin2[0] - yB;
yin1[1] = yin2[1] - yB;
xin1[0] = xin2[0];
xin1[1] = xin2[1];
xin2[1] = AdjustC(yin1, xin1);
yin2[1] = yB;
}
xout[0] = xin2[0];
xout[1] = xin2[1];
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.