New Features

Features New to v7.x

- Name Change for StaticKinematicState Property

Features New to v7.5

- Undo/Redo for C++ Custom Commands

- New Geometry Type to Support ICE (Object Model only)

- More Functions in the CString class (C++ API only)

- Improved Support for Cross-Platform Plug-in Deployment

- New Optimization Preference for Loading Plug-ins

 

Features New to v7.x

Name Change for StaticKinematicState Property

Prior to v7.0, the StaticKinematicState property could only be created by transforming clusters or applying envelopes. Now it is possible to add this property directly to a scene object using the AddProperty method, and multiple StaticKinematicState properties are also supported. As a consequence, the UI string has been renamed to support multiple instances, so if you have scripts that access StaticKinematicState properties using a string search, make sure you use an underscore (_) instead of space:

NewScene(null , false);
var g = CreatePrim("Grid", "MeshSurface");

// Add multiple static kinematic state properties under the grid
g.AddProperty("Static Kinematic State Property");
g.AddProperty("Static Kinematic State Property");
g.AddProperty("Static Kinematic State Property");

// Leaving the space in fails
var statickine1 = g.Properties("Static KineState");
Application.LogMessage(statickine1==null);
// INFO : True

// Use the underscore now
var statickine2 = g.Properties("Static_KineState");
Application.LogMessage(statickine2==null);
// INFO : False

If you only need to get the first StaticKinematicState under the X3DObject, you can use the GetStaticKinematicState method:

NewScene , false
set g = CreatePrim("Grid", "MeshSurface")

' Add multiple static kinematic state properties under the grid
g.AddProperty "Static Kinematic State Property"
g.AddProperty "Static Kinematic State Property"
g.AddProperty "Static Kinematic State Property"

' Try using the special access method (X3DObject.GetStaticKinematicState)
if Application.Selection(0).HasStaticKinematicState() then
   set firststatickine = Application.Selection(0).GetStaticKinematicState()
   Application.LogMessage TypeName(firststatickine)
else
   Application.LogMessage Application.Selection(0).Name & " has no StaticKineState."
end if
' INFO : StaticKinematicState

This is the same as using the Find method on the list of properties.

 

If you need to find the whole list, or a specific one amongst the multiple properties, use the Filter method on the list of properties:

from win32com.client import constants as c
app = Application
app.NewScene("", 0)
g = app.CreatePrim("Grid", "MeshSurface")

# Add multiple static kinematic state properties under the grid
g.AddProperty("Static Kinematic State Property")
g.AddProperty("Static Kinematic State Property")
g.AddProperty("Static Kinematic State Property")

# Get the whole list of static kinematic state properties under the grid
statickinelist = g.Properties.Filter("", "", "Static_KineState*")
for obj in statickinelist :
   app.LogMessage("\t" + obj.Name)

# INFO :  Static_KineState
# INFO :  Static_KineState1
# INFO :  Static_KineState2

Clusters have the Cluster.GetStaticKinematicStates method that accesses all StaticKinematicState properties:

NewScene , false
CreatePrim "Grid", "MeshSurface"

' Set up an edge cluster on a grid and scale and translate it to get
' multiple static kinematic state properties under the cluster
SetSelFilter "Edge"
SelectGeometryComponents "grid.edge[68-71,73,85-88,90,102-105,107,119,121]"
CreateCluster
Scale , 1, 1, 0.667264257872718, siRelative, siLocal, siObj, siXYZ, , , , , , , , 1
Translate , -0.601187576781734, -1.9317551308573E-09, -7.55514041218275E-03, siRelative, siView, siObj, siXYZ, , , , , , , , , , 1
Translate , 0, 0, 1.40784302163268, siRelative, siView, siObj, siXYZ, , , , , , , , , , 1

' Use the special access method on the Cluster object
if Application.Selection(0).HasStaticKinematicState() then
   set statickinelist = Application.Selection(0).GetStaticKinematicStates()
   Application.LogMessage TypeName(statickinelist)
   for each obj in statickinelist
       Application.LogMessage vbTab & obj.Name
   next
else
   Application.LogMessage Application.Selection(0).Name & " has no StaticKineState."
end if
' INFO : StaticKinematicStateCollection
' INFO :  Static_KineState
' INFO :  Static_KineState1
' INFO :  Static_KineState2
' INFO :  Static_KineState3

Features New to v7.5

Undo/Redo for C++ Custom Commands

Custom commands implemented with the C++ API now support undoing and redoing. When you need to undo/redo actions performed by a C++ API custom command on non-scene data, you can implement it in the Undo, and Redo callbacks. For more information, see Undoing and Redoing Custom Commands.

New Geometry Type to Support ICE (Object Model only)

You can now create special point cloud geometries based on one of the standard geometry primitive presets (eg., Cone, Cube, Cylinder, etc.) using either the CreatePrim command or the X3DObject.AddGeometry method, which both return the new point cloud as an X3DObject. You can then access the new PointCloudGeometry object by calling the point cloud’s Primitive.Geometry property:

app = Application
pc = app.ActiveSceneRoot.AddGeometry("Torus", "PointCloud")
app.LogMessage( app.ClassName(pc) )
app.LogMessage( app.ClassName(pc.ActivePrimitive.Geometry) )

# INFO : X3DObject
# INFO : PointCloudGeometry

More Functions in the CString class (C++ API only)

The CString class was originally implemented with pretty bare bones functionality, so to improve usability some more convenience methods have been added for v7.5 so that you can do common string operations without resorting to using the wcs* standard string API calls. In particular, there is now support for: case-sensitive string comparison, substring searching, and string searching in general. In addition, CString now converts between wide character, or 16-bit representation (including UNICODE) and ASCII, or 8-bit representation.

See C++ API Changes for a list of changes to the C++ API.

Improved Support for Cross-Platform Plug-in Deployment

Prior to v7.5, you had to append 32 or 64 to the plug-in library name (eg., MyPlugin.32.dll) in order to tell Softimage whether the library can be loaded on a particular platform. This approach used the irregular approach of using different basenames for libraries on different platforms as a deployment requirement. In addition, auxilliary libraries required by plug-ins would clash if stored in the same folder as the plug-in library. This functionality is still supported for backwards compatibility, but a more sensible approach is now available.

From v7.5 you should use exactly the same basename for your library file but use one of the following platform-specific subfolders in which to deploy it under the Application\Plugins\bin folder:

OS/Environment

Subfolder

Windows

32-bit

nt-x86

64-bit

nt-x86-64

Linux

32-bit

linux-x86

64-bit

linux-x64

For example, to deploy a plug-in on all four target platforms, you would use the following structure:

\Application
   \Plugins
       \bin
          \nt-x86\MyPlugin.dll
          \nt-x86-64\MyPlugin.dll
          \linux-x86\MyPlugin.so
          \linux-x64\MyPlugin.so

 

New Optimization Preference for Loading Plug-ins

A new preference has been added to optimize the process of loading plug-ins in Softimage. By default, the Scan sub-folders ("plugin_manager.scan_plugin_subfolders") preference is set to on, but you can turn it off to avoid scanning library files in the sub-folders of the Application\Plugins and Addons\...\Application\Plugins locations, which can be costly when you have a large installation with many helper library files (that is, .dll or .so files that do not implement self-installing plug-ins).

 

The one exception to this rule are the platform-specific locations (eg., Application\Plugins\bin\nt-x86), which are always scanned regardless of this setting.

For more information, see Plug-in Loading.

 

 



Autodesk Softimage v7.5