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)
}
}
PyObject * object
Definition: asdl.h:7
void InsertTag(BaseTag *tp, BaseTag *pred=nullptr)
Definition: c4d_basetag.h:50
Definition: c4d_baseobject.h:1765
Int32 GetPolygonCount() const
Definition: c4d_baseobject.h:1919
Definition: c4d_basetag.h:404
static UVWTag * Alloc(Int32 count)
maxon::Int32 Int32
Definition: ge_sys_math.h:60
#define Opolygon
Polygon - PolygonObject.
Definition: ge_prepass.h:1038
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
#define Tuvw
UVW data - UVWTag.
Definition: ge_prepass.h:1410
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:
{
}
Py_ssize_t i
Definition: abstract.h:645
Py_ssize_t count
Definition: abstract.h:640
static String IntToString(Int32 v)
Definition: c4d_string.h:495
static String VectorToString(const Vector32 &v, Int32 nnk=-1)
Definition: c4d_string.h:571
UVWStruct GetSlow(Int32 i)
Definition: c4d_basetag.h:436
Int32 GetDataCount() const
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:210
Definition: operatingsystem.h:477
Vector c
The UVW coordinate for the third point.
Definition: operatingsystem.h:516
Vector b
The UVW coordinate for the second point.
Definition: operatingsystem.h:515
Vector a
The UVW coordinate for the first point.
Definition: operatingsystem.h:514
Vector d
The UVW coordinate for the fourth point.
Definition: operatingsystem.h:517
Fast
The fast access to the UVW coordinates stored in the UVWTag is provided by a data handle and static functions:
{
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);
}
Bool Message(Int32 type, void *data=nullptr)
Definition: c4d_baselist.h:1458
UVWHandle GetDataAddressW()
static void Set(UVWHandle dataptr, Int32 i, const UVWStruct &s)
Definition: c4d_basetag.h:520
Py_UNICODE c
Definition: unicodeobject.h:1200
#define MSG_UPDATE
Must be sent if the bounding box has to be recalculated. (Otherwise use MSG_CHANGE....
Definition: c4d_baselist.h:359
void * UVWHandle
Handle for UVW data. See also: UVWTag.
Definition: operatingsystem.h:465
Represents a polygon that can be either a triangle or a quadrangle.
Definition: c4d_baseobject.h:44
Int32 d
Index of the fourth point in the polygon.
Definition: c4d_baseobject.h:48
Int32 b
Index of the second point in the polygon.
Definition: c4d_baseobject.h:46
Int32 c
Index of the third point in the polygon.
Definition: c4d_baseobject.h:47
Int32 a
Index of the first point in the polygon.
Definition: c4d_baseobject.h:45
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];
}
}
MAXON_ATTRIBUTE_FORCE_INLINE const PolygonObject * ToPoly(const T *op)
Casts a BaseObject* to a PolygonObject*.
Definition: c4d_baseobject.h:2364
MAXON_ATTRIBUTE_FORCE_INLINE const PointObject * ToPoint(const T *op)
Casts a BaseObject* to a PointObject*.
Definition: c4d_baseobject.h:2351
void EventAdd(EVENT eventflag=EVENT::NONE)
Definition: c4d_baseobject.h:248
Definition: c4d_baseselect.h:33
Bool Select(Int32 num)
Definition: c4d_baseselect.h:82
Int32 GetCount() const
Definition: c4d_baseselect.h:63
Bool GetRange(Int32 seg, Int32 maxElements, Int32 *a, Int32 *b) const
Definition: c4d_baseselect.h:135
Bool DeselectAll()
Definition: c4d_baseselect.h:104
Definition: apibasemath.h:34
BaseSelect * GetWritablePointS()
const CPolygon * GetPolygonR() const
Definition: c4d_baseobject.h:1905
BaseSelect & GetPinSelection()
Definition: c4d_basetag.h:552
PyObject * obj
Definition: complexobject.h:60
#define Opoint
Point - PointObject.
Definition: ge_prepass.h:1087
const char * doc
Definition: pyerrors.h:226
if (uvTag == nullptr)
if (ptSelect == nullptr)
if (poly == nullptr)
if (ptArray == nullptr)
{
if (pp == nullptr)
pinsToSet->Select(
i * 4 + 0);
pinsToSet->Select(
i * 4 + 1);
pinsToSet->Select(
i * 4 + 2);
pinsToSet->Select(
i * 4 + 3);
}
Definition: ge_autoptr.h:37
UChar * ToArray(Int32 count) const
Definition: c4d_baseselect.h:230
const BaseSelect * GetPointS() const
void ClearPinSelection()
Clears the pin point selection for this tag.
Definition: c4d_basetag.h:539
Bool AddToPinSelection(const BaseSelect &pinSelection)
Definition: c4d_basetag.h:565
if (uvTag == nullptr)
if (ptSelect == nullptr)
if (poly == nullptr)
if (ptArray == nullptr)
{
if (pp == nullptr)
pinsToSet->Select(
i * 4 + 0);
pinsToSet->Select(
i * 4 + 1);
pinsToSet->Select(
i * 4 + 2);
pinsToSet->Select(
i * 4 + 3);
}
Bool RemoveFromPinSelection(const BaseSelect &pinSelection)
Definition: c4d_basetag.h:573
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)
const EdgeBaseSelect * GetUVSeams(const BaseObject *obj)
Bool CopyTo(BaseSelect *dest, Bool alwaysDirty=true) const
Definition: c4d_baseselect.h:176
Definition: c4d_baseselect.h:346
EdgeBaseSelect * GetWritableEdgeS()
Further Reading