maptek.vulcan.layer
The following functions can be used to edit Vulcan layers and manipulate properties.
To download all the example scripts on this page, click Python Layer Example Scripts.
Here is a basic framework for creating a layer. Use this template to create layers with a Python script. In this example, a design database is opened in write mode, a simple point is created, then the layer is saved.
# Filename: layer_framework.py
# Purpose: Show basic steps for creating a layer.
# Returns: Create a new layer in selected dgd.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
# 1. open the database in write mode
with vulcan.dgd(dgd_file, "w") as dgd:
# 2. make a blank layer with nothing in it
layer = vulcan.layer('NEW_POINT')
# 3. create an object to put into the new layer
new_pt = vulcan.polyline([[76500.0, 4500.0, 0.0]])
# 4. put new object into the layer
layer.append(new_pt)
# 5. save layer
dgd.save_layer(layer)
append(layer self, obj object)
Appends an object to the layer.
# Filename: layer_append.py
# Purpose: Append a new object to a layer.
# Returns: None. A new line has been added to the layer.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "LINE" # layer to use
# CREATE THE NEW OBJECT
# create two new points (x,y,z,w,t,name)
pt1 = vulcan.point(75912.0, 3797.0, 0.0, 0.0, 0, "")
pt2 = vulcan.point(76760.0, 4340.0, 0.0, 0.0, 1, "")
# create a new polyline using points
new_object = vulcan.polyline([pt1, pt2])
new_object.name = "Line"
new_object.colour = 50
# OPEN LAYER AND APPEND NEW OBJECT
with vulcan.dgd(dgd_file, "w") as dgd: # open up the database in write mode
if dgd.is_layer(layer_name): # if layer exists, open it
layer = dgd.get_layer(layer_name)
else: # if layer does not exist, create it
layer = vulcan.layer(layer_name)
layer.append(new_object) # append the new object
dgd.save_layer(layer) # save layer
clear_objects(layer self)
Deletes all objects from the layer.
# Filename: layer_clear_objects.py
# Purpose: Deletes all objects in a layer.
# Returns: None. Layer is empty.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "LINES" # layer to clear
with vulcan.dgd(dgd_file, "w") as dgd: # open up the database in write mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
layer.clear_objects() # clear all objects from layer
dgd.save_layer(layer) # save the layer
delete_object(layer self, int index) → bool
Deletes an object by index from the layer.
# Filename: layer_delete_object.py
# Purpose: Delete an object from a layer using its index.
# Returns: Bool.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "POINTS" # name of layer
with vulcan.dgd(dgd_file, "w") as dgd: # open up the database in write mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
index = layer.num_objects()-1 # get the highest indexed object
assert index > 0, 'Error: No objects in layer.'
layer.delete_object(index) # remove the object
dgd.save_layer(layer) # save the layer
find_object(layer self, std::string name) → VulcanObj
Finds an object by name.
# Filename: layer_find_object.py
# Purpose: Find object in layer by name.
# Returns: Object from layer.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database we want to access
layer_name = "POINTS" # name of layer
name_of_object = "POLYLINE" # name of object
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
assert layer.find_object(name_of_object), 'Error: Object does not exist.'
obj = layer.find_object(name_of_object) # find the object
# do something with object...
print(obj)
get_name(layer self) → std::string
Gets the layer name.
# Filename: layer_get_name.py
# Purpose: Get the name of a layer.
# Returns: Name of layer as string.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
layer_list = dgd.list_layers() # list layers in database
list_item = dgd.get_layer(layer_list[0]) # get layer object from database
layer_name = list_item.get_name() # get the name of the layer
# do something with layer name...
print(f"layer name: {layer_name}")
Note:
Calling the properties instead of using the get_name() function can be an alternative method for achieving the same thing. See the script example below.
# Filename: layer_name_property.py
# Purpose: Get the name of a layer by calling properties.
# Returns: Name of layer as string.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
layer_list = dgd.list_layers() # list layers in database
list_item = dgd.get_layer(layer_list[0]) # get layer object from database
layer_name = list_item.name
# do something with layer name...
print(f"layer name: {layer_name}")
get_description(layer self) → std::string
Gets the layer description.
# Filename: layer_get_description.py
# Purpose: Get the description of a layer.
# Returns: Description of layer as string.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
layer_list = dgd.list_layers() # list layers in database
list_item = dgd.get_layer(layer_list[0]) # get layer object from database
layer_description = list_item.get_description() # get the layer description
# do something with description string...
print(f"layer description = {layer_description}")
Note:
Calling the properties instead of using the get_description() function can be an alternative method for achieving the same thing. See the script example below.
# Filename: layer_description_property.py
# Purpose: Get the description of a layer by calling properties.
# Returns: Description of layer as string.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
layer_list = dgd.list_layers() # list layers in database
list_item = dgd.get_layer(layer_list[0]) # get layer object from database
layer_descr = list_item.description # get the layer description
# do something with description string...
print(f"layer description: {layer_descr}")
get_object(layer self, int index) → VulcanObj
Gets an object from a layer by index.
# Filename: layer_get_object.py
# Purpose: Gets an object from a layer by index.
# Returns: Object from layer.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "POINTS" # name of layer
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
assert layer.get_object(index = 1), 'Error: Object does not exist.'
obj = layer.get_object(index = 1) # find the object
# do something with object...
print(obj)
get_objects(types: list)
Gets the objects of a layer by type. This is not suitable for putting objects back into layers with enumerate() since the objects are filtered and indices are unknown. To have indices for modifying objects, use get_objects_enumerate().
| List of Object Types | ||
|---|---|---|
| polyline | arrow | dim_arc |
| text | dim_radius | dim_line |
| text3d | dim_angle | |
# Filename: layer_get_objects.py
# Purpose: Gets all objects from a layer by type.
# Returns: Objects from layer of requested type.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "OBJECTS" # name of layer
types = [vulcan.polyline,
vulcan.text,
vulcan.text3d,
vulcan.arrow,
vulcan.dim_angle,
vulcan.dim_arc,
vulcan.dim_line,
vulcan.dim_radius]
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
for obj in layer.get_objects(types): # get objects by type
# do something with objects...
print(type(obj))
Note: Both get_objects() and get_objects_enumerate() (shown immediately below) are helpful when you want to isolate all the objects of certain types and do something with them, eliminating the need to write out functions for each type separately.
get_objects_enumerate(types: list)
Gets objects by type from a layer along with layer indices.
# Filename: layer_get_objects_enumerate.py
# Purpose: Gets objects by type from a layer along with layer indices.
# Returns: List of objects of requested type from layer with layer indices.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "OBJECTS" # name of layer
types = [vulcan.polyline,
vulcan.text,
vulcan.text3d,
vulcan.arrow,
vulcan.dim_angle,
vulcan.dim_arc,
vulcan.dim_line,
vulcan.dim_radius]
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
for index, obj in layer.get_objects_enumerate(types): # get objects by type
# do something with objects...
print(index, type(obj))
num_objects(layer self) → int
Returns the number of objects in the layer.
# Filename: layers_num_objects.py
# Purpose: Find number of objects in a layer.
# Returns: The number of objects in the layer as int.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "BOUNDARY" # desired layer
with vulcan.dgd(dgd_file, "r") as dgd: # open up the database in read mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
n_obj = layer.num_objects() # get the number of objects
# do something with number of objects...
print(f"{layer_name} layer has {n_obj} objects")
set_name(layer self, std::string const & name)
Sets the layer name.
# Filename: layer_set_name.py
# Purpose: Sets the name of a layer.
# Returns: None. Layer name is set.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "NEW_POINT" # current name of layer
new_layer_name = "COLLAR_LOC" # new layer name
with vulcan.dgd(dgd_file, "w") as dgd: # open up the database in write mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name)
current_layer_name = layer.get_name() # get the old name of the layer
layer.set_name(new_layer_name) # set the new name of the layer
dgd.delete_layer(layer_name) # removes reference to old layer from dgd
dgd.save_layer(layer) # save the layer
Note:
Calling the properties instead of using the set_name() function can be an alternative method for achieving the same thing. See the script example below.
# Filename: layer_set_name_property.py
# Purpose: Sets the name of a layer using properties.
# Returns: None. Layer name is set.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "NEW_POINT" # current name of layer
new_layer_name = "COLLAR_LOC" # new layer name
with vulcan.dgd(dgd_file, "w") as dgd: # open up the database in write mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name)
current_layer_name = layer.get_name() # get the old name of the layer
layer.name = new_layer_name # set layer name using properties
dgd.delete_layer(layer_name) # removes reference to old layer from dgd
dgd.save_layer(layer) # save the layer
set_description(layer self, std::string const & description)
Sets the layer description.
# Filename: layer_set_description.py
# Purpose: Sets the description of a layer.
# Returns: None. Layer description is set.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "NEW_POINT" # name of layer
new_layer_desc = "Collar: DH1203" # new layer description
with vulcan.dgd(dgd_file, "w") as dgd: # open up the database in write mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
layer.set_description(new_layer_desc) # sets layer description
dgd.save_layer(layer) # save the layer
Note:
Calling the properties instead of using the set_description() function can be an alternative method for achieving the same thing. See the script example below.
# Filename: layer_set_description.py
# Purpose: Sets the description of a layer using properties.
# Returns: None. Layer description is set.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "NEW_POINT" # name of layer
new_layer_desc = "Collar: DH1203" # new layer description
with vulcan.dgd(dgd_file, "w") as dgd: # open up the database in write mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
layer.set_description = new_layer_desc # sets layer description
dgd.save_layer(layer) # save the layer
set_object(layer self, int index, obj object) → bool
Sets an object by index.
# Filename: layer_set_object.py
# Purpose: Sets an object from a layer by index.
# Returns: Bool.
from maptek import vulcan
dgd_file = "pydemo.dgd.isis" # design database to access
layer_name = "OBJECTS" # layer to use
with vulcan.dgd(dgd_file, "w") as dgd: # open up the database in write mode
assert dgd.is_layer(layer_name), 'Error: Layer does not exist.'
layer = dgd.get_layer(layer_name) # get layer
new_obj = vulcan.polyline([vulcan.point(75250.0, 6250.0, 0.0, 0.0, 0, ""),\
vulcan.point(76500.0, 6500.0, 0.0, 0.0, 1, "")])
new_obj.name = "Line"
new_obj.colour = 50
return_value = layer.set_object(0, new_obj) # set object at index 0
dgd.save_layer(layer) # save layer
