L3DT users' wiki
Large 3D terrain generator

cdPython script examples

Using variable handles

Certain Zeolite operations return variable handles, like a ZVAR. To associate a proxy object with the variable represented by this handle, you can use the Attach method.

The example below creates a Zeolite list that has a single string item, which the user can edit through it's user interface.

import zeolite

args = zeolite.CzList()

handle = args.CreateItem(zeolite.VarID_string, 'name')

# Create a CzStr object and attach it to the handle
mapname_str = zeolite.CzStr()
mapname_str.SetText('Hello World')


print mapname_str.GetText()

Because all Zeolite variables such as ZMAP and ZFORMAT are types of ZVAR, we need to 'cast' these derived type handles appropriately. Attach for example, requires a ZVAR.

cdPython provides the following methods to cast these type handles:

foo = zeolite.zmap_to_zvar(bar)    # converts ZMAP to ZVAR
foo = zeolite.zlist_to_zvar(bar)   # converts ZLIST to ZVAR
foo = zeolite.zformat_to_zvar(bar) # converts ZFORMAT to ZVAR
foo = zeolite.zfunc_to_zvar(bar)   # converts ZFUNC to ZVAR
foo = zeolite.zvar_to_zmap(bar)    # converts ZVAR to ZMAP, potentially unsafe
foo = zeolite.zvar_to_zlist(bar)   # converts ZVAR to ZLIST, potentially unsafe
foo = zeolite.zvar_to_zfunc(bar)   # converts ZVAR to ZFUNC, potentially unsafe
foo = zeolite.zvar_to_zformat(bar) # converts ZVAR to ZFORMAT, potentially unsafe

The example below saves the height field as a gray scale bmp file:

import zeolite

string = zeolite.CzStr()
string.EditUI("Enter filename")

hmap = zeolite.CzMap()
hf = zeolite.cvar.theAPI.project_GetMap("HF")

# Attach requires a ZVAR handle

format = zeolite.CzFormat()
format.GetByExt("HF", 0, "bmp")

filename = string.GetText() + ".bmp"

# SaveFile requires a ZFORMAT handle
hmap.SaveFile(filename, zeolite.zvar_to_zformat(format.GetZVAR()), True, True)

Using the core Zeolite API instance

Sometimes, there may be a method you are unable to access through the Zeolite helper objects (CzStr, CzMap, CzFormat etc etc). In this case you can call a method on the core API instance, which is a member of the Zeolite cvar attribute.

The example below logs an error to the L3DT event log, use the ReportError method:

import zeolite

zeolite.cvar.theAPI.ReportError('Some kind of error...')

Using pointers to atomic C types

Because Python doesn't use pointers, and the Zeolite API requires a pointer to a C type in some cases, notably the CzVar:SetValue method, some additional type wrappers have been included into the Zeolite Python module to handle this.

Here are the wrapper classes:


Here's an example of using the intp class (all of the wrapper classes above have identical methods):

minheight = zeolite.intp()  # create an intp
minheight.assign(50)        # set the value of the int to 50

minheight_var = zeolite.CzVar(args.CreateItem(zeolite.VarID_int, 'min height'))

minheight_var.SetValue(zeolite.VarID_int, minheight.cast())   # minheight.cast() returns a pointer to the integer

integer_value = minheight.value()  # retrieve the value of the integer

Using an extension function

The following example opens the 3D rendering window in the Sapphire plugin by calling an extension function that it exports.

import zeolite
f = zeolite.CzFunc()

The steps were:

  1. create a CzFunc object
  2. Retrieve the handle to the “Sapphire.ShowWnd” extension function.
  3. Execute the function (note: this particular function takes no arguments).
plugins/general/cdpython/examples.txt · Last modified: 2017/08/31 04:59 (external edit)
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki