In order to set DBMOD variable you can P/Invoke acdbSetDbmod function:
long __cdecl acdbSetDbmod(class AcDbDatabase *, long newDBMod);
Example:
using System;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
[assembly: CommandClass(typeof(Rivilis.SetDbMod))]
namespace Rivilis
{
public class SetDbMod
{
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("acdb16.dll", CallingConvention = CallingConvention.Cdecl,
EntryPoint = "?acdbSetDbmod@@YAJPAVAcDbDatabase@@J@Z")]
private static extern Int32 acdbSetDbmod16(IntPtr db, Int32 newDbMod);
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("acdb17.dll", CallingConvention = CallingConvention.Cdecl,
EntryPoint = "?acdbSetDbmod@@YAJPAVAcDbDatabase@@J@Z")]
private static extern Int32 acdbSetDbmod17(IntPtr db, Int32 newDbMod);
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("acdb18.dll", CallingConvention = CallingConvention.Cdecl,
EntryPoint = "?acdbSetDbmod@@YAJPAVAcDbDatabase@@J@Z")]
private static extern Int32 acdbSetDbmod18(IntPtr db, Int32 newDbMod);
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("acdb19.dll", CallingConvention = CallingConvention.Cdecl,
EntryPoint = "?acdbSetDbmod@@YAJPAVAcDbDatabase@@J@Z")]
private static extern Int32 acdbSetDbmod19(IntPtr db, Int32 newDbMod);
public static Int32 acdbSetDbmod(ref Database db, Int32 newDbMod)
{
switch (Autodesk.AutoCAD.ApplicationServices.Application.Version.Major)
{
case 16: return acdbSetDbmod16(db.UnmanagedObject, newDbMod);
case 17: return acdbSetDbmod17(db.UnmanagedObject, newDbMod);
case 18: return acdbSetDbmod18(db.UnmanagedObject, newDbMod);
case 19: return acdbSetDbmod19(db.UnmanagedObject, newDbMod);
default: return (Int32)ErrorStatus.NotImplementedYet;
}
}
//--------------------------------------
// Clear DbMod for Active document
// Очистка DBMOD для активного документа
//--------------------------------------
[CommandMethod("ClearCurDbMod")]
static public void ClearCurDbMod()
{
Database db = Application.DocumentManager.MdiActiveDocument.Database;
acdbSetDbmod(ref db, 0);
}
//--------------------------------------
// Clear DbMod for All opened documents
// Очистка DBMOD для всех документов
//--------------------------------------
[CommandMethod("ClearAllDbMod")]
static public void ClearAllDbMod()
{
foreach (Document doc in Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager)
{
Database db = doc.Database;
acdbSetDbmod(ref db, 0);
}
}
};
}
This code is only for x86 AutoCAD. x64 is different with EntryPoint string:
EntryPoint = "?acdbSetDbmod@@YAJPEAVAcDbDatabase@@J@Z"
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
