|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
10.10.2010, 13:12 | #1 | |
DwgRuLispLib: Функция выполнения vla-sendCommand из другого процесса
Руководитель фирмы
Москва
Регистрация: 28.03.2007
Сообщений: 1,831
|
||
Просмотров: 21592
|
|
||||
Последний раз редактировалось Supermax, 10.10.2010 в 13:44. |
||||
|
||||
Кто спорит? Но вот незадача. Я открыл два файла (или больше) и мне надо из главного (для меня) файла, программно, и по нескольку раз переходить в те, другие файлы, там что-то делать и возвращаться назад, да еще чтобы в основном файле программа дальше шла.
С одноразовым запуском лиспа при открытии файла я проблему решил, а если надо несколько раз туда лезть? Что, каждый раз закрывать и открывать документ? Программый код, запускаемый там, в других файлах, может быть очень большой и без использования лисп-файла тут может и не обойтись, да вот запустить его через существующую vla-SendCommand не получится ни в какой версии када (до 2010 проверено). Пока vla-SendCommand работает только в активном и только для активного документа. Как запускать лисп-файлы без обращения к командной строке я увы не знаю. Может ты знаешь? В документе я хочу делать все, включая загрузку лиспа, обработку переменных, использования команд, модификацию DXF кодов и т.д. Не знаю у кого LISPINIT работает, а у меня что 0, что 1 - переменные не сохраняются при переходе в другой файл. Последний раз редактировалось Supermax, 10.10.2010 в 14:50. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Любое (подчеркиваю - любое!) создание дополнительных указателей без крайней на то необходимости грозит подвесить AutoCAD. Я уже молчу про то, что SendCommand вообще желательно использовать для 2-3 команд, не больше (типа _.-insert и _.change)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
И ето хыто мене говорыт?! Человек, который для того, чтобы сделать фактически то же самое открывает DWG файлы через ... ObjectDBX!!!
А там и то нельзя и се, утомился пока вникал. Какую-то задрипанную строчку в комстроку соседнего файла послать и такие фигуры высшего пилотажа надо делать! Я ничего не имею ни против ObjectDBX, ни против других COM, наоборот, все под себя сгребаю, но товарищи!, ведь это же такой облом с обработкой многодокументных проектов! Функция еще не совсем готова. Вот если я заставлю ее принимать аргументы как настоящая vla-SendCommand делает, то я вообще сделаю все через ScriptControl без всяких там файлов vbs. |
||||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Я как-то делал программу для bricscad очистки файлов в каталоге: создал новый экземпляр в нем все пооткрывал, почистил, сохранил и закрыл... без всяких vla-SendCommand...
Вообще-то давно уже существуют программы для запуска скриптов в нескольких файлах |
|||
|
||||
gomer, в других кадах и java работает, и коды открыты, и люди пока прислушиваются к проблемам юзеров.
А в Автокаде все пока не так. Вот взять бы и починить эту vla-SendCommand, так нет, еще лет сто будем ждать. А на net или arx никто не хочет сделать аналогичное и сюда выложить. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
"Этот человек" четко понимает: кесарю - кесарево, слесарю - слесарево. Интерактивность можно и нужно реализовывать только в текущем документе, остальное - от лукавого. Хочешь головняка? Вперед, ни мешать, ни помогать желания уже нет.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
kpblc, ты не обижайся, я ж с юмором. Твою статью читал, хвалю, правда там зарегистрироваться не вижу как. И я совсем не умоляю всякие разные другие способы. Просто меня зло взяло, что метод есть, но не пашет как надо. Из других процессов все пашет, а из собственного, родного, автокадовского - не хочет.
Я взял и подумал, а не выручит меня и на этот раз vbs и выручил. Теперь, если поколдовать с кавычками, все прекрасно работает. Цитата:
Ведь ObjectDBX не может запускать и выполнять лисп программы, я уже не говорю о командах. Цитата:
Я пробежал весь код, обеих функций там все одно задругим зацеплено, можешь проверить. Последним шагом в скрипте - установление активности в первом файле. Я целую тучу вариантов попробовал, перед тем как сюда выложить. Все просто летает! Запускаю длинный лисп, возвращаюсь назад и опять туда-же запускаюеще раз. - Как часы! Никакого головняка. А если в ScriptControl запихнуть, так еще и значения возвращать будет! Разве это не стоит внимания? |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Я имел в виду то, что, как правило, нет никакой необходимости выполнять что-либо в файле через SendCommand. То, что SendCommand надо использовать в том случае, если без него не обойтись. А также то, что SendCommand надо использовать только в текущем файле. Обилие системных переменных, дополнительных arx / dll / lsp / dvb / fas / vlx файлов может твое решение убить напрочь. Я из принципа напишу автозагружаемый лисп, который будет блокировать системную переменную SDI, всегда выставляя ее в 1. И какие будут твои действия? ObjectDBX (только что специально проверил на AutoCAD 2011 64bit) такое обрабатывает не чихнув.
А случаев необходимости использования SendCommand на самом деле 2-3, не больше. Ни одного железного аргумента в пользу такого решения я не видел. И вряд ли увижу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Вот такие вот пироги...
Цитата:
Знаешь когда надо ObjectDBX? Когда надо в модели мегов на сто что-то сделать, а она грузит видеокарту и время из-за этого жрет часы целые. Вот тут да, согласен и на частичную кастрацию командных методов и даже arx готов изучать. А когда у тебя модель и в ней штук 500 внешних ссылок, а тебе надо одну за другой открыть и спецификацию посчитать, вот тогда твой ObjectDBX тихо курит в сторонке. Хотя наверное это и есть те пару случаев. Так у меня как раз один из них. Последний раз редактировалось Supermax, 10.10.2010 в 22:10. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Доступ к палитре внешних ссылок и доступ к механизму внешних ссылок суть вещи разные. Не путай теплое с мягким.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Перевел код на использование "MSScriptControl.ScriptControl", но оказалось, что запуск "MSScriptControl.ScriptControl" со скриптом внутри в текущем документе ничего не дает. Ход выполнения скрипта внутри "MSScriptControl.ScriptControl" также прерывается на обращении SendCommand и аргумент этого метода попадает в командную строку другого документа только при втором обращении, а аргумент второго обращения при третьем и т.д.
Сделал вывод - "MSScriptControl.ScriptControl" должен работать в другом процессе (естественно дочернем). Осталось понять как его туда впихнуть не трогая винчестер, то-есть не делая файлов vbs? |
||||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DwgRuLispLib: Функция открытия диалога Open\Save As файла (файлов) | Supermax | Библиотека функций | 20 | 14.03.2018 10:05 |
DwgRuLispLib: Функция поиска в списке строки по маске | Supermax | Библиотека функций | 1 | 14.01.2008 01:58 |