Primitive Maya CV Curves: Difference between revisions
From Animation
Jump to navigationJump to search
Karljahnke (talk | contribs) |
Karljahnke (talk | contribs) |
||
| Line 2: | Line 2: | ||
==Circle with pointer== | ==Circle with pointer== | ||
[[File:Circle with pointer popup cv curve creation example image.jpg]] | [[File:Circle with pointer popup cv curve creation example image.jpg | 108px]] | ||
<pre> | <pre> | ||
// ========================================== | // ========================================== | ||
Revision as of 09:45, 15 January 2026
Shapes
Circle with pointer
// ==========================================
// Pointer Sphere Curve Tool (MEL)
// ==========================================
global proc createPointerSphereCurve(float $radius, float $length)
{
int $segments = 12;
float $angleStep = 360.0 / $segments;
string $cmd = "curve -d 1";
// Pointer tip at origin
$cmd += " -p 0 0 0";
// Tail connection
$cmd += (" -p 0 0 -" + $length);
// Sphere loop (YZ plane)
for ($i = 0; $i <= $segments; $i++)
{
float $angle = deg_to_rad($i * $angleStep);
float $y = sin($angle) * $radius;
float $z = cos($angle) * $radius - $length;
$cmd += (" -p 0 " + $y + " " + $z);
}
// Create curve
string $curve = `eval $cmd`;
rename $curve "pointerSphere_CRV";
// Pivot at origin
xform -ws -piv 0 0 0;
// Freeze transforms
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;
}
// ==========================================
// UI
// ==========================================
global proc pointerSphereUI()
{
if (`window -exists pointerSphereWin`)
deleteUI pointerSphereWin;
window -title "Pointer Sphere Curve" -widthHeight 260 120 pointerSphereWin;
columnLayout -adj true -rowSpacing 6;
floatFieldGrp -label "Radius" -numberOfFields 1 -value1 1.0 radiusField;
floatFieldGrp -label "Length" -numberOfFields 1 -value1 3.0 lengthField;
separator -h 10;
button
-label "Create Curve"
-height 30
-command "float $r = `floatFieldGrp -q -value1 radiusField`; float $l = `floatFieldGrp -q -value1 lengthField`; createPointerSphereCurve($r, $l);";
showWindow pointerSphereWin;
}
// ==========================================
// Launch
// ==========================================
pointerSphereUI();
Forms
Hedron
curve -d 1 -p 0 0 -0.707107 -p 0.707107 0 0 -p 0 0 0.707107 -p -0.707107 0 0 -p 0 0 -0.707107 -p 0 1 0 -p 0 0 0.707107 -p 0 -1 0 -p 0 0 -0.707107 -p -0.707107 0 0 -p 0 1 0 -p 0.707107 0 0 -p 0 -1 0 -p -0.707107 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 ;
Hedron with pointer
curve -d 1 -p 0 0 0 -p 0 0 2.292893 -p 0.707107 0 3 -p 0 0 3.707107 -p -0.707107 0 3 -p 0 0 2.292893 -p 0 1 3 -p 0 0 3.707107 -p 0 -1 3 -p 0 0 2.292893 -p -0.707107 0 3 -p 0 1 3 -p 0.707107 0 3 -p 0 -1 3 -p -0.707107 0 3 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 ;
Sphere
curve -d 1 -p 0 1 0 -p 0 0.866025 -0.5 -p 0 0.5 -0.866025 -p 0 0 -1 -p 0 -0.5 -0.866025 -p 0 -0.866025 -0.5 -p 0 -1 0 -p 0 -0.866025 0.5 -p 0 -0.5 0.866025 -p 0 0 1 -p 0 0.5 0.866025 -p 0 0.866025 0.5 -p 0 1 0 -p -0.5 0.866025 0 -p -0.866025 0.5 0 -p -1 0 0 -p -0.866025 -0.5 0 -p -0.5 -0.866025 0 -p 0 -1 0 -p 0.5 -0.866025 0 -p 0.866025 -0.5 0 -p 1 0 0 -p 0.866025 0.5 0 -p 0.5 0.866025 0 -p 0 1 0 -p 0 0.866025 0.5 -p 0 0.5 0.866025 -p 0 0 1 -p 0.5 0 0.866025 -p 0.866025 0 0.5 -p 1 0 0 -p 0.866025 0 -0.5 -p 0.5 0 -0.866025 -p 0 0 -1 -p -0.5 0 -0.866025 -p -0.866025 0 -0.5 -p -1 0 0 -p -0.866025 0 0.5 -p -0.5 0 0.866025 -p 0 0 1 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -k 33 -k 34 -k 35 -k 36 -k 37 -k 38 -k 39 ;
Sphere with pointer
curve -d 1 -p 0 0 0 -p 0 0 -2 -p -0.5 0 -2.133975 -p -0.866025 0 -2.5 -p -1 0 -3 -p -0.866025 0 -3.5 -p -0.5 0 -3.866025 -p 0 0 -4 -p 0.5 0 -3.866025 -p 0.866025 0 -3.5 -p 1 0 -3 -p 0.866025 0 -2.5 -p 0.5 0 -2.133975 -p 0 0 -2 -p 0 0.5 -2.133975 -p 0 0.866025 -2.5 -p 0 1 -3 -p 0 0.866025 -3.5 -p 0 0.5 -3.866025 -p 0 0 -4 -p 0 -0.5 -3.866025 -p 0 -0.866025 -3.5 -p 0 -1 -3 -p 0 -0.866025 -2.5 -p 0 -0.5 -2.133975 -p 0 0 -2 -p 0 0.5 -2.133975 -p 0 0.866025 -2.5 -p 0 1 -3 -p 0.5 0.866025 -3 -p 0.866025 0.5 -3 -p 1 0 -3 -p 0.866025 -0.5 -3 -p 0.5 -0.866025 -3 -p 0 -1 -3 -p -0.5 -0.866025 -3 -p -0.866025 -0.5 -3 -p -1 0 -3 -p -0.866025 0.5 -3 -p -0.5 0.866025 -3 -p 0 1 -3 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -k 33 -k 34 -k 35 -k 36 -k 37 -k 38 -k 39 -k 40 ;
Sphere with pointer Popup
// ==========================================
// Pointer + Sphere CV Control (MEL)
// ==========================================
global proc createPointerSphereCurve(float $radius, float $length)
{
int $seg = 12;
float $step = 360.0 / $seg;
string $cmd = "curve -d 1";
// --------------------------
// Pointer tip
// --------------------------
$cmd += " -p 0 0 0";
$cmd += (" -p 0 0 -" + $length);
// --------------------------
// Equator ring (XZ plane)
// --------------------------
for ($i = 0; $i <= $seg; $i++)
{
float $a = deg_to_rad($i * $step);
float $x = cos($a) * $radius;
float $z = sin($a) * $radius - $length;
$cmd += (" -p " + $x + " 0 " + $z);
}
// --------------------------
// Longitude arcs (4 directions)
// --------------------------
float $dirs[4] = {0, 90, 180, 270};
for ($d in $dirs)
{
for ($i = 0; $i <= $seg/2; $i++)
{
float $a = deg_to_rad(-90 + ($i * (180.0 / ($seg/2))));
float $y = sin($a) * $radius;
float $r = cos($a) * $radius;
float $x = cos(deg_to_rad($d)) * $r;
float $z = sin(deg_to_rad($d)) * $r - $length;
$cmd += (" -p " + $x + " " + $y + " " + $z);
}
}
// --------------------------
// Hemisphere arc (YZ plane)
// --------------------------
for ($i = 0; $i <= $seg/2; $i++)
{
float $a = deg_to_rad($i * (180.0 / ($seg/2)));
float $y = cos($a) * $radius;
float $z = sin($a) * $radius - $length;
$cmd += (" -p 0 " + $y + " " + $z);
}
// Create curve
string $crv = `eval $cmd`;
rename $crv "pointerSphere_CRV";
// Pivot at origin
xform -ws -piv 0 0 0;
// Freeze
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;
}
// ==========================================
// UI
// ==========================================
global proc pointerSphereUI()
{
if (`window -exists pointerSphereWin`)
deleteUI pointerSphereWin;
window -title "Pointer Sphere Curve" -widthHeight 260 120 pointerSphereWin;
columnLayout -adj true -rowSpacing 6;
floatFieldGrp -label "Radius" -numberOfFields 1 -value1 1.0 radiusField;
floatFieldGrp -label "Length" -numberOfFields 1 -value1 3.0 lengthField;
separator -h 10;
button
-label "Create Curve"
-height 30
-command "float $r = `floatFieldGrp -q -value1 radiusField`; float $l = `floatFieldGrp -q -value1 lengthField`; createPointerSphereCurve($r, $l);";
showWindow pointerSphereWin;
}
// ==========================================
// Launch
// ==========================================
pointerSphereUI();