About
A UVWTag stores UVW coordinates for a (polygon) object. For each polygon a set of four UVW coordinates is stored (UVWStruct). The class UVWTag is based on VariableTag so the typical workflows on handling tags apply, see BaseTag and VariableTag Manual.
UVWTag objects are an instance of Tuvw
.
Access
A UVWTag is typically attached to a polygon object.
- Note
- A polygon object can host multiple UVW tags.
Allocation/Deallocation
UVWTag instances are created with the usual tools.
A UVW tag with projection-based UVs can be created with:
if (uvwTag == nullptr)
{
{
if (uvwTag == nullptr)
}
}
Access Data
There are two ways to edit the data stored inside a UVWTag. The "slow" way is to access every set of UVW coordinate independently. The "fast" way works with a data handle that allows direct access to the internal memory.
Slow
The UVW coordinates stored in a UVWTag can be accessed with:
for (
Int32 i = 0; i < count; ++i)
{
}
Fast
The fast access to the UVW coordinates stored in the UVWTag is provided by a data handle and static functions:
for (
Int32 i = 0; i < count; ++i)
{
const Vector a = mg * points[polygon.
a];
const Vector b = mg * points[polygon.
b];
const Vector c = mg * points[polygon.
c];
const Vector d = mg * points[polygon.
d];
CalculateUVCoordinates(a, uvwData.
a);
CalculateUVCoordinates(b, uvwData.
b);
CalculateUVCoordinates(c, uvwData.
c);
CalculateUVCoordinates(d, uvwData.
d);
}
Pin
Pin are stored by UV tag, you can access them with:
if (uvTag == nullptr)
if (ptSelect == nullptr)
Int32 seg = 0, smin, smax, idx;
{
for (idx = smin; idx <= smax; idx++)
{
Int32 cpolyPtId = idx % 4;
Int32 ptId = polys[polyId][cpolyPtId];
}
}
if (uvTag == nullptr)
if (ptSelect == nullptr)
if (poly == nullptr)
if (ptArray == nullptr)
for (
Int32 i = 0; i <
ToPoly(obj)->GetPolygonCount(); ++i)
{
if (pp == nullptr)
}
if (uvTag == nullptr)
if (ptSelect == nullptr)
if (poly == nullptr)
if (ptArray == nullptr)
for (
Int32 i = 0; i <
ToPoly(obj)->GetPolygonCount(); ++i)
{
if (pp == nullptr)
}
While it's not stored directly in the UVWTag you may need to retrieve UV seems of an object:
if (uvSeams ==
nullptr || uvSeams->
GetCount() == 0)
if (edgeSelect == nullptr)
Further Reading
Vector b
The UVW coordinate for the second point.
Definition: operatingsystem.h:502
#define Opolygon
Polygon - PolygonObject.
Definition: ge_prepass.h:975
#define ToPoint(op)
Casts a BaseObject* to a PointObject*.
Definition: c4d_baseobject.h:2171
UChar * ToArray(Int32 count) const
Int32 GetDataCount(void) const
Vector c
The UVW coordinate for the third point.
Definition: operatingsystem.h:503
void * UVWHandle
Handle for UVW data. See also: UVWTag.
Definition: operatingsystem.h:452
Bool AddToPinSelection(const BaseSelect &pinSelection)
Definition: c4d_basetag.h:541
Bool RemoveFromPinSelection(const BaseSelect &pinSelection)
Definition: c4d_basetag.h:549
Int32 b
Index of the second point in the polygon.
Definition: c4d_baseobject.h:46
Definition: c4d_baseobject.h:224
Bool CopyTo(BaseSelect *dest) const
Int32 GetCount(void) const
UVWStruct GetSlow(Int32 i)
Definition: c4d_basetag.h:412
Represents a polygon that can be either a triangle or a quadrangle.
Definition: c4d_baseobject.h:43
Definition: c4d_basetag.h:46
const EdgeBaseSelect * GetUVSeams(const BaseObject *obj)
Int32 d
Index of the fourth point in the polygon.
Definition: c4d_baseobject.h:48
BaseSelect & GetPinSelection()
Definition: c4d_basetag.h:528
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:66
#define ToPoly(op)
Casts a BaseObject* to a PolygonObject*.
Definition: c4d_baseobject.h:2174
#define Opoint
Point - PointObject.
Definition: ge_prepass.h:1022
#define MSG_UPDATE
Must be sent if the bounding box has to be recalculated. (Otherwise use MSG_CHANGE....
Definition: c4d_baselist.h:340
static String IntToString(Int32 v)
Definition: c4d_string.h:495
Definition: c4d_basetag.h:379
static UVWTag * Alloc(Int32 count)
Int32 GetPolygonCount(void) const
Definition: c4d_baseobject.h:1752
Definition: operatingsystem.h:463
Definition: apibasemath.h:33
Definition: c4d_baseselect.h:31
static void Set(UVWHandle dataptr, Int32 i, const UVWStruct &s)
Definition: c4d_basetag.h:496
#define Tuvw
UVW data - UVWTag.
Definition: ge_prepass.h:1245
maxon::Int32 Int32
Definition: ge_sys_math.h:58
void ClearPinSelection()
Clears the pin point selection for this tag.
Definition: c4d_basetag.h:515
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:207
Bool Message(Int32 type, void *data=nullptr)
Definition: c4d_baselist.h:1394
Definition: c4d_baseobject.h:1597
BaseTag * GetTag(Int32 type, Int32 nr=0)
Definition: c4d_baseobject.h:674
Int32 c
Index of the third point in the polygon.
Definition: c4d_baseobject.h:47
Vector d
The UVW coordinate for the fourth point.
Definition: operatingsystem.h:504
void EventAdd(EVENT eventflag=EVENT::NONE)
Definition: ge_autoptr.h:36
BaseObject * GetActiveObject(void)
Bool IsInstanceOf(Int32 id) const
Definition: c4d_baselist.h:1373
Vector a
The UVW coordinate for the first point.
Definition: operatingsystem.h:501
static String VectorToString(const Vector32 &v, Int32 nnk=-1)
Definition: c4d_string.h:571
Definition: c4d_baseselect.h:316
Int32 a
Index of the first point in the polygon.
Definition: c4d_baseobject.h:45
Definition: apibase.h:1522
Bool GetRange(Int32 seg, Int32 maxElements, Int32 *a, Int32 *b) const
UVWHandle GetDataAddressW(void)
void InsertTag(BaseTag *tp, BaseTag *pred=nullptr)