void CSurfaceDlg::SetTexMods() { UpdateData(TRUE); m_strMaterial = g_qeglobals.d_texturewin.texdef.name; patchMesh_t *p = SinglePatchSelected(); if (p) { m_subdivide = p->explicitSubdivisions; m_strMaterial = p->d_texture->GetName(); } else { m_subdivide = false; } int faceCount = g_ptrSelectedFaces.GetSize(); face_t *selFace = NULL; if (faceCount) { selFace = reinterpret_cast < face_t * > (g_ptrSelectedFaces.GetAt(0)); } else { if (selected_brushes.next != &selected_brushes) { brush_t *b = selected_brushes.next; if (!b->pPatch) { selFace = b->brush_faces; } } } if (selFace) { float rot; Face_GetScale_BrushPrimit(selFace, &m_horzScale, &m_vertScale, &rot); } else { m_horzScale = 1.0f; m_vertScale = 1.0f; } UpdateData(FALSE); }
void Face_FlipTexture_BrushPrimit(face_t *f, bool y) { float s, t, rot; Face_GetScale_BrushPrimit(f, &s, &t, &rot); if (y) { Face_SetExplicitScale_BrushPrimit(f, 0.0, -t); } else { Face_SetExplicitScale_BrushPrimit(f, -s, 0.0); } #if 0 idVec3D texS, texT; ComputeAxisBase(f->plane.normal, texS, texT); double Os = 0, Ot = 0; for (int i = 0; i < f->face_winding->numpoints; i++) { Os += DotProduct(f->face_winding->p[i], texS); Ot += DotProduct(f->face_winding->p[i], texT); } Ot = abs(Ot); Ot *= t; Ot /= f->d_texture->GetEditorImage()->uploadHeight; Os = abs(Os); Os *= s; Os /= f->d_texture->GetEditorImage()->uploadWidth; if (y) { Face_FitTexture_BrushPrimit(f, texS, texT, -Ot, 1.0); } else { Face_FitTexture_BrushPrimit(f, texS, texT, 1.0, -Os); } EmitBrushPrimitTextureCoordinates(f, f->face_winding); #endif }