Когда наконец-то наступит ImplementedAlready?Вот уж не знаю. В чистом ObjectARX тоже это метод не реализован. Я не проверял, но метод DBObject.Audit вроде бы реализован, т.е. можно попробовать последовательно вызвать его для каждого объекта/примитива. Ну и альтернативный способ - вызов ActiveX/COM метода AcadDocument.AuditInfo.
А как пользоваться DBObject.Audit?Аудит можно глянуть тут (http://adn-cis.org/api-dlya-proverki-chertezha-novyij-v-autocad-2015.html) (правда это для 2015-го). Правда по ссылке используется Database.Audit. Попробуй в своём коде выполнить блокировку документа, прежде чем выполнять аудит (я не утверждаю, что это поможет, просто это первое, что приходит на ум по теме). Однако я не исключаю, что для версий более ранних, чем 2015, функционал аудита мог быть ещё не реализован, как я уже указывал в первом сообщении темы касательно Database.Audit.
У меня любой из приведённых ниже методов падает с System.AccessViolationException при запуске в шаблоне из вложения к сообщению (и на любом файле, сделанном на основе данного шаблона).На других не падает? Проанализируй на чем именно падает. Как я понял ты проверяешь только BlockTableRecord'ы.
Кстати в коде написана полная ерунда. Я когда-то не заметил эту ерунду у Андрея и она расползлась.Заметили и до сих пор молчали? Минус один вам в карму за такое! :)
Заметили и до сих пор молчали?Только что заметил, а не тогда, когда ты написал этот код и создал эту тему на форуме. Читай внимательно моё сообщение. :)
Вообще, именно такую конструкцию я видел в сообщении от 2010 годаПросто ему никто не сказал, что там написана ерунда.
http://forums.autodesk.com/t5/net/help-with-auditinfo-constructor/m-p/2744515#M20323
Жалко, caddzone.com ушел в небытие, туда Тони дал ссылку на своё решение..Решение заключалось в синхронном выполнении команд для файлов. Насколько я помню там был код через ActiveX.
Можно ли получить AcadDocument из Database, если она открыта через ReadDwgFile?Увы. Я потестировал и пришел к неутешительному результату, что это сделать нельзя:
Мне кажется странным, что есть опция для создания Database с попутным созданием документа и при этом документ найти нельзя.А где вы видите эту опцию, если не секрет?
doc у меня возвращает текущий чертеж и соотвественно Audit выполняется для него.Но ведь именно это поведение и обозначено в документации... Какой ответ ожидаете от ADN?
[MarshalAs(UnmanagedType.U1)][MarshalAs(UnmanagedType.U1)] bool noDocument System.Boolean specifying whether or not to associate this database to the current document
Под "empty object" я понимаю пустую Database.
[MarshalAs(UnmanagedType.U1)] bool buildDefaultDrawing - System.Boolean specifying whether or not to build an empty object
Is there a way of extracting information after the Audit run (i.e. number of errors found, number fixed, etc)?Shalom Alex! What about asking in Russian? ;)
I am on A2012, so database.audit() is not available.
About Asking what in Russian?Hi Alexander
About Asking what in Russian?Hi Alexander! Sorry, despite my name I don't speak Russian. So, to use your site I have to translate back and forth between Russian and English, but it's worth the effort.
Hi Alexander! Sorry, despite my name I don't speak Russian.Sorry.
About the Audit output: one can also redirect the output to a log file and then parse it. I think I also saw a method of subclassing the text window written in C#, but I can't find it.To use sample C++ (with using AcDbHostApplicationServices) a lot easier.
To use sample C ++What sample are you referring to?
BTW, I am using Google Chrome Translate and the english text I write displays OK only when I choose to show the page in original, otherwise it changes the words' order, capitalizes some of them, etc. I hope you can understand me despite Goggle's interference.In my opinion, the Google Translate translates worse than http://www.translate.ru/#!/Computer/ Therefore I prefer to use http://www.translate.ru/#!/Computer/
What sample are you referring to?http://adndevblog.typepad.com/autocad/2012/09/trapping-the-output-from-the-autocad-text-screen-command-prompt.html
There is only one way is hack commandline output and read it. As I know it is possible only with ObjectARX:
Trapping The Output From The AutoCAD Text Screen / Command Prompt (http://adndevblog.typepad.com/autocad/2012/09/trapping-the-output-from-the-autocad-text-screen-command-prompt.html)
AutoCAD makes an assumption about its standard host application services object - it will cast the pointer to a non-published, derived class. It is therefore a matter of only replacing the
object as long as is absolutely necessary.
This approach has also not been thoroughly tested for all commands; therefore, it should be used with caution and will need more complete testing on commands not tested by this sample.
Philippe LeefsmaЯ не собираюсь с ним спорить. Переключение на Custom AcDbHostApplicationServices будет делаться только на время команды Audit.
Я не собираюсь с ним спорить. Переключение на Custom AcDbHostApplicationServices будет делаться только на время команды Audit.Я не о споре. Где гарантия того, что во время работы Audit, внутри API самого AutoCAD не произойдёт (в той или иной ситуации) попытка обращения к тому самому non-published, derived class? Если я верно понял Philippe Leefsma - таких гарантий как раз и нет... Т.е. это как подбрасывание монетки: в одном случае всё может пройти успешно (попытка обращения не производилась), а в другом (попытка обращения имеется) - накрыть медным тазом AutoCAD.
There is only one way is hack commandline output and read it. As I know it is possible only with ObjectARX:Вряд ли возможность воспользоваться наследованием, и так разрешённым в ObjectARX, с последующим вызовом штатной функции acdbSetHostApplicationServices стоит называть хаком :) Вот если бы был продемонстрирован способ решения через хуки - тогда да (причём такой пример было бы даже очень интересно почитать)...
Trapping The Output From The AutoCAD Text Screen / Command Prompt
Вот если бы был продемонстрирован способ решения через хуки - тогда да (причём такой пример было бы даже очень интересно почитать)Зачем хуки в данном случае? Тем более что окно CommandLine может быть вообще закрыто, так что "хукать" будет нечего. Можно просто перед _Audit сделать _LogFileOn, после _Audit сделать _LogFileOff и прочитать log-файл. Самый простой способ.
окно CommandLine может быть вообще закрыто, так что "хукать" будет нечегоЯ предполагал, что обозначенное окно связано с некоторым потоком (stream), в следствии чего работать было бы целесообразней именно с потоком, а не с окошком. А операции, обозначенные Филипом воспринимал как обёртки над штатными функциями записи в поток.
Можно просто перед _Audit сделать _LogFileOn, после _Audit сделать _LogFileOff и прочитать log-файл. Самый простой способ.Можно.
А операции, обозначенные Филипом воспринимал как обёртки над штатными функциями записи в поток.Вот этот поток только так (через AcDbHostApplicationServices) и можно хукать.