Notifications
Clear all

[Closed] SDK and max script – tough question

Hey guys –

Quick background: I’m a unix systems programmer (lots of C and x86 assembly knowledge), but this is my first time working with 3DSMax SDK and max scrippting.

The problem: A max script has been created which assigns a custom attribute to an object in the scene. This is done more or less by doing the following:

on assign pressed do
(
for i in selection do
(
custAttributes.add i classCAs
i.class = classMaster.tv.selectedItem.text
)
)

For reference:
classCAs = attributes classAttributes
(
parameters classParams rollout:classMaster2
(
mass type:#float ui:massSpinner
price type:#float ui:priceSpinner
class type:#string
)
)

Now, I have written a C++ Plugin which exports each object in a file format which another program can use. In the export process, I ask 3d Studio max how many custom attributes an INode has, and it returns 0:

/* error check is ommited to save space… */
ICustAttribContainer *tmp = node->GetCustAttribContainer();
int numAttribs = tmp->GetNumCustAttribs();

Using a debugger, the function GetNumCustAttribs() returns 0, when I was hoping that the above max script code would add in custom attributes, class price and mass.

Is there something obvious I am missing here? I can provide more code if it would be useful for solving the problem – I’ve only provided the lines which seem relevant to save space on this already lenghty post.

Thanks for the help and suggestions.

2 Replies

So as it turns out, I added the custom attribs manually via 3ds max and tested the plugin and it worked.

This means there is a bug in the maxscript code I pasted above.

Anyone know what the problem is? I’m not sure what I’m doing wrong here…

Thanks.

hey hey

check your maxscript again – you need to make the selection an array first. i quickly did a test as i didn’t know how to add custom attibutes to an object either.


   customAttributes = attributes objectData
   (
   	parameters main rollout:paramsRollout
   	(
   		hitPoints type:#float ui:spn_hits default:10
   		cost type:#float ui:spn_cost default:100
   	)
   	
   	rollout paramsRollout "Custom"
   	(
   		spinner spn_hits "Hit Points:" range:[0,100,10] type:#float
   		spinner spn_cost "Cost:" range:[0,100,10] type:#float
   	)
   )
   
   rollout fooRollout "Test" 
   (
   	-- create
   	button btn_AddAttribute "Add attributes to selected" align:#center
   	
   	-- events
   	on btn_AddAttribute pressed do (	   
   		
   		selection = getCurrentSelection()
   		count = selection.count
   		
   		for p = 1 to count do 
   		(
   			-- add custom attributes
   			custAttributes.add selection[p] customAttributes
   		) 
   
   	)
   )
   
   if theWindow != undefined then (
   	CloseRolloutFloater theWindow;
   )
   theWindow = newRolloutFloater "Foobar" 200 300
   addRollout fooRollout theWindow
   

or you may not had the class attibutes defined correctly


   customAttributes = attributes objectData
   (
   	parameters main rollout:paramsRollout
   	(
   		hitPoints type:#float ui:spn_hits default:10
   		cost type:#float ui:spn_cost default:100
   	)
   	
   	rollout paramsRollout "Custom"
   	(
   		spinner spn_hits "Hit Points:" range:[0,100,10] type:#float
   		spinner spn_cost "Cost:" range:[0,100,10] type:#float
   	)
   )