Bool ApplinkExporter::WriteMatsFile(BaseDocument* document, BaseContainer* bc) { Filename filenameMTL; filenameMTL.SetDirectory(bc->GetString(IDC_TMP_FOLDER)); filenameMTL.SetFile(document->GetDocumentName()); filenameMTL.SetSuffix("mtl"); GePrint(filenameMTL.GetString()); AutoAlloc<BaseFile> fileMTL; if (!fileMTL->Open(filenameMTL, FILEOPEN_WRITE, FILEDIALOG_NONE, GeGetByteOrder())) return FALSE; for(LONG i=0; i < materialArray.GetCount(); i++) { BaseMaterial* mat = materialArray[i]; String str; str = "newmtl " + mat->GetName() + "\n"; this->WriteString(str, fileMTL); //Ka str = "Ka 0.300000 0.300000 0.300000\n"; this->WriteString(str, fileMTL); ///////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //Kd if(getParameterLong(*mat, MATERIAL_USE_COLOR)) { ExportChannel(document, fileMTL, *mat, MATERIAL_COLOR_SHADER, MATERIAL_COLOR_COLOR, "Kd"); } //Ks if(getParameterLong(*mat, MATERIAL_USE_REFLECTION)) { ExportChannel(document, fileMTL, *mat, MATERIAL_REFLECTION_SHADER, MATERIAL_REFLECTION_COLOR, "Ks"); } //Ns str = "Ns 50.000000\n"; this->WriteString(str, fileMTL); //Tr str = "Tr 0.000000\n"; this->WriteString(str, fileMTL); //illum str = "illum 2\n"; this->WriteString(str, fileMTL); this->WriteEndLine(fileMTL); } fileMTL->Close(); return TRUE; }
//------------------------------------------------------------------------------ //! Material* Material::white() { BaseMaterial* mat = new BaseMaterial(); BaseMaterial::Layer l; l._color = data( ResManager::getImage( "image/white" ) ); mat->addLayer(l); return mat; }
LONG ApplinkExporter::getParameterLong(BaseMaterial& mat, LONG paramID) { GeData parameter; if (mat.GetParameter(DescLevel(paramID), parameter, DESCFLAGS_GET_0)) { return parameter.GetLong(); } return 0; }
Bool ApplinkImporter::insertMaterials() { BaseMaterial *mat = NULL; for(unsigned int i = 0; i < this->matArray.size(); i++) { mat = this->doc->SearchMaterial(this->matArray[i].Name); if (!mat) { mat = BaseMaterial::Alloc(Mmaterial); if (!mat) { GePrint("Memory allocation error for material."); return false; } mat->SetName(this->matArray[i].Name); doc->InsertMaterial(mat, NULL, false); } CreateChannelColor(i, mat); CreateChannelSpecular(i, mat); //GePrint("map: " + LongToString(this->pSet.impComboMap)); if(this->pSet.impComboMap == 0) { CreateChannelDisplacement(i, mat); } else { CreateChannelBump(i, mat); } CreateChannelNormal(i, mat); mat->Update(true, true); mat->Message(MSG_UPDATE); } return true; }
Bool PaletteSubDialog::Command(Int32 id,const BaseContainer &msg) { GeDynamicArray<Palette> pals; Palette pal; Filename fn; switch (id) { case 3: switch(msg.GetInt32(BFM_ACTION_VALUE)){ case ACTION_NEW: pal.SetColor(0, Color(0.f, 0.f, 0.f).SetSource(COLOR_SOURCE_DISPLAY)); id = Palette::AddPalette(pal); m_controlsShown = FALSE; LoadPalette(id); SaveSettings(); Palette::UpdateAll(); return TRUE; case ACTION_LOAD: if(fn.FileSelect(FILESELECTTYPE_ANYTHING, FILESELECT_LOAD, "Load")){ String s = fn.GetString(); if(Palette::LoadASEFile(s, pal)){ id = Palette::AddPalette(pal); m_controlsShown = FALSE; LoadPalette(id); SaveSettings(); Palette::UpdateAll(); } } return TRUE; case ACTION_SAVE: if(fn.FileSelect(FILESELECTTYPE_ANYTHING, FILESELECT_SAVE, "Save", "ase")){ String s = fn.GetString(); Palette::SaveASEFile(s, m_palette); } return TRUE; case ACTION_LABEL: ShowControls(!m_showControls); return TRUE; } if(msg.GetInt32(BFM_ACTION_VALUE) >= ACTION_COUNT){ m_controlsShown = FALSE; LoadPalette(msg.GetInt32(BFM_ACTION_VALUE)-ACTION_COUNT); SaveSettings(); } return TRUE; case IDC_LAYOUT_DIRECTION: m_controlsShown = FALSE; LoadPalette(m_paletteID); SaveSettings(); break; case IDC_ROWS: PaletteLayout(); SaveSettings(); break; case IDC_LABELCHECKBOX: GetBool(m_labelCheckArea, m_showLabel); LoadPalette(m_paletteID); SaveSettings(); break; case IDC_NAME: if(m_nameArea != NULL){ GetString(m_nameArea, m_palette.m_name); Palette::SetPaletteName(m_paletteID, m_palette.m_name); LoadPalette(m_paletteID); } break; case IDC_HIDE: ShowControls(FALSE); break; case IDC_SEARCHTEXT: PaletteLayout(); SaveSettings(); break; case IDC_CREATEMATERIAL: { Bool linkColors; GetBool(m_linkColor,linkColors); for(Int32 i=m_palette.m_colors.GetCount()-1;i>=0;--i){ BaseMaterial *mat = BaseMaterial::Alloc(Mmaterial); String name = "PaletteMaterial"; if(m_palette[i].m_name != ""){ name = m_palette[i].m_name; } mat->SetName(name); if(mat != nullptr){ BaseChannel *chan = mat->GetChannel(CHANNEL_COLOR); if(chan != nullptr){ BaseContainer bc; if(linkColors){ bc.SetInt32(BASECHANNEL_SHADERID, PALETTE_SHADER_ID); chan->SetData(bc); BaseShader *bs = chan->GetShader(); BaseContainer* data = bs->GetDataInstance(); data->SetInt32(PALETTESHADER_PALETTE_ID, 1+m_paletteID); data->SetInt32(PALETTESHADER_COLOR_ID, 1+i); } else { // Color Shader ID: 5832 bc.SetInt32(BASECHANNEL_SHADERID, 5832); chan->SetData(bc); BaseShader *bs = chan->GetShader(); BaseContainer* data = bs->GetDataInstance(); data->SetVector(COLORSHADER_COLOR , m_palette.m_colors[i].AsVector()); } GetActiveDocument()->InsertMaterial(mat); EventAdd(); } } } } break; default: break; } return GeDialog::Command(id,msg); }