3D Canvas Community
3D Canvas Discussion Forums
Plug-In Development and Scripting
jitter|
Go
![]() |
New
![]() |
Find
![]() |
Notify
![]() |
Tools
![]() |
Reply
![]() |
|
|
Member |
Yo
I posted a script for destroying an object, but it was lost when the forum was changed, I think. Anyway I've rewritten to work on a selection of faces, and I think I've seen it called jitter in other applications - it moves pointsi in an object a little randomly to make them look imperfect. So here's the new script. Still don't know how to post code so if you want it check word wraps etc. the pikky is of a merino before and after the fleece is jittered, in this case by a max of 0.005 of the object size Language = VBScript '********************************************************************************* ' Purpose: move all point in a face selection by a random amount ' Script by George Jenner, January 2004 '********************************************************************************* Option Explicit 'require variable declarations Sub Main (CanvasApp) Dim Scene Dim ActiveObjectCount Dim ActiveFaceCount Dim Object Dim PointCount Dim ii 'for looping Dim jj Dim BoxMinX 'The Object's Bounding Box Dim BoxMinY 'The Object's Bounding Box Dim BoxMinZ 'The Object's Bounding Box Dim BoxMaxX 'The Object's Bounding Box Dim BoxMaxY 'The Object's Bounding Box Dim BoxMaxZ 'The Object's Bounding Box Dim XSize Dim YSize Dim ZSize Dim XDelta Dim YDelta Dim ZDelta Dim PX Dim PY Dim PZ Dim Points() ' and array to see if a point has already been moved Dim Face 'Face we are working on Dim ObjectPoint 'number of point in the object Dim FacePoints 'numbe of points in a face Randomize 'get the scene Set Scene = CanvasApp.GetActiveScene 'get the active object count ActiveObjectCount = Scene.GetActiveObjectCount ActiveFaceCount=Scene.GetActiveFaceCount ' msgBox("Points " & ActiveFaceCount) 'only proceed if there is an active object If ActiveFaceCount <1 Then MsgBox "Please select at least one face." Else 'get the active object (right now there can only be one) Set Object = Scene.GetActiveObject(0) 'get the object's dimensions Object.GetBoundingBox BoxMinX, BoxMinY, BoxMinZ, BoxMaxX, BoxMaxY, BoxMaxZ XSize = BoxMaxX-BoxMinX YSize = BoxMaxY-BoxMinY ZSize = BoxMaxZ-BoxMinZ XDelta = InputBox("Max to move X? I want a proportion of it's size: "& XSize,,".01") YDelta = InputBox("Max to move Y? I want a proportion of it's size: "& YSize,,".01") ZDelta = InputBox("Max to move Z? I want a proportion of it's size: "& ZSize,,".01") 'so Maximum Perturbations are +/- XDelta=XDelta*XSize YDelta=YDelta*YSize ZDelta=ZDelta*ZSize PointCount = Object.GetPointCount Redim Points (PointCount) 'this will be set to 1 if the point is moved for ii=0 to PointCount-1 Points(ii)=0 next for ii=0 to ActiveFaceCount-1 set Face=Scene.GetActiveFace(ii) FacePoints=Face.GetPointCount Randomize For jj= 0 to FacePoints-1 ObjectPoint=Face.GetPoint (jj) if Points(ObjectPoint)=0 then 'then it hasn't yet been moved Object.GetPoint ObjectPoint, PX,PY,PZ Object.SetPoint ObjectPoint, PX+XDelta-(2*Rnd*XDelta),PY+YDelta-(2*Rnd*YDelta),PZ+ZDelta-(2*Rnd*ZDelta) Points(ObjectPoint)=1 end if next next end if 'finally write a Script operation layer to save the change Object.GenerateNormals 3.1415926/3 Object.WriteScriptOperationLayer End Sub ----------------------end script---------------- smoothandwoolly.jpg (40 Kb, 238 downloads) |
||
|
|
Member |
i like this - it seems to add more detail to an object with little or no work
|
|||
|
|
Member |
Yep, ecxatly what I have been looking for!
"Eat me! See if I care." |
|||
|
|
Junior Member |
Can also be used to make a decent terrain effect too..
|
|||
|
|
Member |
This is great, thanks Geo_jenner!
|
|||
|
|
Member |
no worries. It would be easy to make into an operation if anyone was so inclined. I think.
George |
|||
|
| Previous Topic | Next Topic | powered by eve community |
| Please Wait. Your request is being processed... |
|

