Optimal Mapping [SOLVED]
-
On 16/06/2015 at 08:00, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 16
Platform: Windows ;
Language(s) : C++ ;---------
Hello,I create two UVW Tags in my code and I want to use optimal mapping on the first one and quader mapping on the second one. How can I achieve this? I know about the CallUVCommand but how can I tell the program to use one of my UVW Tags?
// Generate Lightmap UV UVWTag* lightmap_uv_tag = (UVWTag* )op->MakeVariableTag(Tuvw,polyobj->GetPolygonCount(),nullptr); lightmap_uv_tag->SetName("lightmap"); // Generate Texture UV UVWTag* texture_uv_tag = (UVWTag* )op->MakeVariableTag(Tuvw,polyobj->GetPolygonCount(),nullptr); texture_uv_tag->SetName("texture");
Thanks
crush4 -
On 17/06/2015 at 11:50, xxxxxxxx wrote:
Hello,
it seems that the UV functions should be used in interactive tools. So they expect a properly setup scene. CallUVCommand() works together with GetActiveUVSet() and the created TempUVHandle. So your code could look something like this:
VariableTag* uvwtag = VariableTag::Alloc(Tuvw,poly->GetPolygonCount()); poly->InsertTag(uvwtag); doc->SetActiveObject(poly); doc->SetActiveTag(uvwtag); // select all polygons BaseSelect* selection = poly->GetPolygonS(); selection->SelectAll(0,poly->GetPolygonCount()-1); // Cinema must be in UV Poly edit mode doc->SetMode(Muvpolygons); TempUVHandle* handle = GetActiveUVSet(doc,GETACTIVEUVSET_ALL); if(handle) { // set up settings BaseContainer bcMapSettings; bcMapSettings.SetBool(OPTIMALMAPPING_PRESERVEORIENTATION, true); bcMapSettings.SetBool(OPTIMALMAPPING_STRETCHTOFIT, false); bcMapSettings.SetFloat(OPTIMALMAPPING_DISTORTION, 0.5); bcMapSettings.SetInt32(OPTIMALMAPPING_RELAXCOUNT, 0); bcMapSettings.SetFloat(OPTIMALMAPPING_SPACING, 0.2); // call command CallUVCommand(handle->GetPoint(), handle->GetPointCount(), handle->GetPoly(), handle->GetPolyCount(),handle->GetUVW(),handle->GetPolySel(),handle->GetUVPointSel(),handle->GetBaseObject(), Muvpolygons,UVCOMMAND_OPTIMALMAPPING,bcMapSettings); // apply handle->SetUVWFromTextureView(handle->GetUVW(),false,false,false); FreeActiveUVSet(handle); } EventAdd();
best wishes,
Sebastian -
On 18/06/2015 at 12:13, xxxxxxxx wrote:
Thank you Sebastian,
this works perfectly for me.
// Cinema must be in UV Poly edit mode doc->SetMode(Muvpolygons);
is not needed and causes some errors in the uv map if before some uv polygons were selected. I don't know why.