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:507
#define Opolygon
Polygon - PolygonObject.
Definition: ge_prepass.h:982
#define ToPoint(op)
Casts a BaseObject* to a PointObject*.
Definition: c4d_baseobject.h:2192
UChar * ToArray(Int32 count) const
Int32 GetDataCount(void) const
Vector c
The UVW coordinate for the third point.
Definition: operatingsystem.h:508
void * UVWHandle
Handle for UVW data. See also: UVWTag.
Definition: operatingsystem.h:457
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:2195
#define Opoint
Point - PointObject.
Definition: ge_prepass.h:1030
#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:1773
Definition: operatingsystem.h:468
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:1254
maxon::Int32 Int32
Definition: ge_sys_math.h:60
void ClearPinSelection()
Clears the pin point selection for this tag.
Definition: c4d_basetag.h:515
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:208
Bool Message(Int32 type, void *data=nullptr)
Definition: c4d_baselist.h:1423
Definition: c4d_baseobject.h:1618
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:509
void EventAdd(EVENT eventflag=EVENT::NONE)
Definition: ge_autoptr.h:36
BaseObject * GetActiveObject(void)
Bool IsInstanceOf(Int32 id) const
Definition: c4d_baselist.h:1402
Vector a
The UVW coordinate for the first point.
Definition: operatingsystem.h:506
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:1527
Bool GetRange(Int32 seg, Int32 maxElements, Int32 *a, Int32 *b) const
UVWHandle GetDataAddressW(void)
void InsertTag(BaseTag *tp, BaseTag *pred=nullptr)