I want to realize a Offset function of AutoCAD.

I want to realize a Offset function of AutoCAD to use blender python.


I want to below result.

Look at my script :

import bpy, mathutils, math
bpy.ops.mesh.select_all(action=“DESELECT”)
bpy.ops.object.mode_set(mode=“OBJECT”)
obj = bpy.context.object
me = obj.data
dis = 0.5
last_vIndex = 0
new_edge = []
for v in me.vertices:
if last_vIndex < v.index:
last_vIndex = v.index
offset_vIndex = 1
for eg in me.edges[:]:
v1 = me.vertices[eg.key[0]]
v2 = me.vertices[eg.key[1]]

n = (v1.normal + v2.normal) * dis

co1 = v1.co + n
co2 = v2.co + n
v1.select = True

bpy.ops.object.mode_set(mode="EDIT")  
bpy.ops.mesh.duplicate()    
bpy.ops.object.mode_set(mode="OBJECT")   
me.vertices[last_vIndex+offset_vIndex].co = co1
v2.select = True
bpy.ops.object.mode_set(mode="EDIT")  
bpy.ops.mesh.duplicate()   
bpy.ops.object.mode_set(mode="OBJECT")       
me.vertices[last_vIndex+offset_vIndex+1].co = co2   

me.vertices[last_vIndex+offset_vIndex].select = True
me.vertices[last_vIndex+offset_vIndex+1].select = True
bpy.ops.object.mode_set(mode="EDIT")  
new_edge.append((last_vIndex+offset_vIndex, last_vIndex+offset_vIndex+1))
bpy.ops.mesh.select_all(action="DESELECT")      
bpy.ops.object.mode_set(mode="OBJECT")  
offset_vIndex += 2

print(new_edge)
for i in range(len(new_edge)):
v1 = new_edge[i][0]
v2 = new_edge[i][1]
if i < (len(new_edge) -1):
v3 = new_edge[i+1][0]
v4 = new_edge[i+1][1]
else:
v3 = new_edge[0][0]
v4 = new_edge[0][1]
me.vertices[v1].select = True
me.vertices[v2].select = True
bpy.ops.object.mode_set(mode=“EDIT”)
bpy.ops.mesh.edge_face_add()
bpy.ops.mesh.select_all(action=“DESELECT”)
bpy.ops.object.mode_set(mode=“OBJECT”)

intersection_v = mathutils.geometry.intersect_line_line(me.vertices[v1].co, me.vertices[v2].co, me.vertices[v3].co, me.vertices[v4].co)
intersection_vv = mathutils.Vector((intersection_v[0][0],intersection_v[0][1],intersection_v[0][2]))
me.vertices[v2].co = intersection_vv
me.vertices[v3].co = intersection_vv

bpy.ops.object.mode_set(mode=“EDIT”)
bpy.ops.mesh.select_all(action=“SELECT”)
bpy.ops.mesh.remove_doubles()

Where is a problem in my script?

Please answer to me.
Thank you.