int CPlugInManager::CreatePatchHandle() { // NOTE: we can't call the AddBrushForPatch until we have filled the patchMesh_t structure patchMesh_t *pPatch = MakeNewPatch(); m_PluginPatches.Add( pPatch ); // change mode PatchesMode = EAllocatedPatches; return m_PluginPatches.GetSize()-1; }
brush_t *BrushFromMapPatch(idMapPatch *mappatch, idVec3 origin) { patchMesh_t *pm = MakeNewPatch(mappatch->GetWidth(), mappatch->GetHeight()); pm->d_texture = Texture_ForName(mappatch->GetMaterial()); for (int i = 0; i < mappatch->GetWidth(); i++) { for (int j = 0; j < mappatch->GetHeight(); j++) { pm->ctrl(i, j).xyz = (*mappatch)[j * mappatch->GetWidth() + i].xyz + origin; pm->ctrl(i, j).st = (*mappatch)[j * mappatch->GetWidth() + i].st; } } pm->horzSubdivisions = mappatch->GetHorzSubdivisions(); pm->vertSubdivisions = mappatch->GetVertSubdivisions(); pm->explicitSubdivisions = mappatch->GetExplicitlySubdivided(); if (mappatch->epairs.GetNumKeyVals()) { pm->epairs = new idDict; *pm->epairs = mappatch->epairs; } brush_t *b = AddBrushForPatch(pm, false); return b; }