dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Автоматическая загрузка dll-файла посредством Acaddoc.lsp

Автоматическая загрузка dll-файла посредством Acaddoc.lsp

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 27.10.2009, 12:01
Автоматическая загрузка dll-файла посредством Acaddoc.lsp
hwd
 
C, C++, C#
 
С-Пб.
Регистрация: 07.10.2009
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™

hwd вне форума Вставить имя

На сервере, в некотором каталоге "//aaa/bbb/ccc/ddd/eee/AcadLibs/" разместил файл Acaddoc.lsp со следующим содержимым:
Код:
[Выделить все]
;;;Исключаю возможность перезаписи метода S::STARTUP...
(setq S::STARTUP (append S::STARTUP HwdStartup))

(defun-q HwdStartup()
(princ "\nПроверка связи...")
(command "AcadLayoutsCountLoad")
)
;;;Подгружаю .Net библиотеку...
(defun c:AcadLayoutsCountLoad()
  (setq echo (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq fd (getvar "filedia"))
  (setvar "filedia" 0)
  (command "netload" "//aaa/bbb/ccc/ddd/eee/AcadLibs/AcadLayoutsCount.dll")
  (setvar "filedia" fd)
  (setvar "cmdecho" echo)
)
В диалоговом окне Options, на вкладке Files добавил путь "//aaa/bbb/ccc/ddd/eee/AcadLibs" и установил его первой строчкой.
Однако получаю две проблемы:
1. Не происходит автоматической загрузки файла Acaddoc.lsp, несмотря на то, что каталог поиска добавлен.
2. Не удаётся загрузить .Net библиотеку из командной строки. Даже если вручную установлю "filedia" в 0 и выполню команду netload, указав путь "//aaa/bbb/ccc/ddd/eee/AcadLibs/AcadLayoutsCount.dll" или же "//aaa/bbb/ccc/ddd/eee/AcadLibs/AcadLayoutsCount" (т.е. без расширения файла) - загрузки библиотеки не происходит.

В чем проблемы?
Просмотров: 6210
 
Непрочитано 17.03.2017, 12:01
#21
AID88


 
Регистрация: 19.10.2014
Сообщений: 14


Boxa, отсюда скачал библиотеку для создания счетчика листов в файле https://sites.google.com/site/bushma...ov-v-dwg-fajle.
Здесь как раз обсуждалось, как с помощью лиспа подключить ее в автокад.
AID88 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.03.2017, 12:19
| 1 #22
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,441


AID88, а Вас не смутила дата публикации этой библиотеки? Все таки октябрь 2011 года, это довольно давно.
Да и библиотека собрана под .NET 3.5 и автокад 2009, а Вы ее пытаетесь запустить на .NET 4.6 и акад 2017.
В общем в том виде в котором библиотека сейчас, она работать не будет, нужно пересобирать.
Boxa на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.03.2017, 12:25
#23
AID88


 
Регистрация: 19.10.2014
Сообщений: 14


Boxa, вобщем жаль=)
AID88 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.03.2017, 12:28
#24
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,441


попробуйте обратиться к автору, может он Вам поможет, он часто тут бывает.
Boxa на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.03.2017, 02:52
#25
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,133


Рискую немного зайти в оффтоп, но раз уж я знаю ответ на вопрос, в который перетекла эта тема, то отпишусь. Набросал наскоро решение на лиспе, которое вроде бы (если все правильно понял), выполняет ту же функцию. Должно работать на любой версии Автокада, но мне удалось потестировать только на 2011-й и 2015-й.
В общем, вот код:
Код:
[Выделить все]
 (if (null *SHEETS-COUNT-MOD-REAC*) 
	(setq *SHEETS-COUNT-MOD-REAC*
		(vlr-object-reactor 
			(list (setq *LAYOUTS* (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))))
			nil
			(list 
				'(:vlr-modified . sheets_count_modified)
			)
		)
	)
)

(defun sheets_count_modified (*LAYOUTS* data reac / i)
	(setq i -1)
	(vlax-for x *LAYOUTS* (setq i (1+ i)))
	(setvar "USERI1" i)
	(princ)
)
(sheets_count_modified *LAYOUTS* nil nil)
Добавляем его в автозагрузку и создаем в нужном месте поле: либо с формулой, которая указана на сайте по ссылке (%<\AcVar USERI1>%), либо в диалоговом окне создания поля по пути: Категория полей - Другое -> Имена полей - СистемнаяПеременная -> USERI1.

Теперь о том, как работает код. Он создает реактор на событие изменения семейства ЛИСТОВ. При добавлении или удалении листа (а также при открытии чертежа, если добавлен в автозагузку) он срабатывает (реагирует) и назначает указанной системной переменной значение актуального количества листов, эту переменную и подхватывает созданное поле. После обновления привычным способом поле содержит в себе цифру, соответствующую количеству листов в файле. Правда, как в коде по ссылке, не обрабатываются листы-черновики (имя которых начинается с "_"), но это несложно добавить, если понадобится.

Последний раз редактировалось skkkk, 18.03.2017 в 03:16.
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 19.03.2017, 17:27
#26
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 34,816


Только постоянным его не делай: http://adn-cis.org/use-persisten-reactors.html
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 19.03.2017, 21:49
#27
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,133


Кулик Алексей aka kpblc, спасибо за важное замечание и полезную статью.
Правильно ли я понимаю, что создав этот реактор (запустив код выше), проверив его на постоянность
Код:
[Выделить все]
(vlr-pers-p *SHEETS-COUNT-MOD-REAC*)
и получив nil, я могу быть уверен, что он непостоянный?
То есть, постоянным его надо именно сделать, а по умолчанию он живет, пока открыт файл?
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 20.03.2017, 08:41
#28
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 34,816


Я бы принудительно их делал непостоянными:
Цитата:
Determines whether a reactor is persistent

(vlr-pers-p reactor)
Arguments
reactor
A VLR object.
Return Values
The specified reactor object, if it is persistent; nil, if the reactor is transient.
Examples
Make a reactor persistent:
_$ (vlr-pers circleReactor)
#<VLR-Object-Reactor>
Verify that a reactor is persistent:
_$ (vlr-pers-p circleReactor)
#<VLR-Object-Reactor>
Change the persistent reactor to transient:
_$ (vlr-pers-release circleReactor)
#<VLR-Object-Reactor>
Verify that the reactor is no longer persistent:
_$ (vlr-pers-p circleReactor)
nil
Кода автора я не помню, увы И сказать, делал он реакторы постоянными принудительно или они "сами такие получались", не смогу
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Автоматическая загрузка dll-файла посредством Acaddoc.lsp

Инженерные консультации
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными Андрей Х. AutoCAD 24 27.05.2015 10:17
Загрузка DWG файла из БД MS Access? Trifon Программирование 6 10.02.2011 08:49
СПДС, Автоматическая загрузка при открытии файла Vildar Прочее. Программное обеспечение 11 05.09.2008 16:58
Выполнение acaddoc.lsp - частичное отображение опций команды Автокада Makswell LISP 18 26.03.2008 18:35

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||


Размещение рекламы