Build Tools Functional Spec

Category:Functional Specs
== General Description ==
What does this feature do?
* Allows users to create, modify, and destroy content within SL.
== Interface Requirements ==
How does the user use/activate this feature?
* Pie menu when right-clicking the ground or an object
* shortcut keys, ctrl-3, ctrl-4
* Build button
== Performance Requirements ==
Will this feature affect:
Client FPS? no
Simulator FPS? yes - physical objects slow simulator FPS
Database? no
Asset server? yes - taking or deleting objects will create assets
Network load? yes - selecting and updating many objects causes network load
Any other system? no
== Design Constraints ==
Will this feature be unavailable on certain hardware? no
Is this feature consistent with other features? yes, it uses floater windows
Is this feature well integrated? yes. There's room for improvement, such as making a build mode, keeping objects selected when moving around, and increasing view when manipulating large objects, and improving Undo functionality.
Is this feature discoverable? yes. The build button on the toolbar is highly visible.
Is this feature Safe, Predictable, and Responsive? Most build features are predictable. Undo is available for only move, scale and rotate and is unpredictable in some situations.
== Feature Dependencies ==
=== Features that this feature will affect ===
* Content creation
=== Features that affect this feature ===
* Mouse, UI controls, focus, camera controls, selection, linking
== Security risks ==
Does this feature give access to something it should not? NO
== Usage Rules ==
Rules:
Object scale rule
* No single side of the prim can scale larger than 10m or smaller than 0.010m. (See Megaprims and Prim Torture for exceptions and work arounds.)
Link distance rule
* To link two or more prims together, the must be "close". However the definition of "close" is very complicated, depending on the size of the objects as well as the distance between their centers.
* Reason for rule - to make things simpler for the physics engine and the simulator code.
Attachment offset limit
* The root prim of an attachment must stay within 3.5m of its attach point.
* Reason for rule - it seems a good balance(?)
Linked object prim limit
* 254?
* Reason for rule - limitation of the physics engine.
Physical object prim limit
* 31?
* Reason for rule - limitation imposed by physics engine performance and need to keep simulator performance reasonable.
Create
* Enter Create mode by
** Click the Build button in the toolbar
** Right click the ground or an object and choose Create from the pie menu
** Hit ctrl-4
* Your cursor will change to a wand
* Choose a shape 
* Click the ground or another object.
Selections
* Must be in edit mode.
* Adding to selection - shift select
* Subtracting from a selection - shift select
* Drag-select
** You can start your drag select by clicking and dragging anywhere.
** You can limit the scope of your selection through options in the Tools menu
*** Select only my object
*** Select only objects I can edit
** You can change the drag select sensitivity
*** Select whole object (vs. only selecting a vertice)
*** Select whole object requires your drag select to competely enclose the object.
** You can change the look of the selection
*** Show hidden lines
* Select textures
** Select textures allows you to click individual sides of objects and texture them.
** Shift click sides to add or subtract them from the selection.
** If you already have an object selected when you change to "select texture", all sides of the object(s) will be automatically selected.
* Select linked part
** select linked parts allows you to select individual prims within a linked set
** Shift click other prims within the linked set to add or subtract them from the selection.
*** You cannot select prims outside of the linked set.
** If you already have an object selected when you change to "select linked parts", all prims of the linked set will be automatically selected.
Deselecting
* Hit escape
* Click another object
* Walk or fly (unwanted feature)
Linking
* Select some objects that you have edit permissions for.
* Link selected objects together by pressing ctrl-L or Choosing Link from the tools menu. (should this be in a more prominent space?)
* link order - last selected prim becomes the root
(backwards for drag select - bug?)
Unlinking
* Unlinking whole set
** Select the object and hit shift-ctrl-L, or choose unlink from the Tools menu.
- All prims will be unlinked
* Unlinking piece(s) from linked set
** Root
- This leaves the selected prim selected. The new root of the other object will be prim selected second to last when the object was linked.
** Child
- The selected prim is unlinked and remains selected. Link order will be recalculated for the still linked object.
== Editing ==
=== Editing whole Linked sets ===
* Move
**Same behaviour as moving a single prim
* Rotate
**Same behaviour as rotating a single prim
 
* Scale
**All prims within the linked set must conform to the Object scale rule.
=== Editing one or multiple parts of a Linked set ===
* Move
** Obey the Link distance rule
** Other prims are unaffected
* Rotate
** Selected prims rotate around their own center of mass.
** Obey the Link distance rule
** Other prims are unaffected
* Scale
** Obey the Object scale rule
** Obey the Link distance rule
** Other prims are unaffected
=== Editing whole attachments ===
* Move
** Attachments movement must follow attachment offset limit (The root prim of an attachment must stay within 2m of its attach point.)
** Moving an object relative to Avatar shows the move arrows relative to the avatar's forward direction.
* Rotate
** Attachments rotate around their center of mass.
** Confined to attachment offset limit. The attachment may move after scaling to comply with the Attachment offset limit.
** Setting the reference to World, Avatar, or Object affects the rotate rings.
* Scale
** Confined to Object scale rule, Link distance rule, and Attachment offset limit. The attachment may move after scaling to comply with the Attachment offset limit.
** (does Scale relative to avatar do anything special?)
=== Editing one or multiple parts of an attachment ===
* Move
** The root must follow the Attachment offset limit
** If the edit breaks the Link distance rule, the edit will be automatically reverted, and the prims will snap back to their previous position. (?)
** Unmodified prims should not be affected by changes made to the root object.
* Rotate
** Unmodified prims should not be affected by changes made to the root object.
* Scale
** Unmodified prims should not be affected by changes made to the root object.
Editing seats
=== Dropping inventory onto objects you have edit permissions for. ===
* Textures
** Textures will be applied to the object face you dropped it on.
** Textures will be applied to all faces if you hold down Shift while dropping it on the object.
** The texture will also be added to the contents of the object if the texture has any permissions restrictions (eg. no-modify, no-copy, or no-transfer)
* Calling Cards 
** Calling Cards cannot be put into the contents of an object. You will see a "not" symbol if you try.
* Folders 
** Folders can be dragged onto an object. The contents of the folder will be copied to the content of the object. The folder itself will not show up in the contents of the object.
** no-copy items will be moved to the contents of the object.(right?)
* Objects
** Objects will rez near the object you dropped it on.
* Everything else
** Animations, Body Parts, Clothing, Gestures, Landmarks, Notecards, Scripts, and Sounds will simply go into the contents of the object.
=== Control-dropping inventory into objects you have edit permissions for. ===
* Textures
** Textures will be put into the contents of the object and Not applied to the side of the object.
* Calling Cards 
** Same as drop.
* Folders
** Same as drop.
* Objects
** Objects will be put into the contents of the object you control-dropped it on.
* Scripts
** Scripts will be put into the contents of the object, but will have their running checkbox unchecked. (this is confusing and not predictable)
* Everything else
** Animations, Body Parts, Clothing, Gestures, Landmarks, Notecards, and Sounds will simply go into the contents of the object.
=== Dragging inventory onto objects that allow anything to be dropped in them because of the llAllowInventoryDrop LSL command. ===
=== Dragging inventory over objects you don't have edit permissions for will show a "not" symbol. Except object, which will let you rez an object at the surface of the other object ===
Linked object editing
*Object scale limit rule
No single side of the prim can scale larger than 10m or smaller than 0.010m.
When uniformly scaling a linked set, all primitives within the linked set must obey the object scale limit rule
If you try to scale beyond the rule, the object will simply not scale (Needs feedback?)
=== Undo works only for ===
* text editing within notecards and scripts
* sliders within editing appearances
* object move, scale and rotation operations
== Undo / Redo ==
* Undo history is only kept for move, scale and rotation operations
* Each object has it's own undo history.
* The undo history is X(?) steps deep.
Taking and rezzing an object clears the object's undo history
A duplicated object has no undo history, the same as a new object.
Undo is only applied to the object(s) selected when you activate undo.
Linking clears undo history(?)
Unlinking clears undo history (?)
Undo can be accessed with Ctrl-z or via the Edit menu
Redo can be accessed with Ctrl-y or via the Edit menu
== UI widgets ==
* Move
* Scale
* Rotate
=== Grid snap ===
=== Scale both sides ===
* The object's center of mass will stay at the same position while the object is scaled.
=== Scale Textures ===
* When this is checked, the texture will keep the same number of repeats per face as the object. If you squish an object, the texture will squish along with it.
* When this is unchecked, the texture will attempt to keep the same number or repeats per meter.
Reference
* World
* Local / Avatar(?)
* Object(?)
Undo
Build Tools UI
* Focus (not really a build tool)
* Drag (not really a build tool)
* Edit
* Create
* Land (see ((FS_Parcels)) )
Edit
=== Features Tab ===
* Flexible Path
The extra parameters are ephemeral in the sense that they are remembered only as long as the object is rezzed in-world and the simulator doesn't restart.
* Light
The extra parameters are ephemeral in the sense that they are remembered only as long as the object is rezzed in-world and the simulator doesn't restart.