I'm living in the past, almost two years? Damnit.
On Mon, Mar 18, 2013 at 10:03 PM, Dave Thomlison <[email protected]>wrote: > Almost a year later.... I've used this script a few times now, I've always > gotten the same error message when trying to copy over weights > > > 62 WeightsArray.push(NewWeights); > "// ERROR : Object doesn't support this property or method - [line 62]" > > In the past the curves have always stuck fairly well to the geo so I > assumed it was working properly. This latest time it seems to be ignoring > the geo's weights and is applying a new envelope as if I'd just set a new > envelope - lots of stretching between the curves. Has anybody else run > into this? Does anybody know of a workaround for copying weights from a > mesh to a curve? > > > Thanks, > > Dave > > > > > > On Mon, Mar 28, 2011 at 9:16 AM, Jeremie Passerin <[email protected]>wrote: > >> Eric, maybe we should just log the request :) >> >> cheers, Cyril ! >> I'll try it next time. >> hope you're doing fine, long time no see ;-) >> >> >> On 28 March 2011 15:10, Cyril Gibaud <[email protected]> wrote: >> >>> Hi >>> >>> No idea of the actual reason...except that poymeshes/Surfaces geometries >>> are not defined as Curves geometries, so I guess the exact same algorithm >>> cannot be used. >>> >>> I don't know if you need something like that but I had to gator curves >>> to polymeshes recently so I wrote a very simple function that acts pretty >>> much like a gator curve...Maybe could be helpfull for others anyway ^^. >>> >>> The script is not commented...for a simple usage select your curve then >>> your polymesh, or just the curve and you will be asked to pick a polymsh. >>> Don't hesistate to contact me if it doesn't work anymore. >>> >>> cheers >>> >>> Cyril >>> >>> >>> // --- JAVASCRIPT --- >>> >>> var oSel = GetValue("SelectionList"); >>> >>> if(oSel.Count > 0) >>> { >>> if(oSel.Count > 1) >>> { >>> GatorCurve(oSel(0), selection(1)); >>> } >>> else >>> { >>> var rtn = PickElement(siPolyMeshFilter, "Select polymesh", "Select >>> polymesh"); >>> var element = rtn.Value( "PickedElement"); >>> >>> logmessage(element.Type); >>> >>> if(element.Type == "polymsh") >>> { >>> GatorCurve(GetValue("SelectionList")(0), element); >>> } >>> } >>> } >>> else >>> { >>> logmessage("Please select the curve, and eventually the mesh to be >>> \"gatorized\" !", siError); >>> } >>> >>> function GatorCurve(inCurve, inMesh) >>> { >>> var NurbsCurve = inCurve.ActivePrimitive.Geometry.Curves(0); >>> var oGeo = inMesh.ActivePrimitive.Geometry; >>> var oEnvelope = inMesh.ActivePrimitive.ConstructionHistory.Find( >>> "envelopop" ); >>> var oDefs = oEnvelope.Deformers; >>> >>> var oEnvelopeWeights = oEnvelope.Weights.Array.toArray(); >>> >>> ApplyFlexEnv(inCurve + ";" + oDefs.GetAsText(), null, 2); >>> >>> var CurveEnvelope = inCurve.ActivePrimitive.ConstructionHistory.Find( >>> "envelopop" ); >>> >>> var WeightsArray = new Array(); >>> var DeformWeightsArray = new Array(oDefs.Count); >>> >>> for(var i = 0; i < NurbsCurve.ControlPoints.Count ; i++) >>> { >>> //Get closest from the point >>> var ClosestPointLocator = oGeo.GetClosestLocations(new >>> Array(NurbsCurve.ControlPoints(i).Position.X, >>> NurbsCurve.ControlPoints(i).Position.Y, >>> NurbsCurve.ControlPoints(i).Position.Z)) >>> >>> var TriangleVertices = >>> oGeo.GetTriangleVertexIndexArray(ClosestPointLocator).toArray(); >>> var TriangleWeights = >>> oGeo.GetTriangleWeightArray(ClosestPointLocator).toArray(); >>> >>> //GetWeights for each vertex >>> >>> var NewWeights1 = GetSubArray(oEnvelopeWeights, oDefs.Count, >>> TriangleVertices[0]); >>> var NewWeights2 = GetSubArray(oEnvelopeWeights, oDefs.Count, >>> TriangleVertices[1]); >>> var NewWeights3 = GetSubArray(oEnvelopeWeights, oDefs.Count, >>> TriangleVertices[2]); >>> >>> //Blend Arrays >>> var NewWeights = BlendArrays(NewWeights1, TriangleWeights[0], >>> NewWeights2, TriangleWeights[1], NewWeights3, TriangleWeights[2]); >>> >>> WeightsArray.push(NewWeights); >>> } >>> >>> for(var k = 0; k < oDefs.Count ; k++) >>> { >>> DeformWeightsArray[k] = new Array(WeightsArray.length); >>> >>> for(var j = 0; j < WeightsArray.length ; j++) >>> { >>> DeformWeightsArray[k][j] = WeightsArray[j][k]; >>> } >>> } >>> >>> for(var j = 0; j < oDefs.Count ; j++) >>> { >>> CurveEnvelope.SetDeformerWeights(oDefs(j), >>> JS2VBArray(DeformWeightsArray[j])); >>> } >>> } >>> >>> function GetSubArray(inEnvelopeWeights, inDefsCount, inIndex) >>> { >>> var NewArray = new Array(inDefsCount); >>> >>> for(var i = 0 ; i < inDefsCount; i++) >>> { >>> NewArray[i] = inEnvelopeWeights[i + ( inIndex * inDefsCount)]; >>> } >>> >>> return NewArray; >>> } >>> >>> function BlendArrays(inNewWeights1, inWeights1, inNewWeights2, >>> inWeights2, inNewWeights3, inWeights3) >>> { >>> var NewArray = new Array(inNewWeights1.length); >>> >>> for(var i = 0 ; i < NewArray.length; i++) >>> { >>> NewArray[i] = inNewWeights1[i] * inWeights1 + inNewWeights2[i] * >>> inWeights2 + inNewWeights3[i] * inWeights3; >>> } >>> >>> return NewArray; >>> } >>> >>> >>> function JS2VBArray( objJSArray ) >>> { >>> var dictionary = new ActiveXObject( "Scripting.Dictionary" ); >>> for ( var i = 0; i < objJSArray.length; i++ ) >>> { >>> dictionary.add( i, objJSArray[ i ] ); >>> } >>> >>> return dictionary.Items(); >>> } >>> >>> // --- END OF SCRIPT --- >>> >>> *From:* Jeremie Passerin <[email protected]> >>> *Sent:* Monday, March 28, 2011 10:01 AM >>> *To:* [email protected] >>> *Subject:* Gator and Curves >>> >>> Hey list, >>> >>> Anyone knows the reason why we can not use gator with curves ? I mean to >>> transfer envelope and shapes ? >>> >>> cheers, >>> >>> Jeremie >>> >> >> > > > -- > Dave Thomlison > -- Dave Thomlison

