Использование реакторов в AutoCAD Javascript API
Вам необходимо прочитать статью о введении в Javascript API для AutoCAD. Это небольшой пример, демонстрирующий использование реакторов. В этом примере мы будем включать/выключать реактор ObjectModified для выбранного примитива.
Чтобы попробовать скопируйте код и сохраните его в файл с расширением .js (javascript). Запустите AutoCAD 2014 и выполните команду "WEBLOAD" указав ей наш .js файл. Выполните команду "STARTMONITOR" и выберите примитив. Мы подписались на событие "ObjectModified" и изменения примитива будут приводить к вызову функции обратного вызова с именем "onObjectModified". Чтобы отписаться от события, запустите команду "ENDMONITOR" и выберите тот же самый примитив.
Вот js код :
- var observedEntities = new Acad.OSet();
- function onObjectModified(eventname, args)
- {
- var entity = new Acad.DBEntity(args.id);
- write("Объект модифицирован: " + args.id);
- }
- function onCompleteCallback1(jsonPromptResult)
- {
- var resultObj = JSON.parse(jsonPromptResult);
- if (resultObj)
- {
- if (resultObj.status == 5100)
- {
- observedEntities.add(resultObj.objectId);
- Acad.Application.activedocument.startObserving(
- observedEntities,
- Acad.Application.activedocument.eventname.modified,
- onObjectModified);
- }
- }
- }
- function onErrorCallback1(jsonPromptResult)
- {
- var resultObj = JSON.parse(jsonPromptResult);
- if (resultObj)
- {
- write("Ошибка!");
- }
- }
- function StartMonitorFunction()
- {
- try
- {
- var peo = new Acad.PromptEntityOptions();
- peo.setMessageAndKeywords("\nВыберите примитив: ", "");
- peo.rejectMessage = "\nНеправильный выбор...";
- peo.singlePickInSpace = true;
- peo.allowObjectOnLockedLayer = true;
- Acad.Editor.getEntity(peo).then(onCompleteCallback1,
- onErrorCallback1);
- }
- catch (e)
- {
- write(e.message);
- }
- }
- function onCompleteCallback2(jsonPromptResult)
- {
- var resultObj = JSON.parse(jsonPromptResult);
- if (resultObj)
- {
- if (resultObj.status == 5100)
- {
- observedEntities.remove(resultObj.objectId);
- var observedEntities1 = new Acad.OSet();
- observedEntities1.add(resultObj.objectId);
- Acad.Application.activedocument.stopObserving(
- observedEntities1,
- Acad.Application.activedocument.eventname.modified,
- onObjectModified);
- }
- }
- }
- function onErrorCallback2(jsonPromptResult)
- {
- var resultObj = JSON.parse(jsonPromptResult);
- if (resultObj) {
- write("Ошибка");
- }
- }
- function EndMonitorFunction()
- {
- try
- {
- var peo = new Acad.PromptEntityOptions();
- peo.setMessageAndKeywords("\nВыберите примитив: ", "");
- peo.rejectMessage = "\nНеправильный выбор...";
- peo.singlePickInSpace = true;
- peo.allowObjectOnLockedLayer = true;
- Acad.Editor.getEntity(peo).then(onCompleteCallback2,
- onErrorCallback2);
- }
- catch (e)
- {
- write(e.message);
- }
- }
- Acad.Editor.addCommand("REACTOR_CMDS",
- "STARTMONITOR",
- "STARTMONITOR",
- Acad.CommandFlag.TRANSPARENT,
- StartMonitorFunction);
- Acad.Editor.addCommand("REACTOR_CMDS",
- "ENDMONITOR",
- "ENDMONITOR",
- Acad.CommandFlag.TRANSPARENT,
- EndMonitorFunction);
- write("\nЗарегистрированы команды StartMonitor и EndMonitor.\n");
Источник: http://adndevblog.typepad.com/autocad/2013/03/reactors-using-autocad-javascript-api.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=196
Опубликовано 02.09.2013Отредактировано 03.09.2013 в 22:12:27