This need has been sitting for awhile, so I made a first attempt. This code is not great. Hoping someone can improve upon it.
import clr
# Add Assemblies for AutoCAD
clr.AddReference('AcMgd')
clr.AddReference('AcDbMgd')
# Import references from AutoCAD
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
adoc = Application.DocumentManager.MdiActiveDocument
editor = adoc.Editor
def create_mleader(text, leaderPnt, textPnt):
output=[]
i=0
if not isinstance(text,list):
text = [text]
global adoc
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
bt = t.GetObject(db.BlockTableId, OpenMode.ForRead)
btr = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite)
for obj in text:
leader = MLeader()
leader.SetDatabaseDefaults()
leader.ContentType = ContentType.MTextContent
mText = MText()
mText.SetDatabaseDefaults()
mText.SetContentsRtf(obj)
mText.Location = Point3d(textPnt[i].X, textPnt[i].Y, textPnt[i].Z)
leader.MText = mText
idx = leader.AddLeaderLine(Point3d(leaderPnt[i].X, leaderPnt[i].Y, leaderPnt[i].Z))
btr.AppendEntity(leader)
t.AddNewlyCreatedDBObject(leader, True)
output.append(leader)
i+=1
t.Commit()
return output
OUT = create_mleader(IN[0], IN[1], IN[2])