//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Weaving_F.h" #include "Main.h" #include "SimpleAPTable_F.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "TPSpin" #pragma resource "*.dfm" //--------------------------------------------------------------------------- #define IDS_HAIREFFECT StringTable[0] #define IDS_NONE StringTable[1] #define IDS_NORMAL StringTable[2] #define IDS_ACTUAL StringTable[3] #define IDS_SHORT StringTable[4] #define IDS_LONG StringTable[5] #define IDS_HAIRRATIO StringTable[6] #define IDS_WOVENEFFECT StringTable[7] #define IDS_SOLID StringTable[8] #define IDS_TYPEA StringTable[9] #define IDS_TYPEB StringTable[10] #define IDS_WEAVEBACKSIDE StringTable[11] #define IDS_WEAVING StringTable[12] #define IDS_HAIRDIR StringTable[13] #define IDS_COLORCORRECTION StringTable[14] #define IDS_HIGHRESOLUTION StringTable[15] #define IDS_SEERSUCKERSETUP StringTable[16] #define IDS_SEERSUCKER StringTable[17] #define IDS_REPROPORTION StringTable[18] #define IDS_CONCENTRATION StringTable[19] #define IDS_EXACTSIZE StringTable[20] #define IDS_EXACTCOLOR StringTable[21] #define IDS_TENSION StringTable[22] TWeavingForm *WeavingForm; //--------------------------------------------------------------------------- __fastcall TWeavingForm::TWeavingForm(TComponent* Owner) : TForm(Owner) { hWnd = ((TWinControl *)Owner)->Handle; //======================================================================= StringTable.Create(DirectoryItem, Language, "Weaving"); SetSmallFont(Font); rgHairEffect->Caption = IDS_HAIREFFECT; rgHairEffect->Items->Strings[0] = IDS_NONE; rgHairEffect->Items->Strings[1] = IDS_SHORT; rgHairEffect->Items->Strings[2] = IDS_NORMAL; rgHairEffect->Items->Strings[3] = IDS_LONG; rgHairEffect->Items->Strings[4] = IDS_ACTUAL; Label2->Caption = IDS_HAIRRATIO; rgWovenEffect->Caption = IDS_WOVENEFFECT; rgWovenEffect->Items->Strings[0] = IDS_SOLID; rgWovenEffect->Items->Strings[1] = IDS_TYPEA; rgWovenEffect->Items->Strings[2] = IDS_TYPEB; cbBackSide->Caption = IDS_WEAVEBACKSIDE; btnOK->Caption = IDS_WEAVING; rgHairType->Caption = IDS_HAIRDIR; rgHairType->Items->Strings[0] = IDS_COMMON_NORMAL; rgHairType->Items->Strings[1] = IDS_COMMON_HORIZONTAL; rgHairType->Items->Strings[2] = IDS_COMMON_VERTICAL; sbSucker->Caption = IDS_SEERSUCKERSETUP; btnOneRepeat->Caption = IDS_HIGHRESOLUTION; GroupBox1->Caption = IDS_SEERSUCKER; sbView->Caption = IDS_COMMON_FILE; sbRun->Caption = IDS_COMMON_RUN; lbRepro->Caption = IDS_REPROPORTION; lbConcen->Caption = IDS_CONCENTRATION; rgMode->Items->Strings[0] = IDS_EXACTSIZE; rgMode->Items->Strings[1] = IDS_EXACTCOLOR; lbTension->Caption = IDS_TENSION; //======================================================================= } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::FormCreate(TObject *Sender) { if (MainImageForm->Plan) { btnOK->Enabled = MainImageForm->Plan->Finish; btnOneRepeat->Enabled = MainImageForm->Plan->Finish; sbRun->Enabled = MainImageForm->Plan->Finish; if (MainImageForm->Plan->bOld) { btnOneRepeat->Enabled = false; sbRun->Enabled = false;} } else { btnOK->Enabled = false; btnOneRepeat->Enabled = false; sbRun->Enabled = false; } bInitSuck = false; pnNormal->BringToFront(); fi = NULL; } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::spTensionClick(TObject *Sender) { spTension->SetFocus(); spTension->SelectAll(); } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::rgHairEffectClick(TObject *Sender) { switch (rgHairEffect->ItemIndex) { case 0: rgHairType->Enabled = false; cbBackSide->Enabled = false; //by qe µÞ¸éº¸±â¿¡¼­ µÞ¸é ¹æ»ç º¸±â·Î ¹Ù²Ù´Â °úÁ¤¿¡¼­ Ãß°¡ÇÏ¿´À½ cbHairRatio->Enabled = false; if (MainImageForm->Plan) if (MainImageForm->Plan->Finish && !MainImageForm->Plan->bOld && MainImageForm->Plan->WeaveCondition.HairEffect == 0 && IsThereSucker() == false) // SeerSucker ÀÖÀ»¶§µÎ ¾ÈµÊ. ¿©±â¿¡¼­ ¼³Á¤ÇÏ´Â°Ô Á» ¾È¸Â´Â°Å °°Áö¸¸..-_-;; btnOneRepeat->Enabled = true; else btnOneRepeat->Enabled = false; break; case 1: rgHairType->Enabled = true; cbBackSide->Enabled = true; cbHairRatio->Enabled = false; btnOneRepeat->Enabled = false; break; case 2: rgHairType->Enabled = true; cbBackSide->Enabled = true; cbHairRatio->Enabled = false; btnOneRepeat->Enabled = false; break; case 3: rgHairType->Enabled = true; cbBackSide->Enabled = true; cbHairRatio->Enabled = false; btnOneRepeat->Enabled = false; break; case 4: cbHairRatio->Enabled = true; cbBackSide->Enabled = true; rgHairType->Enabled = false; btnOneRepeat->Enabled = false; break; } } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::btnOKClick(TObject *Sender) { MainImageForm->bChoiceExchange = false; PostMessage(hWnd, TPM_EXITFUNCTION, mrOk, 0); MainImageForm->Modify = true; } //--------------------------------------------------------------------------- // private Methods //--------------------------------------------------------------------------- TWeaveCondition __fastcall TWeavingForm::GetWeaveCondition() { TWeaveCondition wc; wc.HairEffect = THairEffect(rgHairEffect->ItemIndex); wc.HairRatio = cbHairRatio->ItemIndex; wc.WovenEffect = TWovenEffect(rgWovenEffect->ItemIndex); wc.BackSide = cbBackSide->Checked; wc.HairType = rgHairType->ItemIndex; wc.ColorCorrection = (rgMode->ItemIndex == 1); wc.SuckerEffect = IsThereSucker(); wc.Tension = spTension->Value; // wc.SuckerEffect = (cbSucker->Checked)&&(cbSucker->Enabled); // wc.TextureCorrection = cbTexture->Checked; return wc; } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::SetWeaveCondition(TWeaveCondition Value) { rgHairEffect->ItemIndex = Value.HairEffect; cbHairRatio->ItemIndex = Value.HairRatio; rgWovenEffect->ItemIndex = Value.WovenEffect; cbBackSide->Checked = Value.BackSide; rgHairType->ItemIndex = Value.HairType; spTension->Value = Value.Tension; if (Value.ColorCorrection) rgMode->ItemIndex = 1; else rgMode->ItemIndex = 0; // cbTexture->Checked = Value.TextureCorrection; rgHairEffectClick(rgHairEffect); } //--------------------------------------------------------------------------- // Public Method //--------------------------------------------------------------------------- void __fastcall TWeavingForm::InitForm() { ParentHeight = Parent->Height+20; ClientHeight = 375; Parent->Height = ParentHeight+ClientHeight; rgHairEffect->ItemIndex = MainImageForm->Plan->WeaveCondition.HairEffect; cbHairRatio->ItemIndex = MainImageForm->Plan->WeaveCondition.HairRatio; rgWovenEffect->ItemIndex = MainImageForm->Plan->WeaveCondition.WovenEffect; cbBackSide->Checked = MainImageForm->Plan->WeaveCondition.BackSide; rgHairType->ItemIndex = MainImageForm->Plan->WeaveCondition.HairType; spTension->Value = MainImageForm->Plan->WeaveCondition.Tension; if (MainImageForm->Plan->WeaveCondition.ColorCorrection) rgMode->ItemIndex = 1; else rgMode->ItemIndex = 0; // cbTexture->Checked = MainImageForm->Plan->WeaveCondition.TextureCorrection; Visible = true; // InitSuck(); } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if(Key == 13 && btnOK->Enabled)btnOKClick(this); //lhskys ¿£ÅÍ·Î ½ÇÇàÇϱâ } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::btnOneRepeatClick(TObject *Sender) { PostMessage(hWnd, TPM_EXITFUNCTION, mrYes, 0); } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::sbSuckerClick(TObject *Sender) { if (bInitSuck == false) { InitSuck(); bInitSuck = true; } if (sbSucker->Down) pnSucker->BringToFront(); else pnNormal->BringToFront(); } //--------------------------------------------------------------------------- //Seer Sucker ¿¡ °üÇÑ ÇÔ¼ö //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void __fastcall TWeavingForm::InitSuck() { TRect rt; Byte *buf; RGBQUAD rgb[256]; AnsiString IniDirName, IniFileName; int rep, den; TPItemImage *Image = MainImageForm->iMainImage; rt.Left = 0; rt.Top = 0; rt.Right = fileimg->Width; rt.Bottom = fileimg->Height; fileimg->Canvas->FillRect( rt); SimpleAPTableForm = new TSimpleAPTableForm(this); SimpleAPTableForm->Parent = MainForm; SimpleAPTableForm->Visible = false; SimpleAPTableForm->InitForm(); TIniFile *IniFile = new TIniFile(DirectoryItem + "\\Sucker.ini"); if (IniFile) { IniDirName = IniFile->ReadString("Sucker", "DirectoryName", DirectorySucker); IniFileName = IniFile->ReadString("Sucker", "FileName", DirectorySucker+"\\Sucker.apt"); rep = IniFile->ReadInteger("Sucker", "Repro", 100); den = IniFile->ReadInteger("Sucker", "Density", 50); if (SetCurrentDir(IniDirName)) SimpleAPTableForm->DirectoryListBox->Directory = IniDirName; else SimpleAPTableForm->DirectoryListBox->Directory = DirectorySucker; SimpleAPTableForm->DirectoryListBox->ItemIndex = 0; delete IniFile; } else IniFileName = DirectorySucker+"\\Sucker.apt"; if (MainImageForm->Plan->SuckerData.SuckerBitmap) { fi = new TFileInfor; fi->Name = MainImageForm->Plan->SuckerData.FileName; fi->Bitmap = new Graphics::TBitmap; fi->Bitmap->PixelFormat = pf8bit; fi->Bitmap->Width = 80; fi->Bitmap->Height = 100; MainImageForm->Plan->SuckerData.SuckerBitmap->GetColors(0, 256, rgb); SetDIBColorTable(fi->Bitmap->Canvas->Handle, 0, 256, rgb); MainImageForm->Plan->SuckerData.tagBitmap->lock(); for (int y=0; y<100; y++) { buf = MainImageForm->Plan->SuckerData.tagBitmap->pointer(0, y); memcpy(fi->Bitmap->ScanLine[y], buf, 80); } MainImageForm->Plan->SuckerData.tagBitmap->unlock(); fileimg->Canvas->Draw(0, 0, fi->Bitmap); lblfilename->Caption = fi->Name; ReproScroll->Position = MainImageForm->Plan->SuckerData.Repro*100; DensityScroll->Position = MainImageForm->Plan->SuckerData.Density*5000; } else { InsertImage(IniFileName); ReproScroll->Position = rep; DensityScroll->Position = den; } } //---------------------------------------------------------------------------- void __fastcall TWeavingForm::ExitSuck() { if (bInitSuck) { TIniFile *IniFile = new TIniFile(DirectoryItem + "\\Sucker.ini"); if (IniFile) { IniFile->WriteString("Sucker", "DirectoryName", SimpleAPTableForm->DirectoryListBox->Directory); IniFile->WriteInteger("Sucker", "Repro", ReproScroll->Position); IniFile->WriteInteger("Sucker", "Density", DensityScroll->Position); delete IniFile; } if (SimpleAPTableForm) delete SimpleAPTableForm; if (fi) delete fi; ::RepaintColor(); } } //---------------------------------------------------------------------------- void __fastcall TWeavingForm::InsertImage(AnsiString fn) { HANDLE hFile = INVALID_HANDLE_VALUE; TEXPIAFILEHEADER tpfh; TPalette *spalette = NULL; TTexpiaBitmap *Bitmap = NULL; int ec; TTexVersion ver; TIniFile *IniFile; if(fi) delete fi; fi = new TFileInfor; fi->Name = ExtractFileName(fn);; fi->Bitmap = new Graphics::TBitmap; if ((hFile = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto next; if (!LoadFromTexpiaTag(hFile, fi, &ver)) goto next; // fi->Bitmap ¿¡ ÆÄÀÏ ·Îµå if ((Bitmap = new TTexpiaBitmap) == NULL) goto next; if ((spalette = new TPalette)==NULL) goto next; if (SetFilePointer(hFile, 0, NULL, FILE_BEGIN) == 0xFFFFFFFF) goto next; if ((ec = LoadFromTexpiaFile(hFile, spalette, tpfh, Bitmap))!=EC_NONE) goto next; CloseHandle(hFile); if (spalette) { delete spalette; spalette = NULL; } fileimg->Canvas->Draw(0, 0, fi->Bitmap); lblfilename->Caption = fi->Name; MainImageForm->Plan->SaveSuckerData(txtDensity->Value/5000.0, txtRepro->Value/100.0, fi->Name, Bitmap, fi->Bitmap); IniFile = new TIniFile(DirectoryItem + "\\Sucker.ini"); if (IniFile) { IniFile->WriteString("Sucker", "FileName", fn); delete IniFile; } if (Bitmap) {delete Bitmap; Bitmap = NULL;} return; next: if (hFile!=INVALID_HANDLE_VALUE) CloseHandle(hFile); if (fi) { delete fi; fi = NULL; } if (Bitmap) {delete Bitmap; Bitmap = NULL; } if (spalette) {delete spalette; spalette = NULL; } } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::sbViewClick(TObject *Sender) { SimpleAPTableForm->Show(); } //-------------------------------------------------------------------------- void __fastcall TWeavingForm::sbRunClick(TObject *Sender) { if (MainImageForm->Plan->CopyBitmap == NULL) MainImageForm->Weaving(); else MainImageForm->Plan->Sucking(MainImageForm->iMainImage->Bitmap, MainImageForm->sbFrontBack->Down); } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::txtReproChange(TObject *Sender) { ReproScroll->Position = txtRepro->Value; MainImageForm->Plan->SuckerData.Repro = txtRepro->Value/100.0; } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::ReproScrollChange(TObject *Sender) { txtRepro->Value = ReproScroll->Position; MainImageForm->Plan->SuckerData.Repro = txtRepro->Value/100.0; } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::txtDensityChange(TObject *Sender) { DensityScroll->Position = txtDensity->Value; MainImageForm->Plan->SuckerData.Density = txtDensity->Value/5000.0; } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::DensityScrollChange(TObject *Sender) { txtDensity->Value = DensityScroll->Position; MainImageForm->Plan->SuckerData.Density = txtDensity->Value/5000.0; } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::ScrollBar1Change(TObject *Sender) { /* if(store->Count >0){ TFileInfor *fi; fi = (TFileInfor *) store->Items[ScrollBar1->Position]; lblfilename->Caption = ExtractFileName(((TFileInfor*)(store->Items[ScrollBar1->Position]))->Name); fileimg->Canvas->Draw(0,0, fi->Bitmap); sbRun->Enabled = true; }*/ } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::sbAllClick(TObject *Sender) { /* TFileInfor *fi; TRect rt; rt.Left = 0; rt.Top = 0; rt.Right = fileimg->Width; rt.Bottom = fileimg->Height; if (store) { while (store->Count>0) { fi = (TFileInfor *)store->Last(); store->Remove(fi); delete fi; } } ScrollBar1->Max = 0; ScrollBar1->Position = 0; lblfilename->Caption = ""; fileimg->Canvas->FillRect( rt);*/ } //--------------------------------------------------------------------------- void __fastcall TWeavingForm::sbDeleteClick(TObject *Sender) { /* TFileInfor *fi; if (store->Count>0) { fi = (TFileInfor *) store->Items[ScrollBar1->Position]; // Áö¿ï ºñÆ®¸ÊÀ» ãÀ½ store->Remove(fi); delete fi; if(ScrollBar1->Max == 0){ // ºñÆ®¸ÊÀÌ 1°³ ¶Ç´Â ¾øÀ»°æ¿ì ScrollBar1->Position = 0; // º°µµ ó¸® ScrollBar1->Max = 0; } else { if(ScrollBar1->Position == ScrollBar1->Max) ScrollBar1->Position--; // ºñÆ®¸ÊÀÌ 2°³ÀÌ»ó ScrollBar1->Max--; // ÀÖÀ» °æ¿ì } if (store->Count>0) { // ºñÆ®¸ÊÀÌ 1°³ÀÏ °æ¿ì fi = (TFileInfor *) store->Items[ScrollBar1->Position]; fileimg->Canvas->Draw(0,0, fi->Bitmap); } else { TRect rt; // ºñÆ®¸ÊÀÌ ¾øÀ» °æ¿ì ó¸® rt.Left = 0; rt.Top = 0; rt.Right = fileimg->Width; rt.Bottom = fileimg->Height; fileimg->Canvas->FillRect( rt); lblfilename->Caption = ""; } } */ } //--------------------------------------------------------------------------- bool __fastcall TWeavingForm::IsThereSucker() { for (int i = 0; i < MainImageForm->Plan->Yarn->Array[0]->Count; i++){ if(((TYarnArray *)MainImageForm->Plan->Yarn->Array[0]->Items[i])->sucker) return true; } return false; } //----------------------------------------------------------------------------