![](https://exlevel.com/forum/uploads/set_resources_6/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
cippall
Members-
Posts
13 -
Joined
-
Last visited
cippall's Achievements
-
Get wind Seed Offset value via maxscript
cippall replied to cippall's topic in For technical questions
That would definitely be useful. Thank you ! -
GrowFx 2.x add wind after mesh modifier maxscript
cippall replied to cippall's topic in For technical questions
Hi Eduard, I managed to create a wind and attach it to the paths. -- Create wind direction modifier wind_direction = $.addNode #NDirWind "Wind" 0 0 -- Connect wind direction to path 1 $.createConnection 1 4 wind_direction 2 -- Create public node public_node = $.addPublicNode wind_direction 3 "Wind" 100 0 -- Creating wind helper: gfx_wind = Windhelper name:($.name + "_wind") -- Attach the wind to the Public node: $.attachObjectToPublicNode public_node gfx_wind All good so far. While trying to modify the wind modifier properties values all work apart from Looping Value. /* WindDirection Values: [6] - Stiffness [7] - Flexibility [8] - Scale Frequency [9] - Amplitude Multiplier [11] - Use axial rotation [12] - Max angle [13] - Use Strength [14] - Strength factor [16] - Orientation for leaves [17] - Angle strength [19] - Looping Animation [20] - Looping period */ looping_period_property_index = 20 new_looping_value = 33 $.setNodeParamValue wind_direction looping_period_property_index new_looping_value What am I missing? Cheers! -
Hi Eduard, How can one create a wind after mesh modifier for each path for a GrowFx 2 object using maxscript? Cheers!
-
Get wind Seed Offset value via maxscript
cippall replied to cippall's topic in For technical questions
Hi Eduard, These methodes seem to work fine for Direction Modifiers, but not for After Mesh Modifiers. Can you provide an example for changing the Count Rate and Seed for a Wind modifier placed in the After Mesh Modifiers list? Thank you ! -
Would be great to be able to add an After Mesh Modifier Wind via script like in version 1 . Do you have any estimate when that would be implemented?
-
I'm migrating some functions that work ok in 1.9+ to 2.0+ but i can't find the equivalent methods. What are in GrowFx2 the equivalent for these methods: getPath <path_index_integer> Returns the indexed path, index are 1-based. getDistributor <path_index_integer> <distributor_index_integer> Returns the indexed distributor for the specified path, indexes are 1-based. getModifier <path_index_integer> <modifier_index_integer> Returns the indexed modifier for the specified path, indexes are 1-based. getMeshBuilder <path_index_integer> <mesh_index_integer> Returns the indexed mesh builder for the specified path, indexes are 1-based. getAfterMeshModifier Cheers!
-
milsas4048 started following cippall
-
harrysng40 started following cippall
-
Modify CacheFileName property via script
cippall replied to cippall's topic in For technical questions
Great! Thank you! -
Hi, Can we have the CacheFileName property editable via maxscript? This is useful when collecting and repathing assets. Thanks
-
Get wind Seed Offset value via maxscript
cippall replied to cippall's topic in For technical questions
Thank you! -
Hi, Is there a way to get the wind seed offset value with Maxscript? Using GrowFx 1.9.9 SP9 and 3dsmax 2020 returns an empty property when listing After Mesh Modifiers properties and Seed Offset seems to be one the missing: showproperties t.Wind .Enabled : boolean .ScaleFrequency : float .AxialRotation : boolean .MaxAngle : float .OrientForLeaves : boolean .Type : name .Looping : boolean .LoopingPeriod : time .AmplitudeMultiplier : float . .Stiffness : float .Stiffness_Graph .Flexibility : float .Flexibility_Graph
-
Did more testing and created a simplified version to be able to reproduce the behavior. If the script runs while the GrowFX object is selected and the 3dsmax Modify panel is active the error doesn't occur. To recreate the error run this script in a scene with : - one GrowFX that has at least one Wind Modifier attached to any paths - no GrowFX object selected during execution - 3dsmax 2020 - GrowFX 1.9.9 SP9 ( fn removeAfterMeshWindModifiers oGFX = ( for x = 1 to oGFX.getNumPaths() do ( for y = (oGFX.getNumAfterMeshModifiers x) to 1 by -1 do ( gfxAfterMeshModifier = oGFX.getAfterMeshModifier x y if hasProperty gfxAfterMeshModifier "Stiffness" then ( oGFX.deleteAfterMeshModifier x y ) ) ) ) try(destroydialog DeleteAfterMesh)catch() rollout DeleteAfterMesh "Demo" width:280 height:100 ( button btn_1 "START" width:252.0 usePercentageWidth:true percentageWidth:90.0 height:40 on btn_1 pressed do ( if queryBox "Deleting after mesh modifiers. Are you sure?" beep:false then ( aGFX = for x in objects where classOf x == GrowFX collect x for gfx in aGFX do removeAfterMeshWindModifiers gfx ) ) ) createDialog DeleteAfterMesh )
-
Hi, I'm getting EXCEPTION_ACCESS_VIOLATION when trying to delete all after mesh modifiers via maxscript( 3dsmax 2020 and GrowFX 1.9.9 SP9). I'm using this function - from a Rollout - while all paths are disabled: fn removeAfterMeshWindModifiers oGFX = ( for x = 1 to oGFX.getNumPaths() do ( for y = (oGFX.getNumAfterMeshModifiers x) to 1 by -1 do ( oGFX.deleteAfterMeshModifier x y ) ) ) Is there a better way to do this ? I suspect GrowFX updates the nodes while the script is traversing the paths tree and is causing this exception. Some of the error logs -- ######################################################################## -- Address: 0x329fff23; nCode: 0x00000000C0000005 -- Desc: EXCEPTION_ACCESS_VIOLATION The thread tried to read from or write to a virtual address for which it does not have the appropriate access. -- Read of Address: 0x0000000000000150 -- ######################################################################## ..... -- called from top-level -- ######################################################################## -- C++ callstack: -- (GrowFX): (filename not available): (function-name not available) -- (GrowFX): (filename not available): LibVersion -- (GrowFX): (filename not available): LibVersion -- (MAXScrpt): (filename not available): Generic::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): clear_error_source_data -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): clear_error_source_data -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): SourceFileWrapper::eval -- (MAXScrpt): (filename not available): Generic::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): SourceFileWrapper::eval -- (MAXScrpt): (filename not available): Generic::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): clear_error_source_data -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): clear_error_source_data -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): clear_error_source_data -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): clear_error_source_data -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): clear_error_source_data -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): clear_error_source_data -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): Primitive::apply -- (MAXScrpt): (filename not available): CodeTree::eval -- (MAXScrpt): (filename not available): Generic::apply -- (MAXScrpt): (filename not available): SourceFileWrapper::apply -- (MAXScrpt): (filename not available): RolloutControl::call_event_handler -- (MAXScrpt): (filename not available): RolloutControl::get_wrapped_event_handler -- (MAXScrpt): (filename not available): InitMacroScriptDir -- (MAXScrpt): (filename not available): InitMacroScriptDir -- (USER32): (filename not available): CallWindowProcW -- (USER32): (filename not available): DispatchMessageW -- (USER32): (filename not available): IsWindowVisible -- (ntdll): (filename not available): KiUserCallbackDispatcher -- (win32u): (filename not available): NtUserMessageCall -- (USER32): (filename not available): SendMessageW -- (USER32): (filename not available): SendMessageW -- (core): (filename not available): GetICustButton -- (core): (filename not available): CustomControl::WindowProc -- (core): (filename not available): AncestorIsCUIToolbarWindow -- (USER32): (filename not available): CallWindowProcW -- (USER32): (filename not available): DispatchMessageW -- (USER32): (filename not available): IsDialogMessageW -- (3dsmax): (filename not available): NodeAndAnims::SetNode