Occasionally I’ll see reports of this kind of error. Sometimes I see it when I’m investigating some other problem in a scene.
// WARNING : 3000 - Save:  objects were not saved normally
// WARNING : 3000 - -- [Framebuffer<1004>] was saved, but is disconnected from the scene. (Floating object)
You can use Dictionary.GetObject to get the floating object and interrogate it:
var x = Dictionary.GetObject( "Framebuffer<1004>" );
LogMessage( ClassName(x) );
LogMessage( x.Parent );
// INFO : C:\Program Files\Autodesk\Softimage 2012.SAP\Application\bin\XSI.exe
LogMessage( x.Parent3DObject == null );
// INFO : True
LogMessage( x.Owners.Count );
// INFO : 0
LogMessage( x.RenderChannel );
// INFO : Normal
//LogMessage( x.GetResolvedPath(0) );
// ERROR : 21000 - Unspecified failure - [line 15]
And you could even delete the floating object before you save the scene:
DeleteObj( Dictionary.GetObject( "Framebuffer<1004>" ) );
However, there is a scene debugging preference that allows you to “skip the loading of floating objects”. This preference was added back in 2004 or so to deal with “ghost models” (which are basically floating or disconnected objects).
You could also try printver -cleanfloating to remove floating objects. I don’t know if that still works, I haven’t used it three or four years.
Another thing you can try is to merge your scene into a new scene. The warning could be a “false positive”. If the warning is gone after the merge, then it was indeed a false positive (which means that something, such as the schematic view, was still holding on to a reference to a deleted object).
In this case, an ICE While loop wasn’t working as expected.
The customer was using Max Repeat to do something like this, but in ICE:
x = 2
cond = x > 0
i = 0
i = i + 1
if i > 10: break
Unfortunately, in ICE, the While loop was never executed.
It’s not a problem with the While loop, it’s a problem with the ICE tree evaluation (it’s a bit too lazy). I’ve seen things like this before, and I usually create a separate ICE tree to workaround it:
On the mailing list, Guillaume suggested a couple of other workarounds. First, use Delay Set Data.
The word “Delay” in the node name throws me off…I wouldn’t think to use it, but after reading up on it, I can see why you would think to use that node (it does evaluation).
If you set the condition boolean in the While loop, that works too:
Last week there was a Top 5 things to learn about ICE? thread on the mailing list:
If you ICE experts out there had to recommend the top 5 (first) things to learn about ICE what would they be? I’m looking for cornerstone/pedestal type foundation items. I’m going to put some time into really learning ICE and I’d like to know what the most valuable concepts are.
There were several good responses, so I’ve combined them all and added a few more to make it a “top 10” (rather than a top 7). Also, I added some links to relevant videos (mostly my own). I’d also recommend you watch Paul Smith’s tutorials, starting with 1. What does ICE do?.
Also, see these video tutorials:
SHED Shading scene
by SHED Montreal
Image IO from ICE
by Autodesk Japan
Google translation: I think comfort and intricate work of ICE’s 4K node monitor. The price is 228 million yen…
ICE sprites with color multi switch render tree node
Over on Vimeo, commenter LBX (check out his multiple texture map vids) suggested an alternative approach to placing objects on the polygons of a sphere. (See my ICE modeling posts here and here.)
Here’s the ICE tree (which is on a point cloud of course 😉 The use of PolygonNormals and the sphere radius is neat.
To deal with more general geometry, I think you’d need to do something like this:
Three years ago, 15 Dec 2008 was my first day in the Autodesk offices. Officially, I’d been an Autodesk employee since sometime in November, but 15 Dec was the first day I reported to work at Autodesk.
I’m cool working at Autodesk and I still enjoy what I do, but I kinda miss our old offices, in the old Reitmans factory building on St Laurent boulevard. After the acquisition, the Max/Maya support guys came up to visit and do lunch, and their jaws literally dropped when they saw the offices where me, Manny, and the other support guys sat.
On the other hand, the Autodesk offices are perfectly located for a cyclist like me. To get to Softimage I had to actually bike into the city, whereas the Autodesk is down at the Old Port, practically right at the end of the bike path along the Lachine canal.
Here’s some pics of the old Softimage headquarters:
I’ve pulled out the panorama of Erik’s office so you can get a better look at it. Erik was a “cool dude” on the Softimage support team, and his office was the most fun. He had one Hot Wheels toy car pinned to wall for each month he worked at Softimage.
In this video, I show how to rotate copies created with Create Copies from Polygon Mesh so that the copies are aligned with the PolygonRefFrame.
Mentions: PolygonRefFrame, context, Rotate Vector, transformation matrix
Part 1 of 2. A video walkthrough of how to use ICE modeling to create copies of an object and place them at specific positions on another object (in this case, on the polygon centers).
Uses: Create Copies from Polygon Mesh, Transform per Copy, Get Copy Index, Build Array from Set, NbPolygons, PolygonPositions
The online help docs use framesets, which can make it tricky to get the right URL when you want to save or send a link to a certain page. Often you end up with a link to index.html, which is just the page that holds the HTML frameset.
Here’s a few different ways to get a link to a page:
- Click the Show in Contents icon (top-right) then right-click entry in TOC and click Copy Link Location .
- Click the Up icon (top-right). This usually takes you to a page with a list of links to the topics in this section. Right-click the link and click Copy Link Location.
- Click the Previous page icon (<), then right-click Next (>) and click Copy Link Location.
- Right-click the page, click This Frame > Page Info, and copy the Address URL
The SDK docs don’t have the navigation buttons, so in general you have to get the link from This Frame > Page Info.
For something like an Object Model method or property, you can get the link from the object reference page (because it has a table of links to all methods and properties).
Here’s an addon that uses the ICE Volume attribute to filter object selections. The Volume attribute is always defined (so you don’t need to Show Values or anything for this filter to work).
Note that you have to freeze scaling to get the right volume for an object.
For simplicity, I’m using a custom property (on the scene root) to hold the preferences for the filter.
The filter itself is simple. It just gets the Volume attribute value and compares it to the range of values specified in the PPG.
# Match callback for the psCustomFilters custom filter.
def ObjbyVolume_Match( in_ctxt ):
in_object = in_ctxt.GetAttribute( "Input" );
obj = Get3DObject( in_object );
if ( Application.ClassName(obj) != "X3DObject" ):
v = obj.ActivePrimitive.ICEAttributes("Volume").DataArray
filterProp = GetFilterProp( )
if filterProp.Filter_by_range.Value == True:
bMatch = filterProp.Volume_Min.Value <= v <= filterProp.Volume_Max.Value
else: # Filter by value with an epsilon
min = filterProp.Value.Value - filterProp.Epsilon.Value
max = filterProp.Value.Value + filterProp.Epsilon.Value
bMatch = min <= v <= max