Re: Help with Expression
| Date : Tue, 14 Mar 2006 15:29:43 +0100 |
| To : XSI(at)Softimage.COM |
| From : Christian Götzinger <cg(at)pension-goetzinger.de> |
| Subject : Re: Help with Expression |
Hi,
thanks a lot. It's working like a charm now. Since I'm using nulls as parents for my book geometry, I could get away with a much easier script:
// align books in x with a specified distance
function AlignObjectsX(objects, distance)
{
for (i=0; i<objects.Count-1; i++)
{
objects(i+1).Kinematics.Local.Parameters("posx").value = objects(i).Kinematics.Local.Parameters("posx").value + objects(i).Kinematics.Local.Parameters("sclx").value + distance; }
}
AlignObjectsX(Selection, 0.2);
I also tried to randomize the distance value but couldn't figure out how to do it. It's not so important because it won't make a difference, but just out of curiosity - how would I do that?
I tried with RAND(0.2, 0.4) but that didn't work.
Thanks a lot for your help, Chris
Kai Wolter schrieb:
don't think it works with expressions because you would need them in both directions and that will lead to a circle.
but i liked the task, so here are a few helper functions:
// align books in x with a specified distance
function AlignObjectsX(objects, distance)
{
for (i=0; i<objects.Count-1; i++)
{
//xmin, ymin, zmin, xmax, ymax, zmax col1 = GetBBox (objects(i) , false, null, null, null, null, null, null );
col2 = GetBBox (objects(i+1) , false, null, null, null, null, null, null );
objects(i+1).Kinematics.Global.Parameters( "posx" ).Value = col1(3) + (col2(3) - col2(0))/2 + distance;
}
}
// align books in y
function AlignToObjectY(objects, object)
{
col = GetBBox (object, false, null, null, null, null, null, null );
for (i=0; i<objects.Count; i++)
{
col2 = GetBBox (objects(i) , false, null, null, null, null, null, null );
objects(i).Kinematics.Global.Parameters( "posy" ).Value = objects(i).Kinematics.Global.Parameters( "posy" ).Value + object.Kinematics.Global.Parameters( "posy" ).Value - (col2(1) - col(1));
}
}
// sample scene
CreatePrim("Cube", "MeshSurface", null, null);
Scale(null, 9.47775628626693E-02, 1, 1, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0);
Scale(null, 1, 1, 0.720870034294196, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0);
Duplicate("cube", null, siDuplicateHistory, siSharedParent, siShareGrouping, siDuplicateProperties, siDuplicateAnimation, siShareConstraints, siSetSelection, siApplyRepeatXForm, null, null, null, null, null, null, null, null, null, null, siDuplicateSelectedTextureSupports);
Scale(null, 2.08001760680689, 1, 1, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0);
Duplicate("cube1", null, siDuplicateHistory, siSharedParent, siShareGrouping, siDuplicateProperties, siDuplicateAnimation, siShareConstraints, siSetSelection, siApplyRepeatXForm, null, null, null, null, null, null, null, null, null, null, siDuplicateSelectedTextureSupports);
Scale(null, 0.709690205494565, 1, 1, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0);
Scale(null, 1, 1.11605415860735, 1, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0);
DeleteObj("cube2");
SelectObj("cube,cube1", null, true);
SelectObj("cube1", null, true);
Duplicate("cube1", null, siDuplicateHistory, siSharedParent, siShareGrouping, siDuplicateProperties, siDuplicateAnimation, siShareConstraints, siSetSelection, siApplyRepeatXForm, null, null, null, null, null, null, null, null, null, null, siDuplicateSelectedTextureSupports);
Scale(null, 1.49986352670082, 1, 1, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0);
SelectObj("cube1", null, true);
Scale(null, 1, 2.29980657640232, 1, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0);
SelectObj("cube2", null, true);
Scale(null, 1, 0.686653771760155, 1, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0);
DeselectAll();
SelectObj("cube", null, null);
ToggleSelection("cube1", null, null);
ToggleSelection("cube2", null, null);
AlignObjectsX(Selection, 1.5); AlignToObjectY(Selection, Selection(0));
Cheers, Kai
Christian Götzinger schrieb:
Hi List,
I also posted this on XSIBase but seeing as this mailing list is probably the best place to get answers to technical questions, here goes:
I'm in the process of creating several bookshelves filled with books.
I have created one book which I'm going to duplicate off many times. Basically, I've parented that one book to a null and I'm using the null to scale the book up and down. This way I can lateron randomize the sizes of all my books very easily.
Now, what I'd like to do is for XSI to align my books automatically next to each other.
Here's my basic setup:
BookP1 (Null) -> Scale X = 5 -- Scale Y = 25 -- Scale Z = 15 Child: Book1 (which is the actual book)
To test things out I have duplicated the hierarchy to create BookP2 and its child Book2
I have set this expression on BookP2's local position X:
Valid expression : BookP2.kine.local.posx = BookP1.kine.local.posx+BookP1.kine.local.sclx
This works very well. If I scale BookP1 up in X, the second book gets aligned automatically.
Now my question: how can I generalize this expression so that it'll be valid for all books once I've mass duplicated them?
I'm not into scripting or anything, so this may seem like a piece of cake to you
Thanks, Chris
---
Unsubscribe? Mail Majordomo(at)Softimage.COM with the following text in body:
unsubscribe xsi
--- Unsubscribe? Mail Majordomo(at)Softimage.COM with the following text in body: unsubscribe xsi
- References:
- Help with Expression
- From: Christian Götzinger <cg(at)pension-goetzinger.de>
- Re: Help with Expression
- From: Kai Wolter <xsi(at)kaipirinha.com>
- Help with Expression
| DATE: | << | >> | THREAD: | << | >> | INDEX: | Main | Thread |
|---|
- Previous by Date: RE: BatchServe?
- Next by Date: RE: BatchServe?
- Previous by Thread: RE: BatchServe?
- Next by Thread: RE: BatchServe?
- Index(es):
| Search the XSI List archives here or use the advanced search form to search across mailing lists. Searching help is available. |