...
public void Initialize() get called when this plugin loaded via NETLOAD command and Terminate one this plugin unloaded by the System.
Defining .NET LispFunction
Third party can define .NET methods which is usable in LISPĀ
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//Method attribute to define lisp callable function 'LispTest'
//i.e (setq x (lisptest "Text created by .NET lisp function" 1.0 '(10 10 0)))
[LispFunction("lisptest")]
public ResultBuffer DoIt(ResultBuffer args)
{
// Get the database of the active document.
Database db = HostApplicationServices.WorkingDatabase;
TypedValue[] argsVal = new TypedValue[3];
if (args != null)
{
argsVal = args.AsArray();
}
else
{
argsVal[0] = new TypedValue((int)LispDataType.Text, "Default Text");
argsVal[1] = new TypedValue((int)LispDataType.Double, .2);
argsVal[1] = new TypedValue((int)LispDataType.Point3d, new Point3d(0, 0, 0));
}
// Set up transaction manager.
Teigha.DatabaseServices.TransactionManager tm = db.TransactionManager;
using (Transaction tr = tm.StartTransaction())
{
try
{
Point3d pPosition = new Point3d(0, 0, 0);
// Create a new MText object and set properties.
DBText pText = new DBText();
pText.TextString = (String)argsVal[0].Value;
pText.Height = Convert.ToDouble(argsVal[1].Value);
pText.Position = (Point3d)argsVal[2].Value;
// Get model space to add the MText object.
BlockTable pBlockTable = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite);
BlockTableRecord pModelSpace = (BlockTableRecord)tr.GetObject(pBlockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
// Add the object to the model space.
ObjectId id = pModelSpace.AppendEntity(pText);
tr.AddNewlyCreatedDBObject(pText, true);
// Commit changes to database.
tr.Commit();
//return created text entity to lisp
return new ResultBuffer(new TypedValue((int)LispDataType.ObjectId, id));
}
finally
{
// delete tr , managed by c# with garbage collection
}
}
} |