Thanks a lot, Fabricio!
The SelectMembers() function is one way to go. I also found:
var oSubComponent = oCluster.CreateSubComponent(); // text.isopnt[(3,0.922),(2,0.433),(0,0.267)]
I'll check shortly if it's "operator safe".

However, the U values are truncated after the 3rd decimal point. That's not too good. I believe there was a way to get the full floating point value of Isopoints, but can't find that at the moment.
Any idea?

Cheers!
Eugen


Am 15.11.2012 22:34, schrieb Fabricio Chamon:
maybe this (be sure to check if it is working properly):

var oObject = CreatePrim("Text", "NurbsCurve", null, null);
SelectObj("text.isopnt[(3,0.922)]", null, null);
AddToSelection("text.isopnt[(2,0.433)]", null, null);
AddToSelection("text.isopnt[(0,0.267)]", null, null);
AddToSelection("text.isopnt[(6,0.748)]", null, null);
AddToSelection("text.isopnt[(4,0.463)]", null, null);
var oCluster = oObject.ActivePrimitive.Geometry.AddCluster(siIsoPointCluster, "Isopoint_AUTO");
cElements = oCluster.Elements;
for(var i = 0; i < cElements.Count; i++)
    LogMessage(cElements(i)); // 0,1,2,3,4

var oSubComponent = oCluster.CreateSubComponent();
LogMessage("oSubComponent.Type: " + oSubComponent.Type); // isopntSubComponent LogMessage("ClassName(oSubComponent): " + ClassName(oSubComponent)); // SubComponent

var aElements = oSubComponent.ElementArray;
LogMessage("oSubComponent.ElementArray: " + aElements.toArray()); //
LogMessage("oSubComponent.ElementArray.length: " + aElements.length); // undefined

/////////////////////////////////////////////////////////

//get members as 1-item (string) collection (does not affect viewport selection)
var isopnts = SelectMembers(oCluster, false, false);
var isopntsString = isopnts.getastext();

//manipulate string to parse into a Vec3 Array
//logmessage(isopntsString);
var aIsoPnts = IsoPntVectorArrayFromClusterString(isopntsString);

// Vector.X = subcurve index / Vector.Y = curve U
for (i=0;i<aIsoPnts.length;i++){
logmessage ("Cluster item " + i + " -> Subcurve Index: "+ aIsoPnts[i].x + ", U: " + aIsoPnts[i].y);
}


//string parser function
function IsoPntVectorArrayFromClusterString(inStr){

var listString = inStr.substring( inStr.indexOf("[")+1, inStr.indexOf("]") )
var listSplitString = listString;
var aSplitIndices = new Array();
while (listSplitString.indexOf("),")!=-1){
aSplitIndices.push(listSplitString.indexOf("),"));
listSplitString = listSplitString.substring(0, listSplitString.indexOf("),")) + "#"+ listSplitString.substring(listSplitString.indexOf("),")+3);
}
listSplitString = listSplitString.substring(1,(listSplitString.length-1));
var aItems = listSplitString.split("#");
var aReturn = new Array();
for (i=0;i<aItems.length;i++){
var isopnt = XSIMath.CreateVector3();
var aValues = aItems[i].split(",");
isopnt.x = parseFloat(aValues[0]);
isopnt.y = parseFloat(aValues[1]);
aReturn.push(isopnt);
}
return aReturn;
}







2012/11/15 Eugen Sares <softim...@keyvis.at <mailto:softim...@keyvis.at>>

    Anyone?
    Thanks!

    Am 14.11.2012 14:32, schrieb Eugen Sares:

        Hi,
        I'm looking for away to get the SubcurveIndex/UValue data out
        again that an Isopoint Cluster was created from.


        var oObject = CreatePrim("Text", "NurbsCurve", null, null);
        SelectObj("text.isopnt[(3,0.922)]", null, null);
        AddToSelection("text.isopnt[(2,0.433)]", null, null);
        AddToSelection("text.isopnt[(0,0.267)]", null, null);
        AddToSelection("text.isopnt[(6,0.748)]", null, null);
        AddToSelection("text.isopnt[(4,0.463)]", null, null);
        var oCluster =
        oObject.ActivePrimitive.Geometry.AddCluster(siIsoPointCluster,
        "Isopoint_AUTO");
        cElements = oCluster.Elements;
        for(var i = 0; i < cElements.Count; i++)
            LogMessage(cElements(i)); // 0,1,2,3,4

        var oSubComponent = oCluster.CreateSubComponent();
        LogMessage("oSubComponent.Type: " + oSubComponent.Type); //
        isopntSubComponent
        LogMessage("ClassName(oSubComponent): " +
        ClassName(oSubComponent)); // SubComponent

        var aElements = oSubComponent.ElementArray;
        LogMessage("oSubComponent.ElementArray: " + aElements); //
        LogMessage("oSubComponent.ElementArray.length: " +
        aElements.length); // undefined



        So neither "Cluster.Elements" nor
        "Cluster.CreateSubComponent()" deliver anything usable. Dead end?
        What I'd like to achieve is to feed Isopoints into a Curve
        Operator.
        Thanks!
        Best,
        Eugen





Reply via email to