private static bool _catchIsRunned = false;
private static Database _lastOpened = null;
[LispFunction("StartCatchDatabase")]
public static void StartCatchDatabase(ResultBuffer rb)
{
if (!_catchIsRunned)
{
Database.DatabaseConstructed += Database_DatabaseConstructed;
_catchIsRunned = true;
}
}
[LispFunction("StopCatchDatabase")]
public static void StopCatchDatabase(ResultBuffer rb)
{
if (_catchIsRunned)
{
Database.DatabaseConstructed -= Database_DatabaseConstructed;
_catchIsRunned = false;
_lastOpened = null;
}
}
private static void Database_DatabaseConstructed
(object sender, System.EventArgs e) => _lastOpened = sender as Database;
[LispFunction("CheckObjectOwner")]
public static void EditObject(ResultBuffer rb)
{
if (rb != null)
{
Database db =
_lastOpened != null && !_lastOpened.IsDisposed && !string.IsNullOrEmpty(_lastOpened.Filename)
? _lastOpened
: HostApplicationServices.WorkingDatabase;
TypedValue[] tVals = rb.AsArray();
if (tVals.Length == 1
&& tVals[0].Value is string handleString)
{
ObjectId id = GetObjectId(db, handleString);
if (id.IsValid)
{
Application.ShowAlertDialog("File name: " + id.Database.Filename);
}
}
}
}
private static ObjectId GetObjectId(Database db, string handleString)
{
ObjectId id = ObjectId.Null;
if (long.TryParse
(handleString,
NumberStyles.AllowHexSpecifier,
CultureInfo.InvariantCulture,
out long handleNum))
{
Handle handle = new Handle(handleNum);
db.TryGetObjectId(handle, out id);
}
return id;
}