# Scripting the generation of a curve from the set of mesh centers drawn using BTrace add-on

I'm writing a script to generate a (smooth) curve joined from the centers of several meshes.

So, here is my code:

import bpy
import os

# PRECONDITION: The segmented meshes should be all in the following directory.

#------------------------------------------------------------------------------
# A. IMPORTING ALL MESHES
# REFERENCE: https://blender.stackexchange.com/questions/5064/how-to-batch-import-wavefront-obj-files

path_to_objects = '/home/rahul/Samples/Original-Samples/Segmented/'

# Get list of all files in directory
file_list = sorted(os.listdir(path_to_objects))

# Get a list of files ending in 'stl'
obj_list = [item for item in file_list if item.endswith('.stl')]
N = len(obj_list)

# Loop through the strings in obj_list and add the files to the scene
for item in obj_list:
path_to_file = os.path.join(path_to_objects, item)
bpy.ops.import_mesh.stl(filepath = path_to_file)
#endFor

#------------------------------------------------------------------------------
# B. EXTRACTING THE CENTERS OF EACH MESH

# Selecting everything
bpy.ops.object.select_all(action='SELECT')
# Select origins of each mesh
bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY')

#------------------------------------------------------------------------------
# C. FINDING SPLINE

# Selecting the BTrace window -> Objects Connect
bpy.ops.group.create(name="Btrace")

# Executing 'Run' button:
# Iteratively execting 3 commands for each mesh
for i in range(0, N):
bpy.ops.object.editmode_toggle()
bpy.ops.object.editmode_toggle()
#endFor

bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.btobjectsconnect() # >> ERROR <<

#-----------------------------------------------------------------------------
# D. EXPORTING THE GENERATED CURVE

bpy.ops.object.select_all(action='DESELECT')
N = len(bpy.data.objects) - 1 # all the mesh + 1 curve in bpy.data.objects

# Using the name of last object as the suffix of the name of our curve:
name = bpy.data.objects[N].name # get it's name
stl_path = os.path.join('/home/rahul/Samples/Original-Samples/Segmented/', name + '.SmoothSpline.stl')

bpy.ops.object.select_all(action='DESELECT')

# NOTE**: the curve is at index i = 0.

# Now, deleting next N meshes
for i in range(0,N):
bpy.data.objects[1].select = True # always select the second mesh**
bpy.ops.object.delete() # and delete the mesh
#endFor

# Into the EDIT mode
bpy.ops.object.editmode_toggle()
# Select all points
bpy.ops.curve.select_all(action='SELECT')
# Smoothify
bpy.ops.curve.handle_type_set(type='AUTOMATIC')
bpy.ops.object.editmode_toggle() # back in to OBJECT mode

# Exporting the mesh (curve)
bpy.ops.export_mesh.stl(filepath=stl_path)

#------------------------------------------------------------------------------
# E. FINDING FRONTAL NORMAL (N2)

#------------------------------------------------------------------------------
# F. FINDING TRANSVERSE NORMAL (N1)

#------------------------------------------------------------------------------


Here is the screenshot of the script execution:

But, when I run the part (PART C.) of this script related to generating the curve using BTrace add-on manually and rest of the script in console, things went perfectly fine.