I want to be able to use the VRay for Rhino methods in a VBScript code, but when I try something on the lines of
Dim vRay: vRay = Rhino.GetPlugInObject("V-Ray for Matrix")
Dim name: name = vRay.GetMaterialNameFromVismat(vismat_file_path)
I get
Object does not support this property or method
Am I understanding something wrong?
Hi Bhupati,
In VBScript you cannot assign an Object to a variable of type Variant. You have to use Set
like below:
Option Explicit
Call Main()
Sub Main()
Dim VRay, name, f
Set VRay = Rhino.GetPlugInObject("V-Ray For Rhino")
f = "D:\Software\VRay\Materials\360Materials\aqua\aqua.vismat"
name = VRay.GetMaterialNameFromVismat(f, 1)
If len(name) = 0 Then
Rhino.Print "Error"
Else
Rhino.Print "MaterialName: " & name
End If
End Sub
Does that help ?
c.
1 Like
@clement Nope! I’m still getting the Object required for Rhino.GetPlugInObject
error. Did it work for you?
Here are a view tips to try
-
Is V-Ray for Rhino/Matrix loaded and able to generate renders?
-
If you have matrix installed, I always prefer to use the GUID vs Plugin name to find the plug in object.
-
Is vismat_file_path a string?
GetPlugInObject("{E8CFE179-B60C-411A-8416-62A893334519}")
I was able to get the below code to work:
Option Explicit
Call Main()
Sub Main()
Dim VRay
Set VRay = Rhino.GetPluginObject("{E8CFE179-B60C-411A-8416-62A893334519}")
' The bool at the end is "show error"
Dim name: name = vRay.GetMaterialNameFromVismat("c:\test.vrmat", False)
Rhino.Print "Material Name" & name
End Sub
@krsnadas it`s always good to use the plugin ID as “V-Ray for Matrix” is not the same as “V-Ray For Rhino”, but both have the same plugin ID. You might also test using IsObject to prevent the error, when VRay is not loaded eg:
If Not IsObject(VRay) Then
Rhino.Print "Error"
Exit Sub
End If
btw. as Matt has mentioned in his code, the bool value, i would always recommend to set it to True. If the Error is not shown and a material is not found (eg. when the material path is invalid), the VRay.GetMaterialNameFromVismat
returns an empty string.
c.
Thanks, @matt_newberg and @clement. I am able to call the vRay object now, but really intrigued why this happens:
GetMaterialNameFromVismat(...)
returns this
/WhiteReflective-7a1ea260-ded9-4cec-9216-f070a11d4720
BUT, Rhino.MaterialName(...)
returns this
/WhiteReflective-7a1ea260-ded9-4cec-9216-f070a11d4740 (last two digits are different each time I call!)
which essentially means this is the name stored in the table and as a result returns null when I search for Rhino.MaterialIndex.
Note: I loaded the material using Rhino.Command("-visLoadVismat " + vismat_file_path)
Sorry, I reckon what’s going on. Material being loaded multiple times and I guess that changes the URL each time.
@matt_newberg Also, I tried calling ApplyVRayMaterialToObjects, but I get an error ‘Object does not support this method’. Any idea what’s going wrong?
f = "C:\WhiteReflective.vismat"
Call Rhino.Command("-visLoadVismat " + f)
Dim strObject: strObject = Rhino.GetObject("select")
Dim vRay, mat_name, i, name, mat_index, materials, str_name, thisStr, obj_index
Set vRay = Rhino.GetPluginObject("{E8CFE179-B60C-411A-8416-62A893334519}")
mat_name = vRay.GetMaterialNameFromVismat(f, False)
vRay.GetSceneMaterialNamesScript materials
str_name = "WhiteReflective"
For i = 0 to UBound(materials)
thisStr = materials(i)
If InStr(thisStr, str_name) <> 0 Then
Exit For
End If
Next
vRay.ApplyVRayMaterialToObjects thisStr, 1, strObjects
There is a typo in your method name, it should be ApplyVRayMaterialToObjects
c.
Haha, good catch @clement. I typed it in here instead of pasting. But I’m sure I have it typed right in my script, so the error still stands!
The error you get should also print out a line number where to look for the error. I do not think that above quoted method of your edited code snippet exists. It should be GetSceneMaterialNames
c.
Actually, I’m not sure why two separate functions exist, but both GetSceneMaterialNames
and GetSceneMaterialNamesScript
work just fine with the same result!
And, @matt_newberg approves! A bit more about V-Ray scripting
Where did you find this method name ?
c.
@matt_newberg mentioned this somewhere. There is a help file for VRay scripting called VRayForRhinoExports.h which, for me, is in C:\ProgramData\VRAYMATRIX2\VfMatrix64\
Yes, and in this reference i do not have GetSceneMaterialNamesScript
, that is why i mentioned it.
c.
Version differences maybe? I’m not sure. But I just checked again and it does have it in mine.
Ok. Back to your code snippet above, what is the variable f pointing to ? It seems incomplete to me.
c.
Sorry, okay corrected it above, but again got it right in my script. f is pointing to the path of the material file.
it makes it very hard to answer your questions if you are constantly editing your posts.
c.
GetSceneMaterialNamesScript stores the array of strings slightly differently. I believe I wrote it to get around an issue with PythonScript/Rhinoscript.