BMesh Operators (bmesh.ops)¶
This module gives access to low level bmesh operations.
Most operators take input and return output, they can be chained together to perform useful operations.
Note
This API us new in 2.65 and not yet well tested.
Operator Example¶
This script shows how operators can be used to model a link of a chain.
# This script uses bmesh operators to make 2 links of a chain.
import bpy
import bmesh
import math
import mathutils
# Make a new BMesh
bm = bmesh.new()
# Add a circle XXX, should return all geometry created, not just verts.
bmesh.ops.create_circle(
bm,
cap_ends=False,
radius=0.2,
segments=8)
# Spin and deal with geometry on side 'a'
edges_start_a = bm.edges[:]
geom_start_a = bm.verts[:] + edges_start_a
ret = bmesh.ops.spin(
bm,
geom=geom_start_a,
angle=math.radians(180.0),
steps=8,
axis=(1.0, 0.0, 0.0),
cent=(0.0, 1.0, 0.0))
edges_end_a = [ele for ele in ret["geom_last"]
if isinstance(ele, bmesh.types.BMEdge)]
del ret
# Extrude and create geometry on side 'b'
ret = bmesh.ops.extrude_edge_only(
bm,
edges=edges_start_a)
geom_extrude_mid = ret["geom"]
del ret
# Collect the edges to spin XXX, 'extrude_edge_only' could return this.
verts_extrude_b = [ele for ele in geom_extrude_mid
if isinstance(ele, bmesh.types.BMVert)]
edges_extrude_b = [ele for ele in geom_extrude_mid
if isinstance(ele, bmesh.types.BMEdge) and ele.is_boundary]
bmesh.ops.translate(
bm,
verts=verts_extrude_b,
vec=(0.0, 0.0, 1.0))
# Create the circle on side 'b'
ret = bmesh.ops.spin(
bm,
geom=verts_extrude_b + edges_extrude_b,
angle=-math.radians(180.0),
steps=8,
axis=(1.0, 0.0, 0.0),
cent=(0.0, 1.0, 1.0))
edges_end_b = [ele for ele in ret["geom_last"]
if isinstance(ele, bmesh.types.BMEdge)]
del ret
# Bridge the resulting edge loops of both spins 'a & b'
bmesh.ops.bridge_loops(
bm,
edges=edges_end_a + edges_end_b)
# Now we have made a links of the chain, make a copy and rotate it
# (so this looks something like a chain)
ret = bmesh.ops.duplicate(
bm,
geom=bm.verts[:] + bm.edges[:] + bm.faces[:])
geom_dupe = ret["geom"]
verts_dupe = [ele for ele in geom_dupe if isinstance(ele, bmesh.types.BMVert)]
del ret
# position the new link
bmesh.ops.translate(
bm,
verts=verts_dupe,
vec=(0.0, 0.0, 2.0))
bmesh.ops.rotate(
bm,
verts=verts_dupe,
cent=(0.0, 1.0, 0.0),
matrix=mathutils.Matrix.Rotation(math.radians(90.0), 3, 'Z'))
# Done with creating the mesh, simply link it into the scene so we can see it
# Finish up, write the bmesh into a new mesh
me = bpy.data.meshes.new("Mesh")
bm.to_mesh(me)
bm.free()
# Add the mesh to the scene
obj = bpy.data.objects.new("Object", me)
bpy.context.collection.objects.link(obj)
# Select and make active
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
-
bmesh.ops.
smooth_vert
(bm, verts, factor, mirror_clip_x, mirror_clip_y, mirror_clip_z, clip_dist, use_axis_x, use_axis_y, use_axis_z)¶ Vertex Smooth.
Smooths vertices by using a basic vertex averaging scheme.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input vertices - factor (float) – smoothing factor
- mirror_clip_x (bool) – set vertices close to the x axis before the operation to 0
- mirror_clip_y (bool) – set vertices close to the y axis before the operation to 0
- mirror_clip_z (bool) – set vertices close to the z axis before the operation to 0
- clip_dist (float) – clipping threshold for the above three slots
- use_axis_x (bool) – smooth vertices along X axis
- use_axis_y (bool) – smooth vertices along Y axis
- use_axis_z (bool) – smooth vertices along Z axis
- bm (
-
bmesh.ops.
smooth_laplacian_vert
(bm, verts, lambda_factor, lambda_border, use_x, use_y, use_z, preserve_volume)¶ Vertex Smooth Laplacian.
Smooths vertices by using Laplacian smoothing propose by. Desbrun, et al. Implicit Fairing of Irregular Meshes using Diffusion and Curvature Flow.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input vertices - lambda_factor (float) – lambda param
- lambda_border (float) – lambda param in border
- use_x (bool) – Smooth object along X axis
- use_y (bool) – Smooth object along Y axis
- use_z (bool) – Smooth object along Z axis
- preserve_volume (bool) – Apply volume preservation after smooth
- bm (
-
bmesh.ops.
recalc_face_normals
(bm, faces)¶ Right-Hand Faces.
Computes an “outside” normal for the specified input faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – Undocumented.
- bm (
-
bmesh.ops.
planar_faces
(bm, faces, iterations, factor)¶ Planar Faces.
Iteratively flatten faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input geometry. - iterations (int) – Number of times to flatten faces (for when connected faces are used)
- factor (float) – Influence for making planar each iteration
Returns: geom
: output slot, computed boundary geometry.type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
region_extend
(bm, geom, use_contract, use_faces, use_face_step)¶ Region Extend.
used to implement the select more/less tools. this puts some geometry surrounding regions of geometry in geom into geom.out.
if use_faces is 0 then geom.out spits out verts and edges, otherwise it spits out faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – input geometry - use_contract (bool) – find boundary inside the regions, not outside.
- use_faces (bool) – extend from faces instead of edges
- use_face_step (bool) – step over connected faces
Returns: geom
: output slot, computed boundary geometry.type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
rotate_edges
(bm, edges, use_ccw)¶ Edge Rotate.
Rotates edges topologically. Also known as “spin edge” to some people. Simple example:
[/] becomes [|] then [\]
.Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - use_ccw (bool) – rotate edge counter-clockwise if true, otherwise clockwise
Returns: edges
: newly spun edgestype list of (
bmesh.types.BMEdge
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
reverse_faces
(bm, faces, flip_multires)¶ Reverse Faces.
Reverses the winding (vertex order) of faces. This has the effect of flipping the normal.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - flip_multires (bool) – maintain multi-res offset
- bm (
-
bmesh.ops.
bisect_edges
(bm, edges, cuts, edge_percents)¶ Edge Bisect.
Splits input edges (but doesn’t do anything else). This creates a 2-valence vert.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - cuts (int) – number of cuts
- edge_percents (dict mapping vert/edge/face types to float) – Undocumented.
Returns: geom_split
: newly created vertices and edgestype list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
mirror
(bm, geom, matrix, merge_dist, axis, mirror_u, mirror_v)¶ Mirror.
Mirrors geometry along an axis. The resulting geometry is welded on using merge_dist. Pairs of original/mirrored vertices are welded using the merge_dist parameter (which defines the minimum distance for welding to happen).
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – input geometry - matrix (
mathutils.Matrix
) – matrix defining the mirror transformation - merge_dist (float) – maximum distance for merging. does no merging if 0.
- axis (enum in ['X', 'Y', 'Z'], default 'X') – the axis to use.
- mirror_u (bool) – mirror UVs across the u axis
- mirror_v (bool) – mirror UVs across the v axis
Returns: geom
: output geometry, mirroredtype list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
find_doubles
(bm, verts, keep_verts, dist)¶ Find Doubles.
Takes input verts and find vertices they should weld to. Outputs a mapping slot suitable for use with the weld verts bmop.
If keep_verts is used, vertices outside that set can only be merged with vertices in that set.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input vertices - keep_verts (list of (
bmesh.types.BMVert
)) – list of verts to keep - dist (float) – maximum distance
Returns: targetmap
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
Return type: dict with string keys
- bm (
-
bmesh.ops.
remove_doubles
(bm, verts, dist)¶ Remove Doubles.
Finds groups of vertices closer then dist and merges them together, using the weld verts bmop.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input verts - dist (float) – minimum distance
- bm (
-
bmesh.ops.
collapse
(bm, edges, uvs)¶ Collapse Connected.
Collapses connected vertices
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - uvs (bool) – also collapse UVs and such
- bm (
-
bmesh.ops.
pointmerge_facedata
(bm, verts, vert_snap)¶ Face-Data Point Merge.
Merge uv/vcols at a specific vertex.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input vertices - vert_snap (
bmesh.types.BMVert
) – snap vertex
- bm (
-
bmesh.ops.
average_vert_facedata
(bm, verts)¶ Average Vertices Facevert Data.
Merge uv/vcols associated with the input vertices at the bounding box center. (I know, it’s not averaging but the vert_snap_to_bb_center is just too long).
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input vertices
- bm (
-
bmesh.ops.
pointmerge
(bm, verts, merge_co)¶ Point Merge.
Merge verts together at a point.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input vertices (all verts will be merged into the first). - merge_co (
mathutils.Vector
or any sequence of 3 floats) – Position to merge at.
- bm (
-
bmesh.ops.
collapse_uvs
(bm, edges)¶ Collapse Connected UV’s.
Collapses connected UV vertices.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges
- bm (
-
bmesh.ops.
weld_verts
(bm, targetmap)¶ Weld Verts.
Welds verts together (kind-of like remove doubles, merge, etc, all of which use or will use this bmop). You pass in mappings from vertices to the vertices they weld with.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - targetmap (dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
) – Undocumented.
- bm (
-
bmesh.ops.
create_vert
(bm, co)¶ Make Vertex.
Creates a single vertex; this bmop was necessary for click-create-vertex.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - co (
mathutils.Vector
or any sequence of 3 floats) – the coordinate of the new vert
Returns: vert
: the new verttype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
join_triangles
(bm, faces, cmp_seam, cmp_sharp, cmp_uvs, cmp_vcols, cmp_materials, angle_face_threshold, angle_shape_threshold)¶ Join Triangles.
Tries to intelligently join triangles according to angle threshold and delimiters.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input geometry. - cmp_seam (bool) – Undocumented.
- cmp_sharp (bool) – Undocumented.
- cmp_uvs (bool) – Undocumented.
- cmp_vcols (bool) – Undocumented.
- cmp_materials (bool) – Undocumented.
- angle_face_threshold (float) – Undocumented.
- angle_shape_threshold (float) – Undocumented.
Returns: faces
: joined facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
contextual_create
(bm, geom, mat_nr, use_smooth)¶ Contextual Create.
This is basically F-key, it creates new faces from vertices, makes stuff from edge nets, makes wire edges, etc. It also dissolves faces.
Three verts become a triangle, four become a quad. Two become a wire edge.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – input geometry. - mat_nr (int) – material to use
- use_smooth (bool) – smooth to use
Returns: faces
: newly-made face(s)type list of (
bmesh.types.BMFace
)edges
: newly-made edge(s)type list of (
bmesh.types.BMEdge
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
bridge_loops
(bm, edges, use_pairs, use_cyclic, use_merge, merge_factor, twist_offset)¶ Bridge edge loops with faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - use_pairs (bool) – Undocumented.
- use_cyclic (bool) – Undocumented.
- use_merge (bool) – Undocumented.
- merge_factor (float) – Undocumented.
- twist_offset (int) – Undocumented.
Returns: faces
: new facestype list of (
bmesh.types.BMFace
)edges
: new edgestype list of (
bmesh.types.BMEdge
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
grid_fill
(bm, edges, mat_nr, use_smooth, use_interp_simple)¶ Grid Fill.
Create faces defined by 2 disconnected edge loops (which share edges).
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - mat_nr (int) – material to use
- use_smooth (bool) – smooth state to use
- use_interp_simple (bool) – use simple interpolation
Returns: faces
: new facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
holes_fill
(bm, edges, sides)¶ Fill Holes.
Fill boundary edges with faces, copying surrounding customdata.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - sides (int) – number of face sides to fill
Returns: faces
: new facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
face_attribute_fill
(bm, faces, use_normals, use_data)¶ Face Attribute Fill.
Fill in faces with data from adjacent faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - use_normals (bool) – copy face winding
- use_data (bool) – copy face data
Returns: faces_fail
: faces that could not be handledtype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
edgeloop_fill
(bm, edges, mat_nr, use_smooth)¶ Edge Loop Fill.
Create faces defined by one or more non overlapping edge loops.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - mat_nr (int) – material to use
- use_smooth (bool) – smooth state to use
Returns: faces
: new facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
edgenet_fill
(bm, edges, mat_nr, use_smooth, sides)¶ Edge Net Fill.
Create faces defined by enclosed edges.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - mat_nr (int) – material to use
- use_smooth (bool) – smooth state to use
- sides (int) – number of sides
Returns: faces
: new facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
edgenet_prepare
(bm, edges)¶ Edgenet Prepare.
Identifies several useful edge loop cases and modifies them so they’ll become a face when edgenet_fill is called. The cases covered are:
- One single loop; an edge is added to connect the ends
- Two loops; two edges are added to connect the endpoints (based on the shortest distance between each endpont).
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges
Returns: edges
: new edgestype list of (
bmesh.types.BMEdge
)
Return type: dict with string keys
-
bmesh.ops.
rotate
(bm, cent, matrix, verts, space)¶ Rotate.
Rotate vertices around a center, using a 3x3 rotation matrix.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - cent (
mathutils.Vector
or any sequence of 3 floats) – center of rotation - matrix (
mathutils.Matrix
) – matrix defining rotation - verts (list of (
bmesh.types.BMVert
)) – input vertices - space (
mathutils.Matrix
) – matrix to define the space (typically object matrix)
- bm (
-
bmesh.ops.
translate
(bm, vec, space, verts)¶ Translate.
Translate vertices by an offset.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - vec (
mathutils.Vector
or any sequence of 3 floats) – translation offset - space (
mathutils.Matrix
) – matrix to define the space (typically object matrix) - verts (list of (
bmesh.types.BMVert
)) – input vertices
- bm (
-
bmesh.ops.
scale
(bm, vec, space, verts)¶ Scale.
Scales vertices by an offset.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - vec (
mathutils.Vector
or any sequence of 3 floats) – scale factor - space (
mathutils.Matrix
) – matrix to define the space (typically object matrix) - verts (list of (
bmesh.types.BMVert
)) – input vertices
- bm (
-
bmesh.ops.
transform
(bm, matrix, space, verts)¶ Transform.
Transforms a set of vertices by a matrix. Multiplies the vertex coordinates with the matrix.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - matrix (
mathutils.Matrix
) – transform matrix - space (
mathutils.Matrix
) – matrix to define the space (typically object matrix) - verts (list of (
bmesh.types.BMVert
)) – input vertices
- bm (
-
bmesh.ops.
object_load_bmesh
(bm, scene, object)¶ Object Load BMesh.
Loads a bmesh into an object/mesh. This is a “private” bmop.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - scene (
bpy.types.Scene
) – Undocumented. - object (
bpy.types.Object
) – Undocumented.
- bm (
-
bmesh.ops.
bmesh_to_mesh
(bm, mesh, object)¶ BMesh to Mesh.
Converts a bmesh to a Mesh. This is reserved for exiting editmode.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - mesh (
bpy.types.Mesh
) – Undocumented. - object (
bpy.types.Object
) – Undocumented.
- bm (
-
bmesh.ops.
mesh_to_bmesh
(bm, mesh, object, use_shapekey)¶ Mesh to BMesh.
Load the contents of a mesh into the bmesh. this bmop is private, it’s reserved exclusively for entering editmode.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - mesh (
bpy.types.Mesh
) – Undocumented. - object (
bpy.types.Object
) – Undocumented. - use_shapekey (bool) – load active shapekey coordinates into verts
- bm (
-
bmesh.ops.
extrude_discrete_faces
(bm, faces, use_normal_flip, use_select_history)¶ Individual Face Extrude.
Extrudes faces individually.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - use_normal_flip (bool) – Create faces with reversed direction.
- use_select_history (bool) – pass to duplicate
Returns: faces
: output facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
extrude_edge_only
(bm, edges, use_normal_flip, use_select_history)¶ Extrude Only Edges.
Extrudes Edges into faces, note that this is very simple, there’s no fancy winged extrusion.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input vertices - use_normal_flip (bool) – Create faces with reversed direction.
- use_select_history (bool) – pass to duplicate
Returns: geom
: output geometrytype list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
extrude_vert_indiv
(bm, verts, use_select_history)¶ Individual Vertex Extrude.
Extrudes wire edges from vertices.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input vertices - use_select_history (bool) – pass to duplicate
Returns: edges
: output wire edgestype list of (
bmesh.types.BMEdge
)verts
: output verticestype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
connect_verts
(bm, verts, faces_exclude, check_degenerate)¶ Connect Verts.
Split faces by adding edges that connect verts.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – Undocumented. - faces_exclude (list of (
bmesh.types.BMFace
)) – Undocumented. - check_degenerate (bool) – prevent splits with overlaps & intersections
Returns: edges
:type list of (
bmesh.types.BMEdge
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
connect_verts_concave
(bm, faces)¶ Connect Verts to form Convex Faces.
Ensures all faces are convex faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – Undocumented.
Returns: edges
:type list of (
bmesh.types.BMEdge
)faces
:type list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
connect_verts_nonplanar
(bm, angle_limit, faces)¶ Connect Verts Across non Planer Faces.
Split faces by connecting edges along non planer faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - angle_limit (float) – total rotation angle (radians)
- faces (list of (
bmesh.types.BMFace
)) – Undocumented.
Returns: edges
:type list of (
bmesh.types.BMEdge
)faces
:type list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
connect_vert_pair
(bm, verts, verts_exclude, faces_exclude)¶ Connect Verts.
Split faces by adding edges that connect verts.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – Undocumented. - verts_exclude (list of (
bmesh.types.BMVert
)) – Undocumented. - faces_exclude (list of (
bmesh.types.BMFace
)) – Undocumented.
Returns: edges
:type list of (
bmesh.types.BMEdge
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
extrude_face_region
(bm, geom, edges_exclude, use_keep_orig, use_normal_flip, use_normal_from_adjacent, use_select_history)¶ Extrude Faces.
Extrude operator (does not transform)
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – edges and faces - edges_exclude (set of vert/edge/face type) – Undocumented.
- use_keep_orig (bool) – keep original geometry (requires
geom
to include edges). - use_normal_flip (bool) – Create faces with reversed direction.
- use_normal_from_adjacent (bool) – Use winding from surrounding faces instead of this region.
- use_select_history (bool) – pass to duplicate
Returns: geom
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
dissolve_verts
(bm, verts, use_face_split, use_boundary_tear)¶ Dissolve Verts.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – Undocumented. - use_face_split (bool) – Undocumented.
- use_boundary_tear (bool) – Undocumented.
- bm (
-
bmesh.ops.
dissolve_edges
(bm, edges, use_verts, use_face_split)¶ Dissolve Edges.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – Undocumented. - use_verts (bool) – dissolve verts left between only 2 edges.
- use_face_split (bool) – Undocumented.
Returns: region
:type list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
dissolve_faces
(bm, faces, use_verts)¶ Dissolve Faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – Undocumented. - use_verts (bool) – dissolve verts left between only 2 edges.
Returns: region
:type list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
dissolve_limit
(bm, angle_limit, use_dissolve_boundaries, verts, edges, delimit)¶ Limited Dissolve.
Dissolve planar faces and co-linear edges.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - angle_limit (float) – total rotation angle (radians)
- use_dissolve_boundaries (bool) – Undocumented.
- verts (list of (
bmesh.types.BMVert
)) – Undocumented. - edges (list of (
bmesh.types.BMEdge
)) – Undocumented. - delimit (set of flags from ['NORMAL', 'MATERIAL', 'SEAM', 'SHARP', 'UV'], default {}) – Undocumented.
Returns: region
:type list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
dissolve_degenerate
(bm, dist, edges)¶ Degenerate Dissolve.
Dissolve edges with no length, faces with no area.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - dist (float) – maximum distance to consider degenerate
- edges (list of (
bmesh.types.BMEdge
)) – Undocumented.
- bm (
-
bmesh.ops.
triangulate
(bm, faces, quad_method, ngon_method)¶ Triangulate.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – Undocumented. - quad_method (enum in ['BEAUTY', 'FIXED', 'ALTERNATE', 'SHORT_EDGE'], default 'BEAUTY') – Undocumented.
- ngon_method (enum in ['BEAUTY', 'EAR_CLIP'], default 'BEAUTY') – Undocumented.
Returns: edges
:type list of (
bmesh.types.BMEdge
)faces
:type list of (
bmesh.types.BMFace
)face_map
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
face_map_double
: duplicate facestype dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
Return type: dict with string keys
- bm (
-
bmesh.ops.
unsubdivide
(bm, verts, iterations)¶ Un-Subdivide.
Reduce detail in geometry containing grids.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - verts (list of (
bmesh.types.BMVert
)) – input vertices - iterations (int) – Undocumented.
- bm (
-
bmesh.ops.
subdivide_edges
(bm, edges, smooth, smooth_falloff, fractal, along_normal, cuts, seed, custom_patterns, edge_percents, quad_corner_type, use_grid_fill, use_single_edge, use_only_quads, use_sphere, use_smooth_even)¶ Subdivide Edges.
Advanced operator for subdividing edges with options for face patterns, smoothing and randomization.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – Undocumented. - smooth (float) – Undocumented.
- smooth_falloff (enum in ['SMOOTH', 'SPHERE', 'ROOT', 'SHARP', 'LINEAR', 'INVERSE_SQUARE'], default 'SMOOTH') – smooth falloff type
- fractal (float) – Undocumented.
- along_normal (float) – Undocumented.
- cuts (int) – Undocumented.
- seed (int) – Undocumented.
- custom_patterns (dict mapping vert/edge/face types to unknown internal data, not compatible with python) – uses custom pointers
- edge_percents (dict mapping vert/edge/face types to float) – Undocumented.
- quad_corner_type (enum in ['STRAIGHT_CUT', 'INNER_VERT', 'PATH', 'FAN'], default 'STRAIGHT_CUT') – quad corner type
- use_grid_fill (bool) – fill in fully-selected faces with a grid
- use_single_edge (bool) – tessellate the case of one edge selected in a quad or triangle
- use_only_quads (bool) – only subdivide quads (for loopcut)
- use_sphere (bool) – for making new primitives only
- use_smooth_even (bool) – maintain even offset when smoothing
Returns: geom_inner
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)geom_split
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)geom
: contains all output geometrytype list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
subdivide_edgering
(bm, edges, interp_mode, smooth, cuts, profile_shape, profile_shape_factor)¶ Subdivide Edge-Ring.
Take an edge-ring, and subdivide with interpolation options.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input vertices - interp_mode (enum in ['LINEAR', 'PATH', 'SURFACE'], default 'LINEAR') – interpolation method
- smooth (float) – Undocumented.
- cuts (int) – Undocumented.
- profile_shape (enum in ['SMOOTH', 'SPHERE', 'ROOT', 'SHARP', 'LINEAR', 'INVERSE_SQUARE'], default 'SMOOTH') – profile shape type
- profile_shape_factor (float) – Undocumented.
Returns: faces
: output facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
bisect_plane
(bm, geom, dist, plane_co, plane_no, use_snap_center, clear_outer, clear_inner)¶ Bisect Plane.
Bisects the mesh by a plane (cut the mesh in half).
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – Undocumented. - dist (float) – minimum distance when testing if a vert is exactly on the plane
- plane_co (
mathutils.Vector
or any sequence of 3 floats) – point on the plane - plane_no (
mathutils.Vector
or any sequence of 3 floats) – direction of the plane - use_snap_center (bool) – snap axis aligned verts to the center
- clear_outer (bool) – when enabled. remove all geometry on the positive side of the plane
- clear_inner (bool) – when enabled. remove all geometry on the negative side of the plane
Returns: geom_cut
: output geometry aligned with the plane (new and existing)type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
)geom
: input and output geometry (result of cut)type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
delete
(bm, geom, context)¶ Delete Geometry.
Utility operator to delete geometry.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – Undocumented. - context (enum in ['VERTS', 'EDGES', 'FACES_ONLY', 'EDGES_FACES', 'FACES', 'FACES_KEEP_BOUNDARY', 'TAGGED_ONLY'], default 'VERTS') – geometry types to delete
- bm (
-
bmesh.ops.
duplicate
(bm, geom, dest, use_select_history, use_edge_flip_from_face)¶ Duplicate Geometry.
Utility operator to duplicate geometry, optionally into a destination mesh.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – Undocumented. - dest (
bmesh.types.BMesh
) – Undocumented. - use_select_history (bool) – Undocumented.
- use_edge_flip_from_face (bool) – Undocumented.
Returns: geom_orig
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)geom
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)vert_map
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
edge_map
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
face_map
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
boundary_map
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
isovert_map
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
Return type: dict with string keys
- bm (
-
bmesh.ops.
split
(bm, geom, dest, use_only_faces)¶ Split Off Geometry.
Disconnect geometry from adjacent edges and faces, optionally into a destination mesh.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – Undocumented. - dest (
bmesh.types.BMesh
) – Undocumented. - use_only_faces (bool) – when enabled. don’t duplicate loose verts/edges
Returns: geom
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)boundary_map
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
isovert_map
:type dict mapping vert/edge/face types to
bmesh.types.BMVert
/bmesh.types.BMEdge
/bmesh.types.BMFace
Return type: dict with string keys
- bm (
-
bmesh.ops.
spin
(bm, geom, cent, axis, dvec, angle, space, steps, use_merge, use_normal_flip, use_duplicate)¶ Spin.
Extrude or duplicate geometry a number of times, rotating and possibly translating after each step
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – Undocumented. - cent (
mathutils.Vector
or any sequence of 3 floats) – rotation center - axis (
mathutils.Vector
or any sequence of 3 floats) – rotation axis - dvec (
mathutils.Vector
or any sequence of 3 floats) – translation delta per step - angle (float) – total rotation angle (radians)
- space (
mathutils.Matrix
) – matrix to define the space (typically object matrix) - steps (int) – number of steps
- use_merge (bool) – Merge first/last when the angle is a full revolution.
- use_normal_flip (bool) – Create faces with reversed direction.
- use_duplicate (bool) – duplicate or extrude?
Returns: geom_last
: result of last steptype list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
rotate_uvs
(bm, faces, use_ccw)¶ UV Rotation.
Cycle the loop UV’s
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - use_ccw (bool) – rotate counter-clockwise if true, otherwise clockwise
- bm (
-
bmesh.ops.
reverse_uvs
(bm, faces)¶ UV Reverse.
Reverse the UV’s
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces
- bm (
-
bmesh.ops.
rotate_colors
(bm, faces, use_ccw)¶ Color Rotation.
Cycle the loop colors
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - use_ccw (bool) – rotate counter-clockwise if true, otherwise clockwise
- bm (
-
bmesh.ops.
reverse_colors
(bm, faces)¶ Color Reverse
Reverse the loop colors.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces
- bm (
-
bmesh.ops.
split_edges
(bm, edges, verts, use_verts)¶ Edge Split.
Disconnects faces along input edges.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input edges - verts (list of (
bmesh.types.BMVert
)) – optional tag verts, use to have greater control of splits - use_verts (bool) – use ‘verts’ for splitting, else just find verts to split from edges
Returns: edges
: old output disconnected edgestype list of (
bmesh.types.BMEdge
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
create_grid
(bm, x_segments, y_segments, size, matrix, calc_uvs)¶ Create Grid.
Creates a grid with a variable number of subdivisions
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - x_segments (int) – number of x segments
- y_segments (int) – number of y segments
- size (float) – size of the grid
- matrix (
mathutils.Matrix
) – matrix to multiply the new geometry with - calc_uvs (bool) – calculate default UVs
Returns: verts
: output vertstype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
create_uvsphere
(bm, u_segments, v_segments, diameter, matrix, calc_uvs)¶ Create UV Sphere.
Creates a grid with a variable number of subdivisions
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - u_segments (int) – number of u segments
- v_segments (int) – number of v segment
- diameter (float) – diameter
- matrix (
mathutils.Matrix
) – matrix to multiply the new geometry with - calc_uvs (bool) – calculate default UVs
Returns: verts
: output vertstype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
create_icosphere
(bm, subdivisions, diameter, matrix, calc_uvs)¶ Create Ico-Sphere.
Creates a grid with a variable number of subdivisions
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - subdivisions (int) – how many times to recursively subdivide the sphere
- diameter (float) – diameter
- matrix (
mathutils.Matrix
) – matrix to multiply the new geometry with - calc_uvs (bool) – calculate default UVs
Returns: verts
: output vertstype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
create_monkey
(bm, matrix, calc_uvs)¶ Create Suzanne.
Creates a monkey (standard blender primitive).
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - matrix (
mathutils.Matrix
) – matrix to multiply the new geometry with - calc_uvs (bool) – calculate default UVs
Returns: verts
: output vertstype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
create_cone
(bm, cap_ends, cap_tris, segments, diameter1, diameter2, depth, matrix, calc_uvs)¶ Create Cone.
Creates a cone with variable depth at both ends
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - cap_ends (bool) – whether or not to fill in the ends with faces
- cap_tris (bool) – fill ends with triangles instead of ngons
- segments (int) – Undocumented.
- diameter1 (float) – diameter of one end
- diameter2 (float) – diameter of the opposite
- depth (float) – distance between ends
- matrix (
mathutils.Matrix
) – matrix to multiply the new geometry with - calc_uvs (bool) – calculate default UVs
Returns: verts
: output vertstype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
create_circle
(bm, cap_ends, cap_tris, segments, radius, matrix, calc_uvs)¶ Creates a Circle.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - cap_ends (bool) – whether or not to fill in the ends with faces
- cap_tris (bool) – fill ends with triangles instead of ngons
- segments (int) – Undocumented.
- radius (float) – Radius of the circle.
- matrix (
mathutils.Matrix
) – matrix to multiply the new geometry with - calc_uvs (bool) – calculate default UVs
Returns: verts
: output vertstype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
create_cube
(bm, size, matrix, calc_uvs)¶ Create Cube
Creates a cube.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - size (float) – size of the cube
- matrix (
mathutils.Matrix
) – matrix to multiply the new geometry with - calc_uvs (bool) – calculate default UVs
Returns: verts
: output vertstype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
bevel
(bm, geom, offset, offset_type, segments, profile, vertex_only, clamp_overlap, material, loop_slide, mark_seam, mark_sharp, harden_normals, face_strength_mode, miter_outer, miter_inner, spread, smoothresh, use_custom_profile, custom_profile, vmesh_method)¶ Bevel.
Bevels edges and vertices
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – input edges and vertices - offset (float) – amount to offset beveled edge
- offset_type (enum in ['OFFSET', 'WIDTH', 'DEPTH', 'PERCENT'], default 'OFFSET') – how to measure the offset
- segments (int) – number of segments in bevel
- profile (float) – profile shape, 0->1 (.5=>round)
- vertex_only (bool) – only bevel vertices, not edges
- clamp_overlap (bool) – do not allow beveled edges/vertices to overlap each other
- material (int) – material for bevel faces, -1 means get from adjacent faces
- loop_slide (bool) – prefer to slide along edges to having even widths
- mark_seam (bool) – extend edge data to allow seams to run across bevels
- mark_sharp (bool) – extend edge data to allow sharp edges to run across bevels
- harden_normals (bool) – harden normals
- face_strength_mode (enum in ['NONE', 'NEW', 'AFFECTED', 'ALL'], default 'NONE') – whether to set face strength, and which faces to set if so
- miter_outer (enum in ['SHARP', 'PATCH', 'ARC'], default 'SHARP') – outer miter kind
- miter_inner (enum in ['SHARP', 'PATCH', 'ARC'], default 'SHARP') – outer miter kind
- spread (float) – amount to offset beveled edge
- smoothresh (float) – for passing mesh’s smoothresh, used in hardening
- use_custom_profile (bool) – Whether to use custom profile feature
- custom_profile (
bpy.types.bpy_struct
) – Undocumented. - vmesh_method (enum in ['ADJ', 'CUTOFF'], default 'ADJ') – Undocumented.
Returns: faces
: output facestype list of (
bmesh.types.BMFace
)edges
: output edgestype list of (
bmesh.types.BMEdge
)verts
: output vertstype list of (
bmesh.types.BMVert
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
beautify_fill
(bm, faces, edges, use_restrict_tag, method)¶ Beautify Fill.
Rotate edges to create more evenly spaced triangles.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - edges (list of (
bmesh.types.BMEdge
)) – edges that can be flipped - use_restrict_tag (bool) – restrict edge rotation to mixed tagged vertices
- method (enum in ['AREA', 'ANGLE'], default 'AREA') – method to define what is beautiful
Returns: geom
: new flipped faces and edgestype list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
triangle_fill
(bm, use_beauty, use_dissolve, edges, normal)¶ Triangle Fill.
Fill edges with triangles
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - use_beauty (bool) – Undocumented.
- use_dissolve (bool) – dissolve resulting faces
- edges (list of (
bmesh.types.BMEdge
)) – input edges - normal (
mathutils.Vector
or any sequence of 3 floats) – optionally pass the fill normal to use
Returns: geom
: new faces and edgestype list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
solidify
(bm, geom, thickness)¶ Solidify.
Turns a mesh into a shell with thickness
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - geom (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – Undocumented. - thickness (float) – Undocumented.
Returns: geom
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
inset_individual
(bm, faces, thickness, depth, use_even_offset, use_interpolate, use_relative_offset)¶ Face Inset (Individual).
Insets individual faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - thickness (float) – Undocumented.
- depth (float) – Undocumented.
- use_even_offset (bool) – Undocumented.
- use_interpolate (bool) – Undocumented.
- use_relative_offset (bool) – Undocumented.
Returns: faces
: output facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
inset_region
(bm, faces, faces_exclude, use_boundary, use_even_offset, use_interpolate, use_relative_offset, use_edge_rail, thickness, depth, use_outset)¶ Face Inset (Regions).
Inset or outset face regions.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - faces_exclude (list of (
bmesh.types.BMFace
)) – Undocumented. - use_boundary (bool) – Undocumented.
- use_even_offset (bool) – Undocumented.
- use_interpolate (bool) – Undocumented.
- use_relative_offset (bool) – Undocumented.
- use_edge_rail (bool) – Undocumented.
- thickness (float) – Undocumented.
- depth (float) – Undocumented.
- use_outset (bool) – Undocumented.
Returns: faces
: output facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
offset_edgeloops
(bm, edges, use_cap_endpoint)¶ Edgeloop Offset.
Creates edge loops based on simple edge-outset method.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - edges (list of (
bmesh.types.BMEdge
)) – input faces - use_cap_endpoint (bool) – Undocumented.
Returns: edges
: output facestype list of (
bmesh.types.BMEdge
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
wireframe
(bm, faces, thickness, offset, use_replace, use_boundary, use_even_offset, use_crease, crease_weight, use_relative_offset, material_offset)¶ Wire Frame.
Makes a wire-frame copy of faces.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - thickness (float) – Undocumented.
- offset (float) – Undocumented.
- use_replace (bool) – Undocumented.
- use_boundary (bool) – Undocumented.
- use_even_offset (bool) – Undocumented.
- use_crease (bool) – Undocumented.
- crease_weight (float) – Undocumented.
- use_relative_offset (bool) – Undocumented.
- material_offset (int) – Undocumented.
Returns: faces
: output facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
poke
(bm, faces, offset, center_mode, use_relative_offset)¶ Pokes a face.
Splits a face into a triangle fan.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - faces (list of (
bmesh.types.BMFace
)) – input faces - offset (float) – center vertex offset along normal
- center_mode (enum in ['MEAN_WEIGHTED', 'MEAN', 'BOUNDS'], default 'MEAN_WEIGHTED') – calculation mode for center vertex
- use_relative_offset (bool) – apply offset
Returns: verts
: output vertstype list of (
bmesh.types.BMVert
)faces
: output facestype list of (
bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
convex_hull
(bm, input, use_existing_faces)¶ Convex Hull
Builds a convex hull from the vertices in ‘input’.
If ‘use_existing_faces’ is true, the hull will not output triangles that are covered by a pre-existing face.
All hull vertices, faces, and edges are added to ‘geom.out’. Any input elements that end up inside the hull (i.e. are not used by an output face) are added to the ‘interior_geom’ slot. The ‘unused_geom’ slot will contain all interior geometry that is completely unused. Lastly, ‘holes_geom’ contains edges and faces that were in the input and are part of the hull.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - input (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – Undocumented. - use_existing_faces (bool) – Undocumented.
Returns: geom
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)geom_interior
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)geom_unused
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)geom_holes
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (
-
bmesh.ops.
symmetrize
(bm, input, direction, dist)¶ Symmetrize.
Makes the mesh elements in the “input” slot symmetrical. Unlike normal mirroring, it only copies in one direction, as specified by the “direction” slot. The edges and faces that cross the plane of symmetry are split as needed to enforce symmetry.
All new vertices, edges, and faces are added to the “geom.out” slot.
Parameters: - bm (
bmesh.types.BMesh
) – The bmesh to operate on. - input (list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)) – Undocumented. - direction (enum in ['-X', '-Y', '-Z', 'X', 'Y', 'Z'], default '-X') – axis to use
- dist (float) – minimum distance
Returns: geom
:type list of (
bmesh.types.BMVert
,bmesh.types.BMEdge
,bmesh.types.BMFace
)
Return type: dict with string keys
- bm (


Custom Markers Generator
NOTE: The background must be 240, 240, 240. Image with a transparent or white background wont work.
In Chromium based browser, entity stay on screen in last position when marker not detected
Custom Markers with Ar.js (OBSOLETE)


jconsole - Java Monitoring and Management Console
jconsole [ options ] [ connection ... ]
PARAMETERS
- options
- Options, if used, should follow immediately after the command
name.
- connection = pid | host:port |
jmxUrl
-
- pid Process ID of a local Java VM. The Java VM must
be running with the same user ID as the user ID running jconsole.
See JMX Monitoring
and Management for details.
- host:port Name of the host system on which
the Java VM is running and the port number specified by the
system property
com.sun.management.jmxremote.port
when the Java VM was started. See JMX Monitoring and
Management for details.
- jmxUrl Address of the JMX agent to be connected to
as described in JMXServiceURL.
DESCRIPTION
The jconsole command launches a graphical console tool
that enables you to monitor and manage Java applications and
virtual machines on a local or remote machine.
On Windows, jconsole does not associate with a console
window. It will, however, display a dialog box with error
information if the jconsole command fails for some
reason.
OPTIONS
- -interval=n
- Set the update interval to n seconds (default is 4
seconds).
- -notile
- Do not tile windows initially (for two or more
connections).
- -pluginpath plugins
- Specify a list of directories or JAR files which are searched
for JConsole plugins. The plugins path should contain a
provider-configuration file named:
META-INF/services/com.sun.tools.jconsole.JConsolePlugin
containing one line for each plugin specifying the fully
qualified class name of the class implementing the
com.sun.tools.jconsole.JConsolePlugin class.
- -version
- Output version information and exit.
- -help
- Output help message and exit.
- -J<flag>
- Pass <flag> to the Java virtual machine on which
jconsole is run.


Documentation still in development
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| person_id | It is assumed that every person with a different unique identifier is in fact a different person and should be treated independently. | Any person linkage that needs to occur to identify unique persons should be done prior to ETL. | integer | Yes | Yes | No | |||
| gender_concept_id | This field is meant to capture the biological sex at birth of the Person. This field should not be used to study gender identity issues. | Use the gender or sex value present in the data under the assumption that it is the biological sex at birth. If the source data captures gender identity it should be stored in the OBSERVATION table. | integer | Yes | No | Yes | CONCEPT | Gender | |
| year_of_birth | For data sources with date of birth, the year is extracted. For data sources where the year of birth is not available, the approximate year of birth is derived based on any age group categorization available. | integer | Yes | No | No | ||||
| month_of_birth | For data sources that provide the precise date of birth, the month is extracted and stored in this field. | integer | No | No | No | ||||
| day_of_birth | For data sources that provide the precise date of birth, the day is extracted and stored in this field. | integer | No | No | No | ||||
| birth_datetime | Compute age using birth_datetime. | For data sources that provide the precise datetime of birth, store that value in this field. If birth_datetime is not provided in the source, use the following logic to infer the date: If day_of_birth is null and month_of_birth is not null then use month/1/year. If month_of_birth is null then use 1/day/year, if day_of_birth is null and month_of_birth is null then 1/1/year. If time of birth is not given use midnight (00:00:0000). | datetime | No | No | No | |||
| race_concept_id | integer | Yes | No | Yes | CONCEPT | Race | |||
| ethnicity_concept_id | Ethnic backgrounds as subsets of race. The OMOP CDM adheres to the OMB standards so only Concepts that represent “Hispanic” and “Not Hispanic” are stored here. If a source has more granular ethnicity information it can be found in the field ethnicity_source_value. | Ethnicity in the OMOP CDM follows the OMB Standards for Data on Race and Ethnicity: Only distinctions between Hispanics and Non-Hispanics are made. If a source provides more granular ethnicity information it should be stored in the field ethnicity_source_value. | integer | Yes | No | Yes | CONCEPT | Ethnicity | |
| location_id | The location refers to the physical address of the person. | Put the location_id from the LOCATION table here that represents the most granular location information for the person. This could be zip code, state, or county for example. | integer | No | No | Yes | LOCATION | ||
| provider_id | The Provider refers to the last known primary care provider (General Practitioner). | Put the provider_id from the PROVIDER table of the last known general practitioner of the person. | integer | No | No | Yes | PROVIDER | ||
| care_site_id | The Care Site refers to where the Provider typically provides the primary care. | integer | No | No | Yes | CARE_SITE | |||
| person_source_value | Use this field to link back to persons in the source data. This is typically used for error checking of ETL logic. | Some use cases require the ability to link back to persons in the source data. This field allows for the storing of the person value as it appears in the source. | varchar(50) | No | No | No | |||
| gender_source_value | This field is used to store the biological sex of the person from the source data. It is not intended for use in standard analytics but for reference only. | Put the biological sex of the person as it appears in the source data. | varchar(50) | No | No | No | |||
| gender_source_concept_id | If the source data codes biological sex in a non-standard vocabulary, store the concept_id here. | Integer | No | No | Yes | CONCEPT | |||
| race_source_value | This field is used to store the race of the person from the source data. It is not intended for use in standard analytics but for reference only. | Put the race of the person as it appears in the source data. | varchar(50) | No | No | No | |||
| race_source_concept_id | If the source data codes race in an OMOP supported vocabulary store the concept_id here. | Integer | No | No | Yes | CONCEPT | |||
| ethnicity_source_value | This field is used to store the ethnicity of the person from the source data. It is not intended for use in standard analytics but for reference only. | If the person has an ethnicity other than the OMB standard of “Hispanic” or “Not Hispanic” store that value from the source data here. | varchar(50) | No | No | No | |||
| ethnicity_source_concept_id | If the source data codes ethnicity in an OMOP supported vocabulary, store the concept_id here. | Integer | No | No | Yes | CONCEPT |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| observation_period_id | A Person can have multiple discrete observations periods which are identified by the Observation_Period_Id. It is assumed that the observation period covers the period of time for which we know events occurred for the Person. In the context of the Common Data Model the absence of events during an observation period implies that the event did not occur. | Assign a unique observation_period_id to each discrete observation period for a Person. An observation period should the length of time for which we know events occurred for the Person. It may take some logic to define an observation period, especially when working with EHR or registry data. Often if no enrollment or coverage information is given an observation period is defined as the time between the earliest record and the latest record available for a person. | integer | Yes | Yes | No | |||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| observation_period_start_date | Use this date to determine the start date of the period for which we can assume that all events for a Person are recorded and any absense of records indicates an absence of events. | It is often the case that the idea of observation periods does not exist in source data. In those cases the observation_period_start_date can be inferred as the earliest event date available for the Person. In US claims, the observation period can be considered as the time period the person is enrolled with an insurer. If a Person switches plans but stays with the same insurer, that change would be captured in payer_plan_period. | date | Yes | No | No | |||
| observation_period_end_date | Use this date to determine the end date of the period for which we can assume that all events for a Person are recorded and any absense of records indicates an absence of events. | It is often the case that the idea of observation periods does not exist in source data. In those cases the observation_period_start_end_date can be inferred as the latest event date available for the Person. The event dates include insurance enrollment dates. | date | Yes | No | No | |||
| period_type_concept_id | This field can be used to determine the provenance of the observation period as in whether the period was determined from an insurance enrollment file or if it was determined from EHR healthcare encounters. | Choose the observation_period_type_concept_id that best represents how the period was determined. | Integer | Yes | No | Yes | CONCEPT | Type Concept |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| visit_occurrence_id | Use this to identify unique interactions between a person and the health care system. This identifier links across the other CDM event tables to associate events with a visit. | This should be populated by creating a unique identifier for each unique interaction between a person and the healthcare system where the person receives a medical good or service over a span of time. | integer | Yes | Yes | No | |||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| visit_concept_id | This field contains a concept id representing the kind of visit, like inpatient or outpatient. | Populate this field based on the kind of visit that took place for the person. For example this could be “Inpatient Visit”, “Outpatient Visit”, “Ambulatory Visit”, etc. It is often the case that some logic should be written for how to define visits and how to assign Visit_Concept_Id. In US claims outpatient visits that appear to occur within the time period of an inpatient visit can be rolled into one with the same Visit_Occurrence_Id. In EHR data inpatient visits that are within one day of each other may be strung together to create one visit. It will all depend on the source data and how encounter records should be translated to visit occurrences. | integer | Yes | No | Yes | CONCEPT | Visit | |
| visit_start_date | For inpatient visits, the start date is typically the admission date. For outpatient visits the start date and end date will be the same. | When populating visit_start_date, you will first have to make decisions on how to define visits. In some cases visits in the source data can be strung together if there are one or fewer days between them. | date | Yes | No | No | |||
| visit_start_datetime | If no time is given for the start date of a visit, set it to midnight (00:00:0000). | datetime | No | No | No | ||||
| visit_end_date | For inpatient visits the end date is typically the discharge date. | Visit end dates are mandatory. If end dates are not provided in the source there are three ways in which to derive them: Outpatient Visit: visit_end_datetime = visit_start_datetime Emergency Room Visit: visit_end_datetime = visit_start_datetime Inpatient Visit: Usually there is information about discharge. If not, you should be able to derive the end date from the sudden decline of activity or from the absence of inpatient procedures/drugs. Non-hospital institution Visits: Particularly for claims data, if end dates are not provided assume the visit is for the duration of month that it occurs. For Inpatient Visits ongoing at the date of ETL, put date of processing the data into visit_end_datetime and visit_type_concept_id with 32220 “Still patient” to identify the visit as incomplete. All other Visits: visit_end_datetime = visit_start_datetime. If this is a one-day visit the end date should match the start date. | date | Yes | No | No | |||
| visit_end_datetime | If no time is given for the end date of a visit, set it to midnight (00:00:0000). | datetime | No | No | No | ||||
| visit_type_concept_id | Use this field to understand the provenance of the visit record, or where the record comes from. | Populate this field based on the provenance of the visit record, as in whether it came from an EHR record or billing claim. | Integer | Yes | No | Yes | CONCEPT | Type Concept | |
| provider_id | There will only be one provider per visit. If multiple providers are associated with a visit that information can be found in the VISIT_DETAIL table. | If there are multiple providers associated with a visit, you will need to choose which one to put here. The additional providers can be stored in the visit_detail table. | integer | No | No | No | PROVIDER | ||
| care_site_id | This field provides information about the care site where the visit took place. | There should only be one care site associated with a visit. | integer | No | No | No | CARE_SITE | ||
| visit_source_value | This field houses the verbatim value from the source data representing the kind of visit that took place (inpatient, outpatient, emergency, etc.) | If there is information about the kind of visit in the source data that value should be stored here. If a visit is an amalgamation of visits from the source then use a hierarchy to choose the visit source value, such as IP -> ER-> OP. This should line up with the logic chosen to determine how visits are created. | varchar(50) | No | No | No | |||
| visit_source_concept_id | If the visit source value is coded in the source data using an OMOP supported vocabulary put the concept id representing the source value here. | integer | No | No | Yes | CONCEPT | |||
| admitting_source_concept_id | Use this field to determine where the patient was admitted from. This concept is part of the visit domain and can indicate if a patient was admitted to the hospital from a long-term care facility, for example. | If available, map the admitted_from_source_value to a standard concept in the visit domain. | integer | No | No | Yes | CONCEPT | Visit | |
| admitting_source_value | This information may be called something different in the source data but the field is meant to contain a value indicating where a person was admitted from. Typically this applies only to visits that have a length of stay, like inpatient visits or long-term care visits. | varchar(50) | No | No | No | ||||
| discharge_to_concept_id | Use this field to determine where the patient was discharged to after a visit. This concept is part of the visit domain and can indicate if a patient was discharged to home or sent to a long-term care facility, for example. | If available, map the discharge_to_source_value to a standard concept in the visit domain. | integer | No | No | Yes | CONCEPT | Visit | |
| discharge_to_source_value | This information may be called something different in the source data but the field is meant to contain a value indicating where a person was discharged to after a visit, as in they went home or were moved to long-term care. Typically this applies only to visits that have a length of stay of a day or more. | varchar(50) | No | No | No | ||||
| preceding_visit_occurrence_id | Use this field to find the visit that occured for the person prior to the given visit. There could be a few days or a few years in between. | The preceding_visit_id can be used to link a visit immediately preceding the current visit. Note this is not symmetrical, and there is no such thing as a “following_visit_id”. | integer | No | No | Yes | VISIT_OCCURRENCE |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| condition_occurrence_id | bigint | Yes | Yes | No | |||||
| person_id | bigint | Yes | No | Yes | PERSON | ||||
| condition_concept_id | The CONDITION_CONCEPT_ID field is recommended for primary use in analyses, and must be used for network studies | integer | Yes | No | Yes | CONCEPT | Condition | ||
| condition_start_date | date | Yes | No | No | |||||
| condition_start_datetime | datetime | No | No | No | |||||
| condition_end_date | date | No | No | No | |||||
| condition_end_datetime | should not be inferred | datetime | No | No | No | ||||
| condition_type_concept_id | integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| condition_status_concept_id | Presently, there is no designated vocabulary, domain, or class that represents condition status. The following concepts from SNOMED are recommended: Admitting diagnosis: 4203942 Final diagnosis: 4230359 (should also be used for discharge diagnosis Preliminary diagnosis: 4033240 | integer | No | No | Yes | CONCEPT | |||
| stop_reason | The Stop Reason indicates why a Condition is no longer valid with respect to the purpose within the source data. Note that a Stop Reason does not necessarily imply that the condition is no longer occurring. | varchar(20) | No | No | No | ||||
| provider_id | integer | No | No | Yes | PROVIDER | ||||
| visit_occurrence_id | integer | No | No | Yes | VISIT_OCCURRENCE | ||||
| visit_detail_id | integer | No | No | Yes | VISIT_DETAIL | ||||
| condition_source_value | This field is discouraged from use in analysis because it is not required to contain Standard Concepts that are used across the OHDSI community, and should only be used when Standard Concepts do not adequately represent the source detail for the Condition necessary for a given analytic use case. Consider using CONDITION_CONCEPT_ID instead to enable standardized analytics that can be consistent across the network. | This code is mapped to a Standard Condition Concept in the Standardized Vocabularies and the original code is stored here for reference. | varchar(50) | No | No | No | |||
| condition_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| condition_status_source_value | This code is mapped to a Standard Concept in the Standardized Vocabularies and the original code is stored here for reference. | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| drug_exposure_id | bigint | Yes | Yes | No | |||||
| person_id | bigint | Yes | No | Yes | PERSON | ||||
| drug_concept_id | integer | Yes | No | Yes | CONCEPT | Drug | |||
| drug_exposure_start_date | Valid entries include a start date of a prescription, the date a prescription was filled, or the date on which a Drug administration procedure was recorded. | date | Yes | No | No | ||||
| drug_exposure_start_datetime | datetime | No | No | No | |||||
| drug_exposure_end_date | The DRUG_EXPOSURE_END_DATE denotes the day the drug exposure ended for the patient. This could be that the duration of DRUG_SUPPLY was reached (in which case DRUG_EXPOSURE_END_DATETIME = DRUG_EXPOSURE_START_DATETIME + DAYS_SUPPLY -1 day), or because the exposure was stopped (medication changed, medication discontinued, etc.) When the native data suggests a drug exposure has a days supply less than 0, drop the record as unknown if a person has received the drug or not (THEMIS issue #24). If a patient has multiple records on the same day for the same drug or procedures the ETL should not de-dupe them unless there is probable reason to believe the item is a true data duplicate (THEMIS issue #14). Depending on different sources, it could be a known or an inferred date and denotes the last day at which the patient was still exposed to Drug. | date | Yes | No | No | ||||
| drug_exposure_end_datetime | datetime | No | No | No | |||||
| verbatim_end_date | You can use the TYPE_CONCEPT_ID to delineate between prescriptions written vs. prescriptions dispensed vs. medication history vs. patient-reported exposure | date | No | No | No | ||||
| drug_type_concept_id | integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| stop_reason | Reasons include regimen completed, changed, removed, etc. | varchar(20) | No | No | No | ||||
| refills | The content of the refills field determines the current number of refills, not the number of remaining refills. For example, for a drug prescription with 2 refills, the content of this field for the 3 Drug Exposure events are null, 1 and 2. | integer | No | No | No | ||||
| quantity | float | No | No | No | |||||
| days_supply | integer | No | No | No | |||||
| sig | (and printed on the container) | varchar(MAX) | No | No | No | ||||
| route_concept_id | Route information can also be inferred from the Drug product itself by determining the Drug Form of the Concept, creating some partial overlap of the same type of information. Therefore, route information should be stored in DRUG_CONCEPT_ID (as a drug with corresponding Dose Form). The ROUTE_CONCEPT_ID could be used for storing more granular forms e.g. ‘Intraventricular cardiac’. | integer | No | No | Yes | CONCEPT | Route | ||
| lot_number | varchar(50) | No | No | No | |||||
| provider_id | integer | No | No | Yes | PROVIDER | ||||
| visit_occurrence_id | integer | No | No | Yes | VISIT_OCCURRENCE | ||||
| visit_detail_id | integer | No | No | Yes | VISIT_DETAIL | ||||
| drug_source_value | This code is mapped to a Standard Drug concept in the Standardized Vocabularies and the original code is, stored here for reference. | varchar(50) | No | No | No | ||||
| drug_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| route_source_value | varchar(50) | No | No | No | |||||
| dose_unit_source_value | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| procedure_occurrence_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| procedure_concept_id | integer | Yes | No | Yes | CONCEPT | Procedure | |||
| procedure_date | date | Yes | No | No | |||||
| procedure_datetime | datetime | No | No | No | |||||
| procedure_type_concept_id | integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| modifier_concept_id | These concepts are typically distinguished by ‘Modifier’ concept classes (e.g., ‘CPT4 Modifier’ as part of the ‘CPT4’ vocabulary). | integer | No | No | Yes | CONCEPT | |||
| quantity | If the quantity value is omitted, a single procedure is assumed. | If a Procedure has a quantity of ‘0’ in the source, this should default to ‘1’ in the ETL. If there is a record in the source it can be assumed the exposure occurred at least once (THEMIS issue #26). | integer | No | No | No | |||
| provider_id | integer | No | No | No | PROVIDER | ||||
| visit_occurrence_id | integer | No | No | No | VISIT_OCCURRENCE | ||||
| visit_detail_id | integer | No | No | No | VISIT_DETAIL | ||||
| procedure_source_value | This code is mapped to a standard procedure Concept in the Standardized Vocabularies and the original code is, stored here for reference. Procedure source codes are typically ICD-9-Proc, CPT-4, HCPCS or OPCS-4 codes. | varchar(50) | No | No | No | ||||
| procedure_source_concept_id | integer | No | No | No | CONCEPT | ||||
| modifier_source_value | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| device_exposure_id | bigint | Yes | Yes | No | |||||
| person_id | bigint | Yes | No | Yes | PERSON | ||||
| device_concept_id | integer | Yes | No | Yes | CONCEPT | Device | |||
| device_exposure_start_date | date | Yes | No | No | |||||
| device_exposure_start_datetime | datetime | No | No | No | |||||
| device_exposure_end_date | date | No | No | No | |||||
| device_exposure_end_datetime | datetime | No | No | No | |||||
| device_type_concept_id | integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| unique_device_id | For medical devices that are regulated by the FDA, a Unique Device Identification (UDI) is provided if available in the data source and is recorded in the UNIQUE_DEVICE_ID field. | varchar(50) | No | No | No | ||||
| quantity | integer | No | No | No | |||||
| provider_id | integer | No | No | Yes | PROVIDER | ||||
| visit_occurrence_id | integer | No | No | Yes | VISIT_OCCURRENCE | ||||
| visit_detail_id | integer | No | No | Yes | VISIT_DETAIL | ||||
| device_source_value | varchar(50) | No | No | No | |||||
| device_source_concept_id | integer | No | No | Yes | CONCEPT |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| measurement_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| measurement_concept_id | integer | Yes | No | Yes | CONCEPT | Measurement | |||
| measurement_date | date | Yes | No | No | |||||
| measurement_datetime | datetime | No | No | No | |||||
| measurement_time | This is present for backwards compatibility and will be deprecated in an upcoming version | varchar(10) | No | No | No | ||||
| measurement_type_concept_id | integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| operator_concept_id | The meaning of Concept 4172703 for ‘=’ is identical to omission of a OPERATOR_CONCEPT_ID value. Since the use of this field is rare, it’s important when devising analyses to not to forget testing for the content of this field for values different from =. | If there is a negative value coming from the source, set the VALUE_AS_NUMBER to NULL, with the exception of the following Measurements (listed as LOINC codes): 1925-7 Base excess in Arterial blood by calculation 1927-3 Base excess in Venous blood by calculation Operators are <, <=, =, >=, > and these concepts belong to the ‘Meas Value Operator’ domain. 8632-2 QRS-Axis 11555-0 Base excess in Blood by calculation 1926-5 Base excess in Capillary blood by calculation 28638-5 Base excess in Arterial cord blood by calculation 28639-3 Base excess in Venous cord blood by calculation THEMIS issue #16 | integer | No | No | Yes | CONCEPT | ||
| value_as_number | float | No | No | No | |||||
| value_as_concept_id | integer | No | No | Yes | CONCEPT | ||||
| unit_concept_id | integer | No | No | Yes | CONCEPT | Unit | |||
| range_low | Ranges have the same unit as the VALUE_AS_NUMBER. | If reference ranges for upper and lower limit of normal as provided (typically by a laboratory) these are stored in the RANGE_HIGH and RANGE_LOW fields. Ranges have the same unit as the VALUE_AS_NUMBER. | float | No | No | No | |||
| range_high | Ranges have the same unit as the VALUE_AS_NUMBER. | float | No | No | No | ||||
| provider_id | integer | No | No | Yes | PROVIDER | ||||
| visit_occurrence_id | integer | No | No | Yes | VISIT_OCCURRENCE | ||||
| visit_detail_id | integer | No | No | Yes | VISIT_DETAIL | ||||
| measurement_source_value | varchar(50) | No | No | No | |||||
| measurement_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| unit_source_value | varchar(50) | No | No | No | |||||
| value_source_value | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| visit_detail_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| visit_detail_concept_id | integer | Yes | No | Yes | CONCEPT | Visit | |||
| visit_detail_start_date | date | Yes | No | No | |||||
| visit_detail_start_datetime | datetime | No | No | No | |||||
| visit_detail_end_date | date | Yes | No | No | |||||
| visit_detail_end_datetime | datetime | No | No | No | |||||
| visit_detail_type_concept_id | Integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| provider_id | integer | No | No | Yes | PROVIDER | ||||
| care_site_id | integer | No | No | Yes | CARE_SITE | ||||
| visit_detail_source_value | string(50) | No | No | No | |||||
| visit_detail_source_concept_id | Integer | No | No | Yes | CONCEPT | ||||
| admitting_source_value | Varchar(50) | No | No | No | |||||
| admitting_source_concept_id | Integer | No | No | Yes | CONCEPT | ||||
| discharge_to_source_value | Varchar(50) | No | No | No | |||||
| discharge_to_concept_id | Integer | No | No | Yes | CONCEPT | ||||
| preceding_visit_detail_id | Integer | No | No | Yes | VISIT_DETAIL | ||||
| visit_detail_parent_id | Integer | No | No | Yes | VISIT_DETAIL | ||||
| visit_occurrence_id | Integer | Yes | No | Yes | VISIT_OCCURRENCE |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| note_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| note_date | date | Yes | No | No | |||||
| note_datetime | datetime | No | No | No | |||||
| note_type_concept_id | integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| note_class_concept_id | integer | Yes | No | Yes | CONCEPT | ||||
| note_title | varchar(250) | No | No | No | |||||
| note_text | varchar(MAX) | Yes | No | No | |||||
| encoding_concept_id | integer | Yes | No | Yes | CONCEPT | ||||
| language_concept_id | integer | Yes | No | Yes | CONCEPT | ||||
| provider_id | integer | No | No | Yes | PROVIDER | ||||
| visit_occurrence_id | integer | No | No | Yes | VISIT_OCCURRENCE | ||||
| visit_detail_id | integer | No | No | Yes | VISIT_DETAIL | ||||
| note_source_value | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| note_nlp_id | integer | Yes | Yes | No | |||||
| note_id | integer | Yes | No | No | |||||
| section_concept_id | integer | No | No | Yes | CONCEPT | ||||
| snippet | varchar(250) | No | No | No | |||||
| offset | varchar(50) | No | No | No | |||||
| lexical_variant | varchar(250) | Yes | No | No | |||||
| note_nlp_concept_id | integer | No | No | Yes | CONCEPT | ||||
| note_nlp_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| nlp_system | varchar(250) | No | No | No | |||||
| nlp_date | date | Yes | No | No | |||||
| nlp_datetime | datetime | No | No | No | |||||
| term_exists | Term_exists is defined as a flag that indicates if the patient actually has or had the condition. Any of the following modifiers would make Term_exists false: Negation = true Subject = [anything other than the patient] Conditional = true/li> Rule_out = true Uncertain = very low certainty or any lower certainties A complete lack of modifiers would make Term_exists true. | varchar(1) | No | No | No | ||||
| term_temporal | Term_temporal is to indicate if a condition is ï¿½presentï¿½ or just in the ï¿½pastï¿½. The following would be past: History = true Concept_date = anything before the time of the report | varchar(50) | No | No | No | ||||
| term_modifiers | For the modifiers that are there, they would have to have these values: Negation = false Subject = patient Conditional = false Rule_out = false Uncertain = true or high or moderate or even low (could argue about low). Term_modifiers will concatenate all modifiers for different types of entities (conditions, drugs, labs etc) into one string. Lab values will be saved as one of the modifiers. A list of allowable modifiers (e.g., signature for medications) and their possible values will be standardized later. | varchar(2000) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| observation_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| observation_concept_id | integer | Yes | No | Yes | CONCEPT | ||||
| observation_date | date | Yes | No | No | |||||
| observation_datetime | datetime | No | No | No | |||||
| observation_type_concept_id | integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| value_as_number | float | No | No | No | |||||
| value_as_string | varchar(60) | No | No | No | |||||
| value_as_concept_id | Note that the value of VALUE_AS_CONCEPT_ID may be provided through mapping from a source Concept which contains the content of the Observation. In those situations, the CONCEPT_RELATIONSHIP table in addition to the ‘Maps to’ record contains a second record with the relationship_id set to ‘Maps to value’. For example, ICD9CM V17.5 concept_id 44828510 ‘Family history of asthma’ has a ‘Maps to’ relationship to 4167217 ‘Family history of clinical finding’ as well as a ‘Maps to value’ record to 317009 ‘Asthma’. | Integer | No | No | Yes | CONCEPT | |||
| qualifier_concept_id | integer | No | No | Yes | CONCEPT | ||||
| unit_concept_id | integer | No | No | Yes | CONCEPT | Unit | |||
| provider_id | integer | No | No | Yes | PROVIDER | ||||
| visit_occurrence_id | integer | No | No | Yes | VISIT_OCCURRENCE | ||||
| visit_detail_id | integer | No | No | Yes | VISIT_DETAIL | ||||
| observation_source_value | varchar(50) | No | No | No | |||||
| observation_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| unit_source_value | varchar(50) | No | No | No | |||||
| qualifier_source_value | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| specimen_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| specimen_concept_id | integer | Yes | No | Yes | CONCEPT | ||||
| specimen_type_concept_id | integer | Yes | No | Yes | CONCEPT | Type Concept | |||
| specimen_date | date | Yes | No | No | |||||
| specimen_datetime | datetime | No | No | No | |||||
| quantity | float | No | No | No | |||||
| unit_concept_id | integer | No | No | Yes | CONCEPT | ||||
| anatomic_site_concept_id | integer | No | No | Yes | CONCEPT | ||||
| disease_status_concept_id | integer | No | No | Yes | CONCEPT | ||||
| specimen_source_id | varchar(50) | No | No | No | |||||
| specimen_source_value | varchar(50) | No | No | No | |||||
| unit_source_value | varchar(50) | No | No | No | |||||
| anatomic_site_source_value | varchar(50) | No | No | No | |||||
| disease_status_source_value | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| domain_concept_id_1 | integer | Yes | No | Yes | CONCEPT | ||||
| fact_id_1 | integer | Yes | No | No | |||||
| domain_concept_id_2 | integer | Yes | No | Yes | CONCEPT | ||||
| fact_id_2 | integer | Yes | No | No | |||||
| relationship_concept_id | integer | Yes | No | Yes | CONCEPT |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| location_id | integer | Yes | Yes | No | |||||
| address_1 | varchar(50) | No | No | No | |||||
| address_2 | varchar(50) | No | No | No | |||||
| city | varchar(50) | No | No | No | |||||
| state | varchar(2) | No | No | No | |||||
| zip | Zip codes are handled as strings of up to 9 characters length. For US addresses, these represent either a 3-digit abbreviated Zip code as provided by many sources for patient protection reasons, the full 5-digit Zip or the 9-digit (ZIP + 4) codes. Unless for specific reasons analytical methods should expect and utilize only the first 3 digits. For international addresses, different rules apply. | varchar(9) | No | No | No | ||||
| county | varchar(20) | No | No | No | |||||
| location_source_value | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| care_site_id | integer | Yes | Yes | No | |||||
| care_site_name | varchar(255) | No | No | No | |||||
| place_of_service_concept_id | integer | No | No | Yes | CONCEPT | ||||
| location_id | integer | No | No | No | |||||
| care_site_source_value | varchar(50) | No | No | No | |||||
| place_of_service_source_value | varchar(50) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| provider_id | integer | Yes | Yes | No | |||||
| provider_name | varchar(255) | No | No | No | |||||
| npi | varchar(20) | No | No | No | |||||
| dea | varchar(20) | No | No | No | |||||
| specialty_concept_id | If a Provider has more than one Specialty, the main or most often exerted specialty should be recorded. | integer | No | No | Yes | CONCEPT | |||
| care_site_id | integer | No | No | Yes | CARE_SITE | ||||
| year_of_birth | integer | No | No | No | |||||
| gender_concept_id | integer | No | No | Yes | CONCEPT | Gender | |||
| provider_source_value | varchar(50) | No | No | No | |||||
| specialty_source_value | varchar(50) | No | No | No | |||||
| specialty_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| gender_source_value | varchar(50) | No | No | No | |||||
| gender_source_concept_id | integer | No | No | Yes | CONCEPT |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| payer_plan_period_id | integer | Yes | Yes | Yes | PERSON | ||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| payer_plan_period_start_date | date | Yes | No | No | |||||
| payer_plan_period_end_date | date | Yes | No | No | |||||
| payer_concept_id | integer | No | No | Yes | CONCEPT | ||||
| payer_source_value | varchar(50) | No | No | No | |||||
| payer_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| plan_concept_id | integer | No | No | Yes | CONCEPT | ||||
| plan_source_value | varchar(50) | No | No | No | |||||
| plan_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| sponsor_concept_id | integer | No | No | Yes | CONCEPT | ||||
| sponsor_source_value | varchar(50) | No | No | No | |||||
| sponsor_source_concept_id | integer | No | No | Yes | CONCEPT | ||||
| family_source_value | varchar(50) | No | No | No | |||||
| stop_reason_concept_id | integer | No | No | Yes | CONCEPT | ||||
| stop_reason_source_value | varchar(50) | No | No | No | |||||
| stop_reason_source_concept_id | integer | No | No | Yes | CONCEPT |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| cost_id | INTEGER | Yes | Yes | No | |||||
| cost_event_id | INTEGER | Yes | No | No | |||||
| cost_domain_id | VARCHAR(20) | Yes | No | Yes | DOMAIN | ||||
| cost_type_concept_id | integer | Yes | No | Yes | CONCEPT | ||||
| currency_concept_id | integer | No | No | Yes | CONCEPT | ||||
| total_charge | FLOAT | No | No | No | |||||
| total_cost | FLOAT | No | No | No | |||||
| total_paid | FLOAT | No | No | No | |||||
| paid_by_payer | FLOAT | No | No | No | |||||
| paid_by_patient | FLOAT | No | No | No | |||||
| paid_patient_copay | FLOAT | No | No | Yes | CONCEPT | ||||
| paid_patient_coinsurance | FLOAT | No | No | No | |||||
| paid_patient_deductible | FLOAT | No | No | No | |||||
| paid_by_primary | FLOAT | No | No | No | |||||
| paid_ingredient_cost | FLOAT | No | No | No | |||||
| paid_dispensing_fee | FLOAT | No | No | No | |||||
| payer_plan_period_id | INTEGER | No | No | No | |||||
| amount_allowed | FLOAT | No | No | No | |||||
| revenue_code_concept_id | integer | No | No | Yes | CONCEPT | ||||
| revenue_code_source_value | Revenue codes are a method to charge for a class of procedures and conditions in the U.S. hospital system. | VARCHAR(50) | No | No | No | ||||
| drg_concept_id | integer | No | No | Yes | CONCEPT | ||||
| drg_source_value | Diagnosis Related Groups are US codes used to classify hospital cases into one of approximately 500 groups. | VARCHAR(3) | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| drug_era_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| drug_concept_id | integer | Yes | No | Yes | CONCEPT | Drug | Ingredient | ||
| drug_era_start_date | The Drug Era Start Date is the start date of the first Drug Exposure for a given ingredient. (NOT RIGHT) | datetime | Yes | No | No | ||||
| drug_era_end_date | The Drug Era End Date is the end date of the last Drug Exposure. The End Date of each Drug Exposure is either taken from the field drug_exposure_end_date or, as it is typically not available, inferred using the following rules: For pharmacy prescription data, the date when the drug was dispensed plus the number of days of supply are used to extrapolate the End Date for the Drug Exposure. Depending on the country-specific healthcare system, this supply information is either explicitly provided in the day_supply field or inferred from package size or similar information. For Procedure Drugs, usually the drug is administered on a single date (i.e., the administration date). A standard Persistence Window of 30 days (gap, slack) is permitted between two subsequent such extrapolated DRUG_EXPOSURE records to be considered to be merged into a single Drug Era. (ARENT WE REQUIRING TO USE DRUG_EXPOSURE_END_DATE NOW????) | datetime | Yes | No | No | ||||
| drug_exposure_count | integer | No | No | No | |||||
| gap_days | The Gap Days determine how many total drug-free days are observed between all Drug Exposure events that contribute to a DRUG_ERA record. It is assumed that the drugs are “not stockpiled” by the patient, i.e. that if a new drug prescription or refill is observed (a new DRUG_EXPOSURE record is written), the remaining supply from the previous events is abandoned. The difference between Persistence Window and Gap Days is that the former is the maximum drug-free time allowed between two subsequent DRUG_EXPOSURE records, while the latter is the sum of actual drug-free days for the given Drug Era under the above assumption of non-stockpiling. | integer | No | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| dose_era_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | Yes | PERSON | ||||
| drug_concept_id | integer | Yes | No | Yes | CONCEPT | Drug | Ingredient | ||
| unit_concept_id | integer | Yes | No | Yes | CONCEPT | Unit | |||
| dose_value | float | Yes | No | No | |||||
| dose_era_start_date | datetime | Yes | No | No | |||||
| dose_era_end_date | datetime | Yes | No | No |
| CDM Field | User Guide | ETL Conventions | Datatype | Required | Primary Key | Foreign Key | FK Table | FK Domain | FK Class |
|---|---|---|---|---|---|---|---|---|---|
| condition_era_id | integer | Yes | Yes | No | |||||
| person_id | integer | Yes | No | No | PERSON | ||||
| condition_concept_id | integer | Yes | No | Yes | CONCEPT | Condition | |||
| condition_era_start_date | datetime | Yes | No | No | |||||
| condition_era_end_date | datetime | Yes | No | No | |||||
| condition_occurrence_count | integer | No | No | No |


Country
China
United States
Japan
France
Cuba
Switzerland
*Notes: The data is not real.
When updating a point, it changes to purple.
When adding a new point, it is orange.


Loïc Murumba
Electrical and Computer Engineering
Projects
Slice
In Progress Real time online multiplayer combat game; uses a nodejs server and web sockets to quickly transmit game data to all clients. Client-side game programmed using HTML canvas and Javascript. Backend mostly complete, currently working on mechanics.
Soar
Complete Challenging platformer programmed in android studio using Java; implements a real-time database to keep track of the worldwide high score and reports it to every user. Available on the Google Playstore.
Portfolio Website
Complete The website you're currently browsing! I learned a lot about design in the process and used CSS, HTML, Javascript, Bootstrap, and JQuery to bring this to life; hopefully you're enjoying it!
Delta Diet
Complete Android app that works as a tracker for your daily macronutrients that can be fine tuned by a doctor. Created this with the help of a few students at a hackathon and learned a lot about android studio.
QuickPic
In Progress A chrome extension that reduces bandwidth used by sending them to an external server before they're loaded. The server would then lower the image resolution for a faster browsing experience. I learned a lot more about node.js and javascript functions in the process.
Work Experience
Midnight Sun Solar Car Team
Web Developer // Fall 2016 - Present
- Re-structured the website design using CSS, jQuery, bootstrap, and Javascript
- Communicated with marketing team to ensure the changes fit their needs
- Design changes reviewed, perfected, and pushed to production.
Waterloo Hyperloop Team
Software and Electrical team member // Fall 2016 - Present
- Designing dashboard that graphically displays various statistics and updates in real-time based on output from the hyperloop pod's sensors
- Programming backend communication using websockets to connect dashboard to Go server
- Built and helped design circuits to help power and control different components of the car
LOGiQ3
IT Analyst // Winter 2017
- Increased efficiency by introducing automated system to parse and assign service requests within IT team
- Reduced cost of external IT consultants by automating service request assignment
- Acquired professional communication skills while providing tech support to coworkers
- Worked on advertising project for marketing team using JavaScript, HTML, and CSS
Academia
University of Waterloo
2016 - Present
- Pursuing Bachelor of Applied Science in Electrical Engineering
- Ranked 23/155 for 1A academic term
- Active member of two student design teams
- Scored 100% in fundamentals of programming class (C++)
Awards
- Elected class valedictorian
- Named 1 of 85 Horatio Alger National Scholars for academic excellence and overcoming adversity
- Earned uWaterloo's President's Scholarship of Distinction for +95% entrance avg.
- Won Richard and Elizabeth Madter's Entrance Scholarship for participation in extracurricular activities


Emmerdale SPOILERS: David Metcalfe throws Jacob Gallagher out?
Jacob's family have had enough
by Charlotte RodriguesThings get worse for Jacob when his dad David throws him out in tonight's Emmerdale (November 22).
After Jacob's cruel treatment of Leanna, he finds his friends are soon turning their backs on him, including Liv Flaherty.
Jacob disgusted everyone, including viewers when he slept with Leanna and afterwards claimed he didn't want to but did it because she came looking for him.
Read More: Emmerdale's Isabel Hodgins shares pictures from early birthday celebrations with co-stars
After a confrontation with the teenager, Leanna's dad Liam ended up punching Jacob in the face for being disrespectful to Leanna.
But Jacob wanted the last word and went to the police station and reported Liam for assault, meaning the doctor could lose his job.
Tonight Jacob arrives at the shop but his dad David and biological mum Leyla are still cold with him over what happened and it doesn't take long till Eric gives him a piece of his mind.
His grandfather tells him he can't keep behaving this way and treating people badly.

As the consequences of his actions hit, Jacob begins to realise he is being kicked out.
Will this be the wake-up call that he needs?
Viewers know Jacob hasn't been the same since he was groomed by school teacher Maya Stepney.
The paedophile, who was in a relationship with David, began grooming Jacob when he was 15 and began sleeping with him just days after his 16th birthday.
Read More: Emmerdale's Matthew Wolfenden hits back at troll who accuses him of being a bad actor
After Maya was caught, she was reported to the police and eventually was sentenced to 12 months in prison.
However, earlier this week, she was released early from prison and it was revealed to viewers that she is pregnant but who's the father?
Some viewers have predicted that Leanna will fall pregnant with Jacob's child.
Emmerdale airs weeknights at 7pm on ITV, with an extra episode at 8pm on Thursdays.
Leave us a comment on our Facebook page @EntertainmentDailyFix and let us know what you think!


Use the WLM_GET_WORK_ACTION_SET_STATS table function to access the work action set statistics in memory to get the number of times specific activity types have been run.
Notice this time, two of the activities from the script were considered large activities (large_wc).


!Guard Stan:
You came back! You crushed their spirits and took their soup, right? And you did a good job protecting this village.. which is supposed to be my job.
Your work should be compensated so I'll make you a good deal. I'll count two empty soup containers as one full soup container. So let's soup it up! Unless you want more untasty fruits...
[Quest _289_DeliciousFoodsAreMine icarus|Icarus Trident recipe or its ingredients] (500 full soup containers)
[Quest _289_DeliciousFoodsAreMine moirai|Sealed Moirai Armor recipe or its ingredients] (100 full soup containers)
[Quest _289_DeliciousFoodsAreMine stan_q289_05.htm|Ask for more foul fruits.]