Difference between revisions of "User:Daemonika Nightfire/Scripts/*DS* Resize Script"
Jump to navigation
Jump to search
Line 28: | Line 28: | ||
if you are small your object and several prims already have minimum dimensions, they are not further reduced, but they are moved proportionally. | if you are small your object and several prims already have minimum dimensions, they are not further reduced, but they are moved proportionally. | ||
• Sculpted Prims are no problem, but take care. | • Sculpted Prims are no problem, but take care. | ||
Sculpties with moved Bounding Box perhaps | Sculpties with moved Bounding Box perhaps moving optical not correct | ||
That is not true, they are moving correctly, but when the visible Sculptie is not the center of the Bounding Box, it will be looking wrong. | That is not true, they are moving correctly, but when the visible Sculptie is not the center of the Bounding Box, it will be looking wrong. | ||
Revision as of 06:37, 14 December 2011
*DS* Resize Script (m/c/t) v2.0.01
Single resize script for a complete linkset with save and restore option. <lsl> /*
╔═════════════════════════════════════−−−→ ║ *DS* Resize Script (m/c/t) by Daemonika Nightfire (daemonika.nightfire) ╚══════════════════════−−−→ Resize Script for rezzed Objects and Attachments. Single-script for a complete linkset with save and restore option. Featueres: • By the first run or reset of this script, it will ask you to save all parameters. The parameters will be stored in the descriptionfield of each prim, that needs no script-memory :) • You can save, resize and restore individual prims or the complette linkset. • Deleting this script from the object is not required because its only one. Standby-Time ~ 0.004 ms Working-Time with 200 moving Prims ~ 4.000 up to 16.000 ms after finalizing Standby-Time ~ 0.004 ms again Note: • You have to stand on a posestand, if you want to edit attached attachments. This is necessary because otherwise the linkset is misadjusted, if you move your avatar during the process. Important: • Undersize is possible, but take care. if you are small your object and several prims already have minimum dimensions, they are not further reduced, but they are moved proportionally. • Sculpted Prims are no problem, but take care. Sculpties with moved Bounding Box perhaps moving optical not correct That is not true, they are moving correctly, but when the visible Sculptie is not the center of the Bounding Box, it will be looking wrong. Terms of use: You can use, edit and sell this script inside your creations with the following permissions in Second Life: • MOD Yes • COPY Yes • TRANSFER Yes Yes that means fullperm. Other settings, are against the following licenses. The permission of your Object (prim), remain unaffected by these terms https://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script http://wiki.secondlife.com/wiki/Project:Terms_of_Service http://creativecommons.org/licenses/by-sa/3.0/ violation of this Terms are against the Second Life TOS at §7 Content Licenses and Intellectual Property Rights. http://secondlife.com/corporate/tos.php
- /
key owner; integer new = TRUE;
integer LinkSet = TRUE; integer Prim;
integer Channel; integer Listener; Chan() {
llListenRemove(Listener); Channel = (integer)(llFrand(999999.0) * -1); Listener = llListen(Channel, "", owner, ""); llSetTimerEvent(60);
}
menu1() {
Chan(); if(new) { llDialog(owner, "\nYour first run or reset of this script.\nDo you whish to save current parameters?", ["Save","Later"], Channel); } else { llDialog(owner, "\nselect an option\nThis = touched Prim\nAll = complete Object", ["This","All","Done"], Channel); }
}
menu2() {
Chan(); llDialog(owner, "\n+ - = resize\nSave = record all parameters\nRestore = restore saved parameters", ["Save","Restore","Done","-1%","-5%","-10%","+1%","+5%","+10%"], Channel);
}
default {
state_entry() { owner = llGetOwner(); llWhisper(0,"/me " + llGetScriptName() + " Free Memory: " + (string)llGetFreeMemory() + " bytes."); } touch_start(integer total_number) { if(llDetectedKey(0) == owner) { if(llGetAttached() != 0) { if(llGetAgentInfo(owner) & AGENT_SITTING) { Prim = llDetectedLinkNumber(0); menu1(); } else { llOwnerSay("Please use a posing stand for resizing!"); } } else { Prim = llDetectedLinkNumber(0); menu1(); } } } listen(integer channel, string name, key id, string msg) { float shift = 0; vector position; vector size; list link; integer i; if(msg == "This") { LinkSet = FALSE; menu2(); } else if(msg == "All") { LinkSet = TRUE; menu2(); } else if(msg == "Done" || msg == "Later") { llListenRemove(Listener); llSetTimerEvent(0); } else if(msg == "-1%") { shift = 0.99; } else if(msg == "-5%") { shift = 0.95; } else if(msg == "-10%") { shift = 0.9; } else if(msg == "+1%") { shift = 1.01; } else if(msg == "+5%") { shift = 1.05; } else if(msg == "+10%") { shift = 1.1; } // Record else if(msg == "Save") { llOwnerSay("Please wait..."); if(!LinkSet) { link = llGetLinkPrimitiveParams(Prim, [PRIM_SIZE , PRIM_POSITION]); position = llList2Vector(link, 1); position = (position - llGetRootPosition()) / llGetRootRotation(); size = llList2Vector(link, 0); llSetLinkPrimitiveParamsFast(Prim,[PRIM_DESC,(string)size + "#" + (string)position]); } else { for(i = 0; i <= llGetNumberOfPrims(); i++) { link = llGetLinkPrimitiveParams(i, [PRIM_SIZE , PRIM_POSITION]); size = llList2Vector(link, 0); position = llList2Vector(link, 1); position = (position - llGetRootPosition()) / llGetRootRotation(); if(i > 1) { llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size + "#" + (string)position]); } else { llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size]); } } new = FALSE; } llOwnerSay("All parameters are stored"); menu2(); } // Restore else if(msg == "Restore") { if(!new) { llOwnerSay("Please wait..."); if(!LinkSet) { link = llGetLinkPrimitiveParams(Prim, [PRIM_DESC]); list parsed = llParseString2List(llList2CSV(link), ["#"], []); string vect = llList2String(parsed, 0); size = (vector)vect; llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); } else { for(i = 0; i <= llGetNumberOfPrims(); i++) { link = llGetLinkPrimitiveParams(i, [PRIM_DESC]); list parsed = llParseString2List(llList2CSV(link), ["#"], []); string vect = llList2String(parsed, 0); size = (vector)vect; string posi = llList2String(parsed, 1); position = (vector)posi; if(i > 1) { llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POSITION, position]); } else { llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size]); } } } llOwnerSay("All stored parameters restored."); menu2(); } else if(new) { llOwnerSay("Please first save all paremeters to use this."); } } // Resize if(shift != 0) { llOwnerSay("Please wait..."); if(!LinkSet) { link = llGetLinkPrimitiveParams(Prim, [PRIM_SIZE]); size = llList2Vector(link, 0) * shift; llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); } else { for(i = 0; i <= llGetNumberOfPrims(); i++) { link = llGetLinkPrimitiveParams(i, [PRIM_SIZE, PRIM_POSITION]); size = llList2Vector(link, 0) * shift; position = llList2Vector(link, 1); position = (position - llGetRootPosition()) / llGetRootRotation() * shift; if(i > 1) { llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POSITION, position]); } else { llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size]); } } } llOwnerSay("Finish."); menu2(); } } timer() { llSetTimerEvent(0); llListenRemove(Listener); llOwnerSay("Listener timeout, please touch again to use the menu."); } on_rez(integer Dae) { if(new) { llResetScript(); } }
} </lsl>