//--------------------------------------------------------------------------- #include #pragma hdrstop #include "N3DPattern.h" #include "N3DMapping.h" #include "MainImage.h" #include "Data3D2.h" #include "LogData.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "TNumEdit" #pragma link "RzButton" #pragma link "RzPanel" #pragma link "RzEdit" #pragma link "RzLabel" #pragma link "RzListVw" #pragma resource "*.dfm" //--------------------------------------------------------------------------- #define IDS_NEW3DPATTERN StringTable[0] #define IDS_PATTERN_VIEW StringTable[1] #define IDS_PATTERN_CTRL StringTable[2] #define IDS_NEW_PATTERN StringTable[3] #define IDS_DELETE_PATTERN StringTable[4] #define IDS_READ_PATTERN StringTable[5] #define IDS_XRATIO StringTable[6] #define IDS_YRATIO StringTable[7] #define IDS_PATTERN StringTable[8] #define IDS_GRID StringTable[9] //--------------------------------------------------------------------------- #define HEIGHT1 338 #define WIDTH1 527 //--------------------------------------------------------------------------- TN3DPatternForm *N3DPatternForm; //--------------------------------------------------------------------------- __fastcall TN3DPatternForm::TN3DPatternForm(TComponent* Owner) : TForm(Owner) { lastclick = 0; //============================================================================== StringTable.Create(DirectoryItem, Language, "N3DPat"); SetSmallFont(Font); Caption = IDS_NEW3DPATTERN; gbImageView->Caption = IDS_PATTERN_VIEW; gbPattern->Caption = IDS_PATTERN_CTRL; sbNewGroup->Caption = IDS_NEW_PATTERN; sbDeleteGroup->Caption = IDS_DELETE_PATTERN; sbLoadPattern->Caption = IDS_READ_PATTERN; lbXRatio->Caption = IDS_XRATIO; lbYRatio->Caption = IDS_YRATIO; //============================================================================== } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::SetFont() { SetSmallFont(Font); } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::FormCreate(TObject *Sender) { OpenDialog->Filter = "Texpro Textile 256 Colors File (*.tex)|*.tex|" "Texpro Textile Full Colors File (*.tfc)|*.tfc|" "Texpro Weave File (*.wea)|*.wea|" "Texpro Weave File - V7.01 (*.wav)|*.wav|" "Texpro Knit File (*.knt)|*.knt|" "Microsoft Windows Bitmap (*.bmp)|*.bmp|" "JPEG (*.jpg)|*.jpg|" "Macintosh PICT (*.pct)|*.pct|" "PC Paintbrush File Format (*.pcx)|*.pcx|" "PNG (*.png)|*.png|PSD (*.psd)|*.psd|" "SUN Raster (*.ras)|*.ras|" "Targa Image File (*.tga)|*.tga|" "TIFF uncomp (*.tif)|*.tif|" "Encapsulated PostScript File (*.eps)|*.eps|" "Drawing Interchange File Format (*.dxf)|*.dxf|" "Texpro Pile File (*.pil)|*.pil"; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::OpenDialogShow(TObject *Sender) { BEGIN_LOG("::"); RECT r=Rect(0,0,Image->Width,Image->Height); Image->Canvas->Brush->Color = clBtnFace; Image->Canvas->FillRect(r); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::OpenDialogSelectionChange(TObject *Sender) { BEGIN_LOG("::"); /* String fn = OpenDialog->FileName; String fn1 = ExtractFileDir(fn); String fn2 = ExtractFileName(fn); String ext = LowerCase(ExtractFileExt(fn)); */ String fn = OpenDialog->FileName; String fn1 = ExtractFileDir(fn); String fn2 = ExtractFileName(fn); String ext = LowerCase(ExtractFileExt(fn)); TGraphicFileFormat Index = FindExtension(String(ext)); TGraphicFileFormat gff = Index; HANDLE hFile = INVALID_HANDLE_VALUE; TTexpiaBitmap *TexBitmap = NULL; TEXPIAFILEHEADER tpfh; TPalette *Palette = NULL; HDC dcSrc = NULL; TPException ec = EC_NONE; FILETIME fLocTime; typedef struct { // ³¯Â¥, ½Ã°£ ±¸Á¶Ã¼ WORD Day:5; WORD Month:4; WORD Year:7; } DOSDATE; typedef struct { WORD Second:5; WORD Minute:6; WORD Hour:5; } DOSTIME; DOSDATE Date, Date2, Date3; DOSTIME Time, Time2, Time3; BY_HANDLE_FILE_INFORMATION info; // info ¿¡ ÆÄÀÏ Á¤º¸µéÀÌ ÀÔ·Â if ((Palette = new TPalette) == NULL) goto next; if ((TexBitmap = new TTexpiaBitmap) == NULL) goto next; if (Index==gffTEX || Index==gffTFC) { if ((hFile = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto next; if ((ec = LoadFromTexpiaFile(hFile, Palette, tpfh, TexBitmap, Index)) != EC_NONE) goto fail; } else if (Index==gffWEA || Index==gffWAV || Index==gffKNT /*|| Index == gffPIL*/) { if ((hFile = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto next; if ((ec = LoadFromTexpiaFile(hFile, Palette, tpfh, TexBitmap, Index, false)) != EC_NONE) goto fail; } else { if (!TexBitmap->LoadFromFile(fn)) goto next; if ((hFile = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto next; } if ((dcSrc = TexBitmap->CreateDC())==NULL) goto next; SetStretchBltMode(Image->Canvas->Handle, COLORONCOLOR); StretchBlt(Image->Canvas->Handle,0,0,Image->Width,Image->Height, dcSrc,0,0,TexBitmap->Width,TexBitmap->Height,SRCCOPY); TexBitmap->DeleteDC(dcSrc); dcSrc = NULL; GetFileInformationByHandle (hFile , &info); FileTimeToLocalFileTime ( &info.ftCreationTime , &fLocTime); // Áö¿ª ½Ã°£À¸·Î º¯È¯ FileTimeToDosDateTime (&fLocTime , (WORD*)&Date , (WORD*)&Time); // Dos TimeÀ¸·Î º¯È¯ FileTimeToLocalFileTime ( &info.ftLastWriteTime , &fLocTime); FileTimeToDosDateTime (&fLocTime , (WORD*)&Date2 , (WORD*)&Time2); FileTimeToLocalFileTime ( &info.ftLastAccessTime , &fLocTime); FileTimeToDosDateTime (&fLocTime , (WORD*)&Date3 , (WORD*)&Time3); edFileName->Text = fn;//fn1+String('\n')+fn2; /* lbImageSize->Caption = FormatFloat ("#,##0",info.nFileSizeLow) + " Bytes"; if (Date.Month == 0) { lbImageCreateTime->Caption = "(Unknown)"; } else { lbImageCreateTime->Caption = Format ( "%2d-%2d-%d %2d : %2d : %2d",OPENARRAY(TVarRec, (Date.Month, Date.Day, (Date.Year+1980), Time.Hour, Time.Minute, Time.Second))) ; } lbImageChangeTime->Caption = Format ( "%2d-%2d-%d %2d : %2d : %2d",OPENARRAY(TVarRec, (Date2.Month, Date2.Day, (Date2.Year+1980), Time2.Hour, Time2.Minute, Time2.Second))) ; */ CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; Image->Invalidate(); next: if(Palette) delete Palette; if(TexBitmap) delete TexBitmap; END_LOG; return; fail: if(Palette) delete Palette; if(TexBitmap) delete TexBitmap; EXCEPTION_MESSAGE_OK(ec); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::lvGridClick(TObject *Sender) { BEGIN_LOG("::"); lastclick = 1; RECT r=Rect(0,0,Image->Width,Image->Height); Image->Canvas->Brush->Color = clBtnFace; Image->Canvas->FillRect(r); if(!MainImageForm||!MainImageForm->new3d) { END_LOG; return; } TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt!=TYPE_T3CP||((T3CP *)ptr)->Activated==false) { END_LOG; return; } T3CP *t3cp = (T3CP *)ptr; if(lvGrid->Selected==NULL) { END_LOG; return; } //TListItem *pItem = lvGrid->Selected; TListItem *pItem = lvGrid->Selected; TData3D2 *data3d2 = (TData3D2 *)t3cp->ListOfData3D2->Items[pItem->Index]; HDC dcDst = NULL; PatternGroup *pg = NULL; if(t3cp->ListOfPatternGroup->Count>data3d2->IndexOfPatternGroup&&data3d2->IndexOfPatternGroup>=0){ pg = (PatternGroup *)t3cp->ListOfPatternGroup->Items[data3d2->IndexOfPatternGroup]; } edXRatio->Value = data3d2->XRatio; edYRatio->Value = data3d2->YRatio; t3cp->IndexOfData3D2 = pItem->Index; N3DMappingForm->UpdateGB(); if(pg&&pg->Pattern){ if ((dcDst = pg->Pattern->CreateDC())==NULL) { END_LOG; return; } SetStretchBltMode(Image->Canvas->Handle, COLORONCOLOR); StretchBlt(Image->Canvas->Handle, 0, 0, Image->Width,Image->Height, dcDst, 0, 0, pg->Pattern->Width, pg->Pattern->Height, SRCCOPY); pg->Pattern->DeleteDC(dcDst); dcDst = NULL; } Image->Repaint(); MainImageForm->iMainImage->Repaint(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::UpdateAll(){ BEGIN_LOG("::"); //Image->Canvas->Brush->Color = clBtnFace; //Image->Canvas->FillRect(Rect(0,0,Image->Width,Image->Height)); //edXRatio->Value=100; //edYRatio->Value=100; //ilG->Clear(); //ilP->Clear(); //lvGrid->Items->Clear(); //lvPattern->Items->Clear(); TN3D *new3d = NULL; TN3DMemberType mt; LPVOID ptr=NULL; T3CP *t3cp=NULL; Graphics::TBitmap *Bitmap = NULL; //TListItem *pItem; TListItem *pItem; HDC dc = NULL; TPException ec = EC_NONE; if(!MainImageForm||!MainImageForm->new3d) goto fail2; new3d = MainImageForm->new3d; new3d->SeekType(new3d->AMI, mt, ptr); if(mt!=TYPE_T3CP||((T3CP *)ptr)->Activated==false) goto fail2; t3cp = (T3CP *)ptr; for (int i=0; iListOfData3D2->Count; i++) { Bitmap = new Graphics::TBitmap; Bitmap->PixelFormat = pf24bit; Bitmap->Width = 80; Bitmap->Height = 100; TData3D2 *data3d2 = (TData3D2 *)t3cp->ListOfData3D2->Items[i]; PatternGroup *pg = NULL; if(t3cp->ListOfPatternGroup->Count>data3d2->IndexOfPatternGroup&&data3d2->IndexOfPatternGroup>=0){ pg = (PatternGroup *)t3cp->ListOfPatternGroup->Items[data3d2->IndexOfPatternGroup]; } if(pg&&pg->Pattern){ if ((dc = pg->Pattern->CreateDC())==NULL) { ec = EC_RESOURCE_LACK; SAVE_EXCEPTION(ec); goto fail; } SetStretchBltMode(Bitmap->Canvas->Handle, COLORONCOLOR); StretchBlt(Bitmap->Canvas->Handle, 0, 0, Bitmap->Width, Bitmap->Height, dc, 0, 0, pg->Pattern->Width, pg->Pattern->Height, SRCCOPY); pg->Pattern->DeleteDC(dc); dc = NULL; } else { Bitmap->Canvas->Brush->Color = clWhite; Bitmap->Canvas->FillRect(Rect(0,0,Bitmap->Width,Bitmap->Height)); } if(ilG->Count>i){ ilG->Replace(i, Bitmap, NULL); } else { ilG->Add(Bitmap, NULL); } if(lvGrid->Items->Count>i){ pItem = lvGrid->Items->Item[i]; } else { pItem = lvGrid->Items->Add(); } pItem->ImageIndex = pItem->Index; pItem->Caption = String(IDS_GRID+" : "+IntToStr(i)); delete Bitmap; Bitmap = NULL; } while(ilG->Count>t3cp->ListOfData3D2->Count){ ilG->Delete(ilG->Count-1); } while(lvGrid->Items->Count>t3cp->ListOfData3D2->Count){ lvGrid->Items->Delete(lvGrid->Items->Count-1); } for (int i=0; iListOfPatternGroup->Count; i++) { Bitmap = new Graphics::TBitmap; Bitmap->PixelFormat = pf24bit; Bitmap->Width = 80; Bitmap->Height = 100; PatternGroup *pg = (PatternGroup *)t3cp->ListOfPatternGroup->Items[i]; if(pg&&pg->Pattern){ if ((dc = pg->Pattern->CreateDC())==NULL) { ec = EC_RESOURCE_LACK; SAVE_EXCEPTION(ec); goto fail; } SetStretchBltMode(Bitmap->Canvas->Handle, COLORONCOLOR); StretchBlt(Bitmap->Canvas->Handle, 0, 0, Bitmap->Width, Bitmap->Height, dc, 0, 0, pg->Pattern->Width, pg->Pattern->Height, SRCCOPY); pg->Pattern->DeleteDC(dc); dc = NULL; } else { Bitmap->Canvas->Brush->Color = clWhite; Bitmap->Canvas->FillRect(Rect(0,0,Bitmap->Width,Bitmap->Height)); } if(ilP->Count>i){ ilP->Replace(i, Bitmap, NULL); } else { ilP->Add(Bitmap, NULL); } if(lvPattern->Items->Count>i){ pItem = lvPattern->Items->Item[i]; } else { pItem = lvPattern->Items->Add(); } pItem->ImageIndex = pItem->Index; pItem->Caption = String(IDS_PATTERN+" : "+IntToStr(i)); delete Bitmap; Bitmap = NULL; } while(ilP->Count>t3cp->ListOfPatternGroup->Count){ ilP->Delete(ilP->Count-1); } while(lvPattern->Items->Count>t3cp->ListOfPatternGroup->Count){ lvPattern->Items->Delete(lvPattern->Items->Count-1); } END_LOG; return; fail: if (Bitmap) delete Bitmap; EXCEPTION_MESSAGE_OK(ec); END_LOG; return; fail2: Image->Canvas->Brush->Color = clBtnFace; Image->Canvas->FillRect(Rect(0,0,Image->Width,Image->Height)); edXRatio->Value=100; edYRatio->Value=100; ilG->Clear(); ilP->Clear(); lvGrid->Items->Clear(); lvPattern->Items->Clear(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::FormResize(TObject *Sender) { BEGIN_LOG("::"); ClientHeight = HEIGHT1; if(ClientWidthWidth; static int edFileName_w = edFileName->Width; lvGrid->Width = lvGrid_w+ClientWidth-WIDTH1; lvPattern->Width = lvGrid_w+ClientWidth-WIDTH1; edFileName->Width = edFileName_w+ClientWidth-WIDTH1; lvGrid->Arrange(4/*arDefault*/); lvPattern->Arrange(4/*arDefault*/); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::FormPaint(TObject *Sender) { // } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::lvPatternClick(TObject *Sender) { BEGIN_LOG("::"); lastclick = 2; RECT r=Rect(0,0,Image->Width,Image->Height); Image->Canvas->Brush->Color = clBtnFace; Image->Canvas->FillRect(r); if(!MainImageForm||!MainImageForm->new3d) { END_LOG; return; } TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt!=TYPE_T3CP||((T3CP *)ptr)->Activated==false) { END_LOG; return; } T3CP *t3cp = (T3CP *)ptr; if(lvPattern->Selected==NULL) { END_LOG; return; } //TListItem *pItem = lvPattern->Selected; TListItem *pItem = lvPattern->Selected; HDC dcDst = NULL; PatternGroup *pg = NULL; if(t3cp->ListOfPatternGroup->Count>pItem->Index&&pItem->Index>=0){ pg = (PatternGroup *)t3cp->ListOfPatternGroup->Items[pItem->Index]; } edXRatio->Value = pg->XRatio; edYRatio->Value = pg->YRatio; if(pg&&pg->Pattern){ if ((dcDst = pg->Pattern->CreateDC())==NULL) { END_LOG; return; } SetStretchBltMode(Image->Canvas->Handle, COLORONCOLOR); StretchBlt(Image->Canvas->Handle, 0, 0, Image->Width,Image->Height, dcDst, 0, 0, pg->Pattern->Width, pg->Pattern->Height, SRCCOPY); pg->Pattern->DeleteDC(dcDst); dcDst = NULL; } Image->Repaint(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::edXRatioClick(TObject *Sender) { BEGIN_LOG("::"); edXRatio->SetFocus(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::edYRatioClick(TObject *Sender) { BEGIN_LOG("::"); edYRatio->SetFocus(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::edYRatioKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { BEGIN_LOG("::"); if(!MainImageForm||!MainImageForm->new3d) { END_LOG; return; } TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt!=TYPE_T3CP||((T3CP *)ptr)->Activated==false) { END_LOG; return; } T3CP *t3cp = (T3CP *)ptr; if(lastclick==1&&lvGrid->Selected){ //TListItem *pItem = lvGrid->Selected; TListItem *pItem = lvGrid->Selected; TData3D2 *data3d2 = NULL; if(t3cp->ListOfData3D2->Count>pItem->Index&&pItem->Index>=0){ data3d2 = (TData3D2 *)t3cp->ListOfData3D2->Items[pItem->Index]; } if (Key == VK_RETURN) { int v = edYRatio->Value; if(v<1) v = 1; edYRatio->Value = v; data3d2->YRatio = v; } } else if(lastclick==2&&lvPattern->Selected){ //TListItem *pItem = lvPattern->Selected; TListItem *pItem = lvPattern->Selected; PatternGroup *pg = NULL; if(t3cp->ListOfPatternGroup->Count>pItem->Index&&pItem->Index>=0){ pg = (PatternGroup *)(t3cp->ListOfPatternGroup->Items[pItem->Index]); } if (pg && Key==VK_RETURN) { int v = edYRatio->Value; if(v<1) v = 1; edYRatio->Value = v; pg->YRatio = v; } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::edXRatioKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { BEGIN_LOG("::"); if(!MainImageForm||!MainImageForm->new3d) { END_LOG; return; } TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt!=TYPE_T3CP||((T3CP *)ptr)->Activated==false) { END_LOG; return; } T3CP *t3cp = (T3CP *)ptr; if(lastclick==1&&lvGrid->Selected){ //TListItem *pItem = lvGrid->Selected; TListItem *pItem = lvGrid->Selected; TData3D2 *data3d2 = NULL; if(t3cp->ListOfData3D2->Count>pItem->Index&&pItem->Index>=0){ data3d2 = (TData3D2 *)t3cp->ListOfData3D2->Items[pItem->Index]; } if (Key == VK_RETURN) { int v = edXRatio->Value; if(v<1) v = 1; edXRatio->Value = v; data3d2->XRatio = v; edYRatio->SetFocus(); } } else if(lastclick==2&&lvPattern->Selected){ //TListItem *pItem = lvPattern->Selected; TListItem *pItem = lvPattern->Selected; PatternGroup *pg = NULL; if(t3cp->ListOfPatternGroup->Count>pItem->Index&&pItem->Index>=0){ pg = (PatternGroup *)(t3cp->ListOfPatternGroup->Items[pItem->Index]); } if (pg && Key==VK_RETURN) { int v = edXRatio->Value; if(v<1) v = 1; edXRatio->Value = v; pg->XRatio = v; edYRatio->SetFocus(); } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::sbNewGroupClick(TObject *Sender) { BEGIN_LOG("::"); sbDeleteGroup->Down=false; sbLoadPattern->Down=false; if(!MainImageForm) { END_LOG; return; } TPException ec = EC_NONE; TEXPIAFILEHEADER tpfh; HANDLE hFile = INVALID_HANDLE_VALUE; TTexpiaBitmap *tb = NULL; //String fn, ext; String fn, ext; TGraphicFileFormat ExtIndex; TGraphicFileFormat gff; if(MainImageForm->new3d){ TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt==TYPE_T3CP&&((T3CP *)ptr)->Activated){ TData3D2 *data3d2 = (TData3D2 *)((T3CP *)ptr)->ListOfData3D2->Items[((T3CP *)ptr)->IndexOfData3D2]; if(!OpenDialog->Execute()) { N3DMappingForm->UpdateGB(); UpdateAll(); END_LOG; return; } if ((tb = new TTexpiaBitmap)==NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } PatternGroup *pg = NULL; pg = new PatternGroup; if(((T3CP *)ptr)->ListOfPatternGroup->Count){ PatternGroup *pg0 = (PatternGroup *)((T3CP *)ptr)->ListOfPatternGroup->Items[0]; pg->transparentPattern = pg0->transparentPattern; } ((T3CP *)ptr)->ListOfPatternGroup->Add(pg); if(pg->Pattern==NULL){ pg->Pattern = new TTexpiaBitmap; } if(pg->Palette==NULL){ pg->Palette = new TPalette; } pg->pal_exist = true; fn = OpenDialog->FileName; ext = LowerCase(ExtractFileExt(fn)); ExtIndex = FindExtension(String(ext)); gff = ExtIndex; if (ExtIndex == gffTEX || ExtIndex == gffTFC ){ if((hFile = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if((ec = LoadFromTexpiaFile(hFile, pg->Palette, tpfh, tb, ExtIndex))!=EC_NONE) goto fail; CloseHandle(hFile); } else if (ExtIndex==gffWEA || ExtIndex==gffWAV || ExtIndex==gffKNT /*|| ExtIndex == gffPIL*/) { if (!FileExists(fn)) { ec = EC_FILE_NOT_EXIST; SAVE_EXCEPTION(ec); goto fail; } if ((hFile = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((ec = LoadFromTexpiaFile(hFile, pg->Palette, tpfh, tb, ExtIndex, false))!= EC_NONE) goto fail; CloseHandle(hFile); } else { if (!tb->LoadFromFile(fn)) goto fail; } RGBQUAD rgb[256]; pg->Palette->ToRGBQUAD(rgb,256); if(tb->BitsPerPixel==8){ pg->Pattern->Create(tb->Width, tb->Height, tb->BitsPerPixel, rgb); } else { pg->Pattern->Create(tb->Width, tb->Height, tb->BitsPerPixel); } pg->Pattern->Copy(tb, SRCCOPY); delete tb; N3DMappingForm->UpdateGB(); UpdateAll(); lvPattern->Arrange(4/*arDefault*/); } } END_LOG; return; fail: CloseHandle(hFile); delete tb; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::FormShow(TObject *Sender) { BEGIN_LOG("::"); static bool first=true; if(first){ //createform¿¡ ³ÖÀ¸¸é parent°¡ MainFormÀÌ ¾Æ´Ï¶ó¼­ ÁÂÇ¥ÀÌ»ó //createform»ó¿¡¼­´Â ¾ÆÁ÷ Àü¿ªº¯¼ö MainFormÀÌ ÃʱâÈ­ µÇÁö ¾ÊÀº »óÅ Top = N3DMappingForm->Top+N3DMappingForm->Height; Left = N3DMappingForm->Left; first=false; } UpdateAll(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::lvPatternDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { Accept=false; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::lvPatternDragDrop(TObject *Sender, TObject *Source, int X, int Y) { // } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::lvGridDragDrop(TObject *Sender, TObject *Source, int X, int Y) { BEGIN_LOG("::"); if(!MainImageForm||!MainImageForm->new3d) { END_LOG; return; } MainImageForm->Modify=true; TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt!=TYPE_T3CP||((T3CP *)ptr)->Activated==false) { END_LOG; return; } T3CP *t3cp = (T3CP *)ptr; if(lvGrid->DropTarget==NULL) { END_LOG; return; } if(lvPattern->Selected==NULL) { END_LOG; return; } TData3D2 *data3d2 = NULL; PatternGroup *pg = NULL; if(t3cp->ListOfData3D2->Count>lvGrid->DropTarget->Index&&lvGrid->DropTarget->Index>=0){ data3d2 = (TData3D2 *)t3cp->ListOfData3D2->Items[lvGrid->DropTarget->Index]; } if(t3cp->ListOfPatternGroup->Count>lvPattern->Selected->Index&&lvPattern->Selected->Index>=0){ pg = (PatternGroup *)t3cp->ListOfPatternGroup->Items[lvPattern->Selected->Index]; } if(data3d2&&pg){ data3d2->IndexOfPatternGroup = lvPattern->Selected->Index; data3d2->XRatio = pg->XRatio; data3d2->YRatio = pg->YRatio; } N3DMappingForm->UpdateGB(); UpdateAll(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::lvGridDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { BEGIN_LOG("::"); //if((TListView *)Source==lvPattern && (TListView *)Sender==lvGrid) Accept=true; if((TListView *)Source==lvPattern && (TListView *)Sender==lvGrid) Accept=true; else Accept=false; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::lvPatternDblClick(TObject *Sender) { BEGIN_LOG("::"); if(!MainImageForm) { END_LOG; return; } if(lvPattern->Selected==NULL) { END_LOG; return; } //TListItem *pItem = lvPattern->Selected; TListItem *pItem = lvPattern->Selected; TPException ec = EC_NONE; TEXPIAFILEHEADER tpfh; HANDLE hFile = INVALID_HANDLE_VALUE; TTexpiaBitmap *tb = NULL; //String fn, ext; String fn, ext; TGraphicFileFormat ExtIndex; TGraphicFileFormat gff; MainImageForm->Modify=true; if(MainImageForm->new3d){ TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt==TYPE_T3CP&&((T3CP *)ptr)->Activated){ if(sbDeleteGroup->Down){ PatternGroup *pg = NULL; if(((T3CP *)ptr)->ListOfPatternGroup->Count>pItem->Index&&pItem->Index>=0){ pg = (PatternGroup *)(((T3CP *)ptr)->ListOfPatternGroup->Items[pItem->Index]); ((T3CP *)ptr)->ListOfPatternGroup->Remove(pg); delete pg; } N3DMappingForm->UpdateGB(); UpdateAll(); sbDeleteGroup->Down=false; lvPattern->Arrange(4/*arDefault*/); } else if(sbLoadPattern->Down){ if(!OpenDialog->Execute()) { N3DMappingForm->UpdateGB(); UpdateAll(); END_LOG; return; } TData3D2 *data3d2 = (TData3D2 *)((T3CP *)ptr)->ListOfData3D2->Items[((T3CP *)ptr)->IndexOfData3D2]; PatternGroup *pg = NULL; if(((T3CP *)ptr)->ListOfPatternGroup->Count>pItem->Index&&pItem->Index>=0){ pg = (PatternGroup *)(((T3CP *)ptr)->ListOfPatternGroup->Items[pItem->Index]); } if(pg==NULL){ pg = new PatternGroup; if(((T3CP *)ptr)->ListOfPatternGroup->Count){ PatternGroup *pg0 = (PatternGroup *)((T3CP *)ptr)->ListOfPatternGroup->Items[0]; pg->transparentPattern = pg0->transparentPattern; } ((T3CP *)ptr)->ListOfPatternGroup->Add(pg); } if(pg->Pattern==NULL){ pg->Pattern = new TTexpiaBitmap; } if(pg->Palette==NULL){ pg->Palette = new TPalette; } pg->pal_exist = true; if ((tb = new TTexpiaBitmap)==NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } fn = OpenDialog->FileName; ext = LowerCase(ExtractFileExt(fn)); ExtIndex = FindExtension(String(ext)); gff = ExtIndex; if (ExtIndex == gffTEX || ExtIndex == gffTFC ){ if((hFile = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if((ec = LoadFromTexpiaFile(hFile, pg->Palette, tpfh, tb, ExtIndex))!=EC_NONE) goto fail; CloseHandle(hFile); } else if (ExtIndex==gffWEA || ExtIndex==gffWAV || ExtIndex==gffKNT /*|| ExtIndex == gffPIL*/) { if (!FileExists(fn)) { ec = EC_FILE_NOT_EXIST; SAVE_EXCEPTION(ec); goto fail; } if ((hFile = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((ec = LoadFromTexpiaFile(hFile, pg->Palette, tpfh, tb, ExtIndex, false))!= EC_NONE) goto fail; CloseHandle(hFile); } else { if (!tb->LoadFromFile(fn)) goto fail; } RGBQUAD rgb[256]; pg->Palette->ToRGBQUAD(rgb,256); if(tb->BitsPerPixel==8){ pg->Pattern->Create(tb->Width, tb->Height, tb->BitsPerPixel, rgb); } else { pg->Pattern->Create(tb->Width, tb->Height, tb->BitsPerPixel); } pg->Pattern->Copy(tb, SRCCOPY); delete tb; N3DMappingForm->UpdateGB(); UpdateAll(); sbLoadPattern->Down=false; END_LOG; return; fail: CloseHandle(hFile); delete tb; sbLoadPattern->Down=false; END_LOG; return; } } } END_LOG; return; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::lvGridDblClick(TObject *Sender) { BEGIN_LOG("::"); if(!MainImageForm) { END_LOG; return; } if(lvGrid->Selected==NULL) { END_LOG; return; } //TListItem *pItem = lvGrid->Selected; TListItem *pItem = lvGrid->Selected; TPException ec = EC_NONE; TEXPIAFILEHEADER tpfh; HANDLE hFile = INVALID_HANDLE_VALUE; //String fn, ext; TGraphicFileFormat ExtIndex; MainImageForm->Modify=true; if(MainImageForm->new3d){ TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt==TYPE_T3CP&&((T3CP *)ptr)->Activated){ if(sbDeleteGroup->Down){ TData3D2 *data3d2 = NULL; if(((T3CP *)ptr)->ListOfData3D2->Count>pItem->Index&&pItem->Index>=0){ data3d2 = (TData3D2 *)(((T3CP *)ptr)->ListOfData3D2->Items[pItem->Index]); data3d2->IndexOfPatternGroup = -1; } N3DMappingForm->UpdateGB(); UpdateAll(); sbDeleteGroup->Down=false; lvGrid->Arrange(4/*arDefault*/); } } } END_LOG; return; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::edXRatioChange(TObject *Sender) { BEGIN_LOG("::"); if(!MainImageForm||!MainImageForm->new3d) { END_LOG; return; } TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt!=TYPE_T3CP||((T3CP *)ptr)->Activated==false) { END_LOG; return; } T3CP *t3cp = (T3CP *)ptr; if(lastclick==1&&lvGrid->Selected){ //TListItem *pItem = lvGrid->Selected; TListItem *pItem = lvGrid->Selected; TData3D2 *data3d2 = NULL; if(t3cp->ListOfData3D2->Count>pItem->Index&&pItem->Index>=0){ data3d2 = (TData3D2 *)t3cp->ListOfData3D2->Items[pItem->Index]; } int v = edXRatio->Value; if(v<1) v = 1; edXRatio->Value = v; data3d2->XRatio = v; } else if(lastclick==2&&lvPattern->Selected){ //TListItem *pItem = lvPattern->Selected; TListItem *pItem = lvPattern->Selected; PatternGroup *pg = NULL; if(t3cp->ListOfPatternGroup->Count>pItem->Index&&pItem->Index>=0){ pg = (PatternGroup *)(t3cp->ListOfPatternGroup->Items[pItem->Index]); } if (pg ){ int v = edXRatio->Value; if(v<1) v = 1; edXRatio->Value = v; pg->XRatio = v; } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TN3DPatternForm::edYRatioChange(TObject *Sender) { BEGIN_LOG("::"); if(!MainImageForm||!MainImageForm->new3d) { END_LOG; return; } TN3D *new3d = MainImageForm->new3d; TN3DMemberType mt; LPVOID ptr=NULL; new3d->SeekType(new3d->AMI, mt, ptr); if(mt!=TYPE_T3CP||((T3CP *)ptr)->Activated==false) { END_LOG; return; } T3CP *t3cp = (T3CP *)ptr; if(lastclick==1&&lvGrid->Selected){ //TListItem *pItem = lvGrid->Selected; TListItem *pItem = lvGrid->Selected; TData3D2 *data3d2 = NULL; if(t3cp->ListOfData3D2->Count>pItem->Index&&pItem->Index>=0){ data3d2 = (TData3D2 *)t3cp->ListOfData3D2->Items[pItem->Index]; } int v = edYRatio->Value; if(v<1) v = 1; edYRatio->Value = v; data3d2->YRatio = v; } else if(lastclick==2&&lvPattern->Selected){ //TListItem *pItem = lvPattern->Selected; TListItem *pItem = lvPattern->Selected; PatternGroup *pg = NULL; if(t3cp->ListOfPatternGroup->Count>pItem->Index&&pItem->Index>=0){ pg = (PatternGroup *)(t3cp->ListOfPatternGroup->Items[pItem->Index]); } if (pg) { int v = edYRatio->Value; if(v<1) v = 1; edYRatio->Value = v; pg->YRatio = v; } } END_LOG; } //---------------------------------------------------------------------------