Primitive Maya CV Curves: Difference between revisions
From Animation
Jump to navigationJump to search
Karljahnke (talk | contribs) Created page with "LANDING PAGE FOR CV CURVES SCRIPTS" |
Karljahnke (talk | contribs) Tag: Manual revert |
||
| (26 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
=Shapes= | |||
==Circle with pointer== | |||
[[File:Circle with pointer popup cv curve creation example image.jpg | 108px]] | |||
<pre> | |||
// ========================================== | |||
// 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(); | |||
</pre> | |||
==Sunburst with popup== | |||
[[File:Sunburst popup cv curve creation example image.jpg | 121px]] | |||
<pre> | |||
// ========================================== | |||
// Sunburst CV Curve Tool (MEL) | |||
// ========================================== | |||
global proc createSunburstCurve_UI(float $radius, int $spikes, float $burstOffset, string $plane) | |||
{ | |||
if ($spikes < 3) | |||
$spikes = 3; | |||
float $angleStep = 360.0 / ($spikes * 2); | |||
string $cmd = "curve -d 1"; | |||
for ($i = 0; $i <= ($spikes * 2); $i++) | |||
{ | |||
float $angle = deg_to_rad($i * $angleStep); | |||
float $currentRadius = ($i % 2 == 0) ? $radius : ($radius + $burstOffset); | |||
float $a = sin($angle) * $currentRadius; | |||
float $b = cos($angle) * $currentRadius; | |||
// Plane selection | |||
if ($plane == "X") | |||
$cmd += (" -p 0 " + $a + " " + $b); | |||
else if ($plane == "Y") | |||
$cmd += (" -p " + $a + " 0 " + $b); | |||
else | |||
$cmd += (" -p " + $a + " " + $b + " 0"); | |||
} | |||
string $curve = `eval $cmd`; | |||
rename $curve "sunburst_CRV"; | |||
xform -ws -piv 0 0 0; | |||
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0; | |||
} | |||
// ========================================== | |||
// UI | |||
// ========================================== | |||
global proc sunburstUI() | |||
{ | |||
if (`window -exists sunburstWin`) | |||
deleteUI sunburstWin; | |||
window -title "Sunburst Curve" -widthHeight 280 200 sunburstWin; | |||
columnLayout -adj true -rowSpacing 6; | |||
floatFieldGrp -label "Circle Radius" -numberOfFields 1 -value1 2.0 radiusField; | |||
intFieldGrp -label "Number of Spikes" -numberOfFields 1 -value1 12 spikesField; | |||
floatFieldGrp -label "Burst Offset (+/-)" -numberOfFields 1 -value1 1.0 offsetField; | |||
optionMenuGrp -label "Plane" planeMenu; | |||
menuItem -label "X"; | |||
menuItem -label "Y"; | |||
menuItem -label "Z"; | |||
separator -h 10; | |||
button | |||
-label "Create Sunburst" | |||
-height 30 | |||
-command "float $r = `floatFieldGrp -q -value1 radiusField`; int $s = `intFieldGrp -q -value1 spikesField`; float $o = `floatFieldGrp -q -value1 offsetField`; string $p = `optionMenuGrp -q -value planeMenu`; createSunburstCurve_UI($r, $s, $o, $p);"; | |||
showWindow sunburstWin; | |||
} | |||
// ========================================== | |||
// Launch | |||
// ========================================== | |||
sunburstUI(); | |||
</pre> | |||
=Forms= | |||
==Hedron== | |||
[[File:Hedron cv curve creation 4 sided example image.jpg | 100px]] | |||
<pre> | |||
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 ; | |||
</pre> | |||
==Hedron with pointer== | |||
[[File:Hedron with pointer cv curve creation 4 sided example image.jpg | 142px]]<pre> | |||
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 ; | |||
</pre> | |||
==Sphere== | |||
[[File:Sphere cv curve creation example image.jpg | 100px]] | |||
<pre> | |||
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 ; | |||
</pre> | |||
==Sphere with pointer== | |||
[[File:Sphere with pointer cv curve creation example image.jpg | 122px]] | |||
<pre> | |||
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 ; | |||
</pre> | |||
==Sphere with pointer Popup== | |||
[[File:Sphere with pointer popup cv curve creation example image.jpg | 143px]] | |||
<pre> | |||
// ========================================== | |||
// 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(); | |||
</pre> | |||
Latest revision as of 11:23, 16 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();
Sunburst with popup
// ==========================================
// Sunburst CV Curve Tool (MEL)
// ==========================================
global proc createSunburstCurve_UI(float $radius, int $spikes, float $burstOffset, string $plane)
{
if ($spikes < 3)
$spikes = 3;
float $angleStep = 360.0 / ($spikes * 2);
string $cmd = "curve -d 1";
for ($i = 0; $i <= ($spikes * 2); $i++)
{
float $angle = deg_to_rad($i * $angleStep);
float $currentRadius = ($i % 2 == 0) ? $radius : ($radius + $burstOffset);
float $a = sin($angle) * $currentRadius;
float $b = cos($angle) * $currentRadius;
// Plane selection
if ($plane == "X")
$cmd += (" -p 0 " + $a + " " + $b);
else if ($plane == "Y")
$cmd += (" -p " + $a + " 0 " + $b);
else
$cmd += (" -p " + $a + " " + $b + " 0");
}
string $curve = `eval $cmd`;
rename $curve "sunburst_CRV";
xform -ws -piv 0 0 0;
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;
}
// ==========================================
// UI
// ==========================================
global proc sunburstUI()
{
if (`window -exists sunburstWin`)
deleteUI sunburstWin;
window -title "Sunburst Curve" -widthHeight 280 200 sunburstWin;
columnLayout -adj true -rowSpacing 6;
floatFieldGrp -label "Circle Radius" -numberOfFields 1 -value1 2.0 radiusField;
intFieldGrp -label "Number of Spikes" -numberOfFields 1 -value1 12 spikesField;
floatFieldGrp -label "Burst Offset (+/-)" -numberOfFields 1 -value1 1.0 offsetField;
optionMenuGrp -label "Plane" planeMenu;
menuItem -label "X";
menuItem -label "Y";
menuItem -label "Z";
separator -h 10;
button
-label "Create Sunburst"
-height 30
-command "float $r = `floatFieldGrp -q -value1 radiusField`; int $s = `intFieldGrp -q -value1 spikesField`; float $o = `floatFieldGrp -q -value1 offsetField`; string $p = `optionMenuGrp -q -value planeMenu`; createSunburstCurve_UI($r, $s, $o, $p);";
showWindow sunburstWin;
}
// ==========================================
// Launch
// ==========================================
sunburstUI();
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();