Maxscript worked in 2023 but fails in 2024
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I have a custom script that modifies an object's normals in order to make it behave like a retroreflective material. The script worked fine in Max 2023, but ever since updating to Max 2024 it hasn't worked. I've ruled out any network or folder permissions issues. I've also tried it on multiple systems with the same results. Any help would be much appreciated!
Here is the script:
plugin simpleMeshMod Retroreflector
name:"Retroreflector"
classID:#(0x6ce99f6f, 0x315dd71d)
usePBValidity:off
(
local compilerParams =
(
compilerParams = dotNetObject "System.CodeDom.Compiler.CompilerParameters" #(
getDir #maxRoot + "\\bin\\assemblies\\Autodesk.Max.Wrappers.dll",
getDir #maxRoot + "\\Autodesk.Max.dll"
)
compilerParams.CompilerOptions = "/optimize+"
compilerParams.GenerateInMemory = true
compilerParams
)
local compilerResults = (dotNetObject "Microsoft.CSharp.CSharpCodeProvider").CompileAssemblyFromSource compilerParams #("
using System;
using Autodesk.Max;
using System.Runtime.InteropServices;
using Wrappers = Autodesk.Max.Wrappers;
class MeshNormals {
public static void SetNormalsConvergencePt(IntPtr mesh_pointer, IntPtr point3_pointer) {
var mesh = (IMesh)Wrappers.CustomMarshalerMesh.GetInstance(string.Empty).MarshalNativeToManaged(mesh_pointer);
var pt = (IPoint3)Wrappers.CustomMarshalerPoint3.GetInstance(string.Empty).MarshalNativeToManaged(point3_pointer);
if (mesh.SpecifiedNormals == null)
mesh.SpecifyNormals();
using (var normals = mesh.SpecifiedNormals) {
normals.SetParent(mesh);
if (mesh.GetFlag((uint)mesh.NormalsBuilt) == 0)
normals.CheckNormals();
for (int face = 0; face < mesh.NumFaces; face++) {
for (int faceCorner = 0; faceCorner < 3; faceCorner++) {
var vtxPos = mesh.Verts[(int)mesh.Faces[face].V[faceCorner]];
normals.SetNormal(face, faceCorner, pt.Subtract(vtxPos));
}
}
}
}
}"
)
local meshNormals = compilerResults.CompiledAssembly.CreateInstance "MeshNormals"
parameters main rollout:params ( centerObj type:#node useNodeTmValidity:on useNodeOsValidity:on ui:pbCenterObj; _dummy type:#maxObjectTab tabSizeVariable:on)
rollout params "Parameters" ( pickButton pbCenterObj "Pick Object" autoDisplay:on; )
on modifyMesh do if isValidNode centerObj do
meshNormals.SetNormalsConvergencePt mesh (centerObj.pos * inverse owningNode.objectTransform)
on postDisplay obj do
(
if classof obj == Editable_Poly do
(
deleteModifier obj (obj.numModifiers)
local ca = obj.custAttributes["A Simple Normal Modifier"]
if ca != undefined do
(
obj.custAttributes.delete ca
)
)
)
on attachedToNode node do if isValidNode node do
append this._dummy (NodeTransformMonitor node:node)
)
When I try to run it in 2024 I get this error (file paths modified for security):
-- Error occurred in anonymous codeblock; filename: C:\Users\...\Maxscripts\Retroreflector.ms; position: 2071; line: 48
-- MAXScript Scripted plugin local init Exception:
-- Runtime error: .NET runtime exception: Could not load file or assembly 'file:///C:\Users\...\AppData\Local\Temp\bijqyraz.dll' or one of its dependencies. The system cannot find the file specified.
-- MAXScript callstack:
-- thread data: threadID:77924