Talk:Hierarchics
Default Rotation etc
It's a good script but the no rotation specified code leaves much to be desired. If the user specifies in the objects description that it should have a zero rotation, the script will ignore it. Additionally it forces the user to use Euler notation. You need something like: <lsl> rotation AngleString2Rot(string in, rotation bad){
//we test if it is an angle type we can use by: //1) parse input and see if it has a value //2) flip the sign of an element and test again. rotation r = (rotation)in; if(r)//it's a rotation (or something greater) return r;//by greater it might be <x,y,z,s,...>
vector v = (vector)in; if(v)// it's not a rotation but it is a vector return llEuler2Rot(v * DEG_TO_RAD);
//now it's either default or invalid //to determine which, we modify the input string and test agian //if it passes, we know the result should be ZERO_ROTATION integer index = llSubStringIndex(in, "<"); if(~index) { //we insert a negative sign //but we have to remove spaces or they will cause problems //we don't care about negative negative zero because //breaking the parse is an indication that it did parse. in = llGetSubString(in, 0, index) + "-" + llStringTrim(llDeleteSubString(in, 0, index), STRING_TRIM_HEAD);
if((string)((vector)in) != (string)v) return r; //r is Identity but could have negative zero's, waste not want not. //the user specified them, we should preserve them. } return bad;