/*************************************************************************** * * * Copyright (C) Golaem S.A. - All Rights Reserved. * * * ***************************************************************************/ //------------------------------------------------------------ //! Transfer vertices anim of selected meshes to transform of new meshes /*! \note meshes to convert must be selected before calling this function \return create a new group containing duplicate meshes of the input meshes */ //--------------------------------------------------------- global proc glmTransferVerticesAnimToTransform() { string $transforms[] = getSelectedObjectsOfType("transform"); string $group = `group -em -n ("bakedGroup")`; string $polyGroup = `group -em -parent $group -n ("meshes")`; string $rivetGroup = `group -em -parent $group -n ("rivets")`; for ($transform in $transforms) { string $shapes[] = getShapes($transform); for ($shape in $shapes) { string $shapeTransform = getTransform($shape); // try to avoid colinear edges // int $firstEdge = 0; int $secondEdge = 1; int $nbEdges[] = `polyEvaluate -e $shapeTransform`; select -r ($shapeTransform+".e["+ $firstEdge +"]"); PolySelectConvert 3; // Converts the selection to vertices string $refVertices[] = `ls -sl -fl`; int $foundAppropriateEdge = 0; int $iEdge = $secondEdge; string $otherVertices[]; do { select -r ($shapeTransform+".e["+ $iEdge +"]"); PolySelectConvert 3; // Converts the selection to vertices $otherVertices = `ls -sl -fl`; if ($refVertices[0] != $otherVertices[0] && $refVertices[0] != $otherVertices[1] && $refVertices[1] != $otherVertices[0] && $refVertices[1] != $otherVertices[1]) { $secondEdge = $iEdge; $foundAppropriateEdge = 1; } $iEdge++; } while ($iEdge < $nbEdges[0] && $foundAppropriateEdge == 0); // // build rivet select -r ($shapeTransform+".e["+ $firstEdge +"]") ($shapeTransform+".e["+ $secondEdge +"]"); string $rivetName = `rivet`; select -clear; // build new polygon string $dupShapeTransform[] = `duplicate -n ($shapeTransform + "_rivet") -rr $shapeTransform`; // constraint rivet to new polygon parentConstraint -w 1. -mo $rivetName $dupShapeTransform[0]; // sort everything in the outliner parent $rivetName $rivetGroup; parent $dupShapeTransform $polyGroup; } } } // Copyright (C) 2000-2001 Michael Bazhutkin - Copyright (C) 2000 studio Klassika // www.geocites.com/bazhutkin // bazhutkin@mail.ru // // Rivet (button) 1.0 // Script File // MODIFY THIS AT YOUR OWN RISK // // Creation Date: April 13, 2001 // // // Description: // Use "Rivet" to constrain locator to polygon or NURBS surfaces // Select two edges on polygon object // or select one point on NURBS surface and call rivet // Parent your rivets and buttons to this locator global proc string rivet ( ) { string $nameObject; string $namePOSI; string $parts[]; string $list[] = `filterExpand -sm 32`; int $size = size($list); if ($size > 0) { if ($size != 2) { error("No two edges selected"); return ""; } tokenize($list[0],".",$parts); $nameObject = $parts[0]; tokenize($list[0],"[]",$parts); float $e1 = $parts[1]; tokenize($list[1],"[]",$parts); float $e2 = $parts[1]; string $nameCFME1 = `createNode curveFromMeshEdge -n "rivetCurveFromMeshEdge1"`; setAttr ".ihi" 1; setAttr ".ei[0]" $e1; string $nameCFME2 = `createNode curveFromMeshEdge -n "rivetCurveFromMeshEdge2"`; setAttr ".ihi" 1; setAttr ".ei[0]" $e2; string $nameLoft = `createNode loft -n "rivetLoft1"`; setAttr -s 2 ".ic"; setAttr ".u" yes; setAttr ".rsn" yes; $namePOSI = `createNode pointOnSurfaceInfo -n "rivetPointOnSurfaceInfo1"`; setAttr ".turnOnPercentage" 1; setAttr ".parameterU" 0.5; setAttr ".parameterV" 0.5; connectAttr -f ($nameLoft + ".os") ($namePOSI + ".is"); connectAttr ($nameCFME1 + ".oc") ($nameLoft + ".ic[0]"); connectAttr ($nameCFME2 + ".oc") ($nameLoft + ".ic[1]"); connectAttr ($nameObject + ".w") ($nameCFME1 + ".im"); connectAttr ($nameObject + ".w") ($nameCFME2 + ".im"); } else { $list = `filterExpand -sm 41`; $size = size($list); if ($size > 0) { if ($size != 1) { error("No one point selected"); return ""; } tokenize($list[0],".",$parts); $nameObject = $parts[0]; tokenize($list[0],"[]",$parts); float $u = $parts[1]; float $v = $parts[2]; $namePOSI = `createNode pointOnSurfaceInfo -n "rivetPointOnSurfaceInfo1"`; setAttr ".turnOnPercentage" 0; setAttr ".parameterU" $u; setAttr ".parameterV" $v; connectAttr -f ($nameObject + ".ws") ($namePOSI + ".is"); } else { error("No edges or point selected"); return ""; } } string $nameLocator = `createNode transform -n "rivet1"`; createNode locator -n ($nameLocator + "Shape") -p $nameLocator; string $nameAC = `createNode aimConstraint -p $nameLocator -n ($nameLocator + "_rivetAimConstraint1")`; setAttr ".tg[0].tw" 1; setAttr ".a" -type "double3" 0 1 0; setAttr ".u" -type "double3" 0 0 1; setAttr -k off ".v"; setAttr -k off ".tx"; setAttr -k off ".ty"; setAttr -k off ".tz"; setAttr -k off ".rx"; setAttr -k off ".ry"; setAttr -k off ".rz"; setAttr -k off ".sx"; setAttr -k off ".sy"; setAttr -k off ".sz"; connectAttr ($namePOSI + ".position") ($nameLocator + ".translate"); connectAttr ($namePOSI + ".n") ($nameAC + ".tg[0].tt"); connectAttr ($namePOSI + ".tv") ($nameAC + ".wu"); connectAttr ($nameAC + ".crx") ($nameLocator + ".rx"); connectAttr ($nameAC + ".cry") ($nameLocator + ".ry"); connectAttr ($nameAC + ".crz") ($nameLocator + ".rz"); select -r $nameLocator; return ($nameLocator); }