Запись параметров вставки внешней ссылки в саму внешнюю ссылку.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Запись параметров вставки внешней ссылки в саму внешнюю ссылку.

Запись параметров вставки внешней ссылки в саму внешнюю ссылку.

Ответ
Поиск в этой теме
Непрочитано 12.12.2007, 13:47 #1
Запись параметров вставки внешней ссылки в саму внешнюю ссылку.
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

У меня есть такая задача:
Есть модель и в нее вставлена внешняя ссылка и пару раз скопирована под другим углом. Мне надо выбрать все параметры вставки этой внешней ссылки, чтобы потом вставить эту ссылку в чистый файл автоматически так же как она вставлена в моем файле.
Эти параметры мне надо поместить в какой-нибудь дополнительный словарь, или расширенные данные файла самой внешней ссылки.
Включаю макрос, он опрашивает нужные мне файлы и автоматом их вставляет в текущий файл.
В результате, я имею ситуацию, когда модель собирается из комплекта файлов до кучи сама.
Просмотров: 18498
 
Непрочитано 12.12.2007, 14:22
#2
maksimys

генплана нет
 
Регистрация: 15.08.2007
spb
Сообщений: 305


так и вставь её - не копию файла - а dwg v dwg (если это автокад)
Я так написано - голову сломаешь... Лучше описать сами обьекты которые вставляешь или ссылаешься или еще что.
Схему в студию, а там видно будет.
maksimys вне форума  
 
Автор темы   Непрочитано 12.12.2007, 15:07
#3
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Попробую разжевать:
Параметры вставки внешней ссылки, то есть координаты, масштаб, углы поворота и пр. обычно хранятся в том файле, куда она вставлена. А я хочу эти данные вычленить и скопировать в служебное пространство файла самой внешней ссылки. Что тут не понятного? Хочу сделать макрос, который это туда запихивает, а потом от туда читает и совершает процесс вставки внешней ссылки в файл, но с уже известными параметрами, а не вручную.

Открываешь чистый файл, запускаешь макрос, указываешь какой файл вставить и он, если нашел там запись - вставляет этот файл как внешнюю ссылку в текущее пространство модели.
Если собрать модель только из внешних ссылок, переписать во все эти файлы их же собственные координаты вставки и повороты, а потом в чистом файле запустить макрос, то мы опять соберем модель в единое целое.
Можно не все файлы собирать, а только некоторые. Будем иметь частично собранную модель там, где нам надо.

У меня модель 200 с лишним ссылок, мне чтобы скопировать все это в новый файл, надо системный блок в холодильник ставить. А так я потихоньку могу и целый микрорайон смоделировать до винтика.
Supermax вне форума  
 
Автор темы   Непрочитано 12.12.2007, 18:57
#4
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Народ как-то вяло реагирует на это весьма многообещающее действо. А ведь я только вершину пирамиды обрисовал, так сказать основные моменты, а дальше последует привязка модели к квадратам геоподосновы, привязка к осям здания, привязка координат геоподосновы к геодэзической сети города и все это для того, чтобы можно было построить модель до бесконечности, но одновременно не перегружать проектировщика.
Сделал модель теплового пункта - привяжи модель к осям здания. Привязка эта подразумевает положение теплопункта в пространстве модели здания, куда тепловой пункт входит как внешняя ссылка, а само здание привязано к крестам геоподосновы в файле плана участка строительства, а сами кресты имеют конкретное отношение к плану города и т.д.

Вот еще поболтаю:
Допустим я архитектор. У меня есть модель каркаса дома. У нее (у модели) есть оси и высотные отметки, которые на отметке 0,000 и пересечение оси 1 с А образуют точку в 0,0,0 модели. Это вообще-то должен быть закон такой. Если тот, кто проектирует теплопункт знает этот факт и может с помощью макроса установить в своем файле данные соответствующие положению теплопункта в модели дома, то я, вставляя такой файл автоматом, сразу получу его на том месте, где его спроектировали и со вставкой мучаться не буду.
Мне приносят файлы и они самовставляются в общую модель. Ну разве это не круто?
Supermax вне форума  
 
Непрочитано 12.12.2007, 19:34
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Круто!
Profan вне форума  
 
Непрочитано 12.12.2007, 19:44
#6
Кулик Алексей aka kpblc
Moderator

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


ADT и никаких гвоздей Ну или Revit - но тогда никаких шурупов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.12.2007, 19:57
#7
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну, с ADT надо подружится однозначно. Все Арх и текторы ее любят и ценят, но это же тоже только навороченный кад и ссылки там вставлять тоже можно.
Речь ведь о самовставлении.

Вот очень часто, если работаешь с файлом непрерывно, в нем накапливается какая-то гадость, что никакими аудитами не вычисляется. Стоит только все скопировать в новый файл и усе становится на рельсы. А когда в файле немеряно всего соединили в кучу - скопировать без пяти-шести фатал-егоров не получается, да и к скопированному уже нет доверия.

К ссылке ведь идет обращение один раз - при генерации модели. Она лежит и есть не просит и если в ней лежат ее координаты вставки, то и ладушки.

Нет сборочного файла вообще, вы это понимаете? Это же прорыв в моделировании. Все кусочками, но каждый кусочек знает свой шесточек. И делов-то найти параметры вставки, проанализировать их и понять, как их можно смоделировать для вставки автоматом.
Supermax вне форума  
 
Непрочитано 12.12.2007, 22:33
#8
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Да, с помощью автомата можно многое смоделировать. IMHO.
Profan вне форума  
 
Непрочитано 13.12.2007, 07:27
#9
Andr-NL

Лестницы, мебель, интерьер
 
Регистрация: 13.12.2007
Екатеринбург
Сообщений: 4
<phrase 1=


2 Supermax: Так ведь вставляемый элемент может использоваться где-то и в другой сборке с другими параметрами вставки
Andr-NL вне форума  
 
Непрочитано 13.12.2007, 09:24
#10
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Надо еще предусмотреть динамическую параметризацию с обратной связью.
Profan вне форума  
 
Автор темы   Непрочитано 13.12.2007, 13:05
#11
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вот есть у вас файл, который вы вставили как внешнюю ссылку в другой файл, точнее в этот файл поместили параметры вставки в другой файл. В него можно напихать в словари тысячи параметров вставки в разные, даже именованные файлы. Создаете файл, делаете ему заранее выбранное имя и в него ссылки вставляются так, как запланировано.

Имена файлов и условности с привязкой создаются самими пользователями, главное обеспечить для этого инструментарий.
Supermax вне форума  
 
Автор темы   Непрочитано 20.12.2007, 17:50
#12
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Еще раз обращаю внимание форумчан на данный вопрос.

Если знать, как оси здания расположены по отношению к X, Y, Z пространства модели, где это здание собирается, то внешние ссылки, из которых и состоит модель этого здания можно заранее снабжать данными для их автоматической вставки в модель.

Надо сделать макрос, генерирующий такие данные и макрос читающий их с последующим вставлением нужного файла в нужное место сборочного файла.
Можно сделать макрос переписывающий данные с уже вставленной ссылки и запихивающий ей, эти самые данные.

Испортился сборочный файл - не беда. Открыл чистый и собрал всю модель автоматически.
Supermax вне форума  
 
Непрочитано 20.12.2007, 20:57
#13
Кулик Алексей aka kpblc
Moderator

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


ADT, Project Manager. По крайней мере для этой задачи.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.12.2007, 21:07
#14
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вот живой, свежий пример:
У меня модель дома, ну очень подробная. более 200 файлов внешних ссылок. Я естественно все не кручу и даже то, что вижу - подрезаю Xref-ом, а тут один ряд надо было переименовать. Есть у меня такой макрос от Kpblc-a, ну о-очень классный. Я взял и переименовал один ряд не выключая подрезки и ...
Все переименовалось, правда ряд стал виден весь, без подреза, но не это самое главное. Когда я выключил подрез, то те ссылки, которые полностью попали в зону затенения включаться отказались. Слава аллаху я перед этим эксперементом сейвился. Файлец я сохранил под другим именем и если кто хочет, могу выложить его и те файлы ссылок, что не хотят высвечиваться.

Если бы у меня в ссылках были данные их вставки - заново бы все пересобрал в чистом файле и вся песня.
Supermax вне форума  
 
Непрочитано 20.12.2007, 21:19
#15
Кулик Алексей aka kpblc
Moderator

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


Лично у меня сейчас шансов нуль принять участие (максимум, на что способен - созерцание). Если хочешь, попробуй сделать все это в ADT. Там сборочный файл создается за 10 секунд. Правда, при условии, что подготовительная работа выполнена верно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.12.2007, 21:32
#16
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, ты либо читаешь мои опусы под конец дня, когда голова как переполненная мусорная корзина, либо я думать и писать стал на языке, который только сам и понимаю.

Какой ADT? Какой Project Manager? Как можно собрать модель, если в файлах внешних ссылок нет данных для их вставки, а сборочный файл умер!!! И баки его умерли!!! и sv$ умерли!!! Точнее, что еще хуже - они не умерли, а в основном файле случился кризис, который плавно перескочил в sv$, а бак - старый и в нем нет нужных ссылок, и в него влезла кака. Ссылок на том месте, на котором они должны быть нет. Откат короче обломился. Дня на два.

Представляешь, вставил пару ссылок в чистый файл, поковырял их, и файл этот убил. Зачем он нужен?
В новом файле новую часть конструкции собрал, сделал все что надо с ней и готово.

Я пока загружается модель, где 2\3 ссылок не введены - успеваю кофе налить. Они все равно все грузятся, хотя все Unload. От перечня введенных и не введенных ссылок рябит в глазах.

Поверь, я правильную штуку придумал. Делов-то вставить ссылку в файл, да хоть в 0,0,0 и переписать ей координаты вставки, которые прочесть из нее же.
Supermax вне форума  
 
Непрочитано 21.12.2007, 00:23
#17
Кулик Алексей aka kpblc
Moderator

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


В сам файл внешней ссылки пытаться записывать такое положение - бессмыслица ИМХО. Надо записывать внутрь ini-подобного файла, откуда потом и читать (кстати, ADT живет по аналогичному принципу, но там наворотов намного больше). Если сырость библиотеки не пугает, то можешь попробовать lsp, что в аттаче
Архив обязательно предварительно загрузить!
---
Добавлено: Код особо не гонял.
---
Добавлено 2: И тишина...
Вложения
Тип файла: lsp xref-and-ini.LSP (7.0 Кб, 134 просмотров)
Тип файла: rar dwgru-lib_2007-12-21[00.12.35].rar (25.4 Кб, 128 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 21.12.2007 в 11:55.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.12.2007, 13:09
#18
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ты не надейся, тишины не будет. Спасибо за библиотеку (2-ю по счету) и за лисп. Я как только на каникулы уйду - ими воспользуюсь в полную меру. В смысле покурочу и приспособлю.
А пока я буду крушить твое предложение по поводу ini.
Да, ini более защищен от всяких случайностей, но кто его должен создавать? Если на каждую внешнюю ссылку по 1 ini - я согласен, а если один ini на всю модель - никогда!

Есть рабочее место, где стоит комп и в нем макрос, собирающий модель. Никаких ini там нет. На это рабочее место из разных источников поступают локальные файлы и файлы ini к ним. Макрос их читает и собирает модель. Можно сделать сборку ini файлов в кучу, а потом уже сборку модели. Но только так и не иначе должна собираться модель.

Я еще не смотрел твой ini генератор, поэтому мои высказывания считай как реплика в ответ на твои высказывания.

Поскольку в строительстве все взаимосвязано, то положение одного тела в пространстве другого всегда можно точно предопределить не вставляя это тело туда практически. Если при сборке элементы не будут совпадать точно, то это говорит, что что-то не так и это тоже польза.

Я скоро подробнее посмотрю твой лисп и отпишусь.
Supermax вне форума  
 
Автор темы   Непрочитано 04.01.2008, 18:04
#19
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Если каждый файл внешних ссылок имеет свой ini файл, то это решает проблему переноса модели с компа на комп. У меня модель (повторюсь в 100-й раз) больше 200 файлов внешних ссылок. Если перенести этот файл на другой комп, я даже не представляю ту работу, которую надо будет проделать для того, чтобы согласовать новые пути. А если модель будет самособирающаяся, то тогда путь к файлу внешней ссылки - временная информация.

Жду не дождусь, когда освобожусь и займусь этим.
Supermax вне форума  
 
Автор темы   Непрочитано 04.01.2008, 18:58
#20
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, погонял макрос, который ini создает и по нему вставляет ссылки в новый файл.
Файл создался, только Angle= пустой и наверно поэтому ругается.
Цитата:
Command: (c:restore-xref)
; error: ActiveX Server returned an error: Параметр является обязательным
Посмотри что с этим углом, пожалуйста!
Вложения
Тип файла: rar Модель1-6-8.rar (400 байт, 119 просмотров)
Supermax вне форума  
 
Непрочитано 04.01.2008, 21:34
#21
Кулик Алексей aka kpblc
Moderator

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


Код изменил, прогнал на пустом файле, 10 внешних ссылок, вроде сработало корректно. Файл переименовал, но команды "как были". DwgRuLispLib все так же требуется.
Вложения
Тип файла: lsp xref-and-ini2.LSP (7.2 Кб, 119 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.01.2008, 14:01
#22
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Все заработало, но "почти".
Ошибка в формировании 210 dxf кода.
Вставь в ini файл строку с этим кодом!
Изначально у меня в ссылке (210 0.0 -1.0 0.0), а когда создаю новую модель становится (210 0.0 0.0 1.0).
Аналогичная фигня и в макросе, что внешнюю ссылку копирует как "сохранить как".
Вручную меняю 210 код на старое значение и становится все на свои места.
Supermax вне форума  
 
Автор темы   Непрочитано 05.01.2008, 14:19
#23
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


И в 10-м коде тоже путаница
Изначально (10 17293.5 5752.4 -3134.4)
Во вновь созданном (10 17293.5 3134.4 5752.4)
Supermax вне форума  
 
Непрочитано 05.01.2008, 14:25
#24
Кулик Алексей aka kpblc
Moderator

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


А если так?
P.S. Предупреждаю: я коды не тестирую!
Вложения
Тип файла: lsp xref-and-ini3.LSP (7.7 Кб, 121 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.01.2008, 14:46
#25
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вот это - другое дело!!!
Все стало как надо.

Теперь о путях:
Ты вставил в ini файл пути к файлам внешних ссылок и этим угробил возможность переноса модели на другой комп.
Если ini файл лежит тамже, где и сам dwg файл, то путь к dwg файлам ссылок определяется месторасположением ini файла. Так?
Поскольку ты сделал один ini на все ссылки, то прийдется держать все ссылки в одной папке (что у меня и имеет место быть). Если у каждого файла dwg, являющегося внешней ссылкой будет свой ini, то ссылки можно будет держать в разных папках. Склеить выбранные ini в один - дело двух строк на лиспе, даже одной команды. Имя ini файла должно в точности совпадать с именем файла dwg к которому этот ini принадлежит.

Убери пути!
Supermax вне форума  
 
Непрочитано 05.01.2008, 14:59
#26
Кулик Алексей aka kpblc
Moderator

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


Не уберу. Как иначе будешь искать ссылки?
Можно, конечно, попытаться обрабатывать относительные пути, но сейчас на это меня точно не хватит.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.01.2008, 15:19
#27
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Есть два пути развития данной темы.
Первый - сделать специальное окно DСL и через него выбирать ссылки и более гиморно для пользователя, но менее трудоемко для программиста - через ком. строку.
Вот смотри:
Запускаем (c:restore-xref), просит выбрать один из трех параметров "всю папку", "отдельный файл" или "далее".

Если выбрать "всю папку", то выскочит окно для указания папки, в которой лежат ссылки и ini файл к ним (или к каждому из них). После выбора все ini файлы в этой папке будут прочитаны и склеены в один (в смысле в памяти компа, а не в файл).

Если выбрать "отдельный файл", то попросит указать файл. После выбора к уже имеющимся записям добавится считанное из этого файла. Впрочем как и "всю папку", так и "отдельный файл" могут запускаться в любой очередности.

Каждый раз, как сделан выбор в бесконечном цикле, прерываемом только либо Esc либо "далее" предлагается выбрать еще раз и еще раз.

Если выбрать далее, то все выбранные файлы будут обработаны.

Ну, в принципе, теперь и любой продвинутый юзер может дописать твой лисп. Даже я. Если я допишу, то обязательно сюда выложу. Если ты не возражаешь конечно.

SaveAsXref починишь?, а то я заколебался все из плана делать.

Последний раз редактировалось Supermax, 05.01.2008 в 15:32.
Supermax вне форума  
 
Автор темы   Непрочитано 05.01.2008, 17:31
#28
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вот полезную весч узрел
Код:
[Выделить все]
(defun BrowseFolder ( / ShlObj Folder FldObj OutVal)
  (vl-load-com)
  (setq
    ShlObj (vla-getInterfaceObject
       (vlax-get-acad-object)
       "Shell.Application"
     )
    Folder (vlax-invoke-method ShlObj 'BrowseForFolder 0 "" 0)
  )
  (vlax-release-object ShlObj)
  (if Folder
    (progn
      (setq
  FldObj (vlax-get-property Folder 'Self)
  OutVal (vlax-get-property FldObj 'Path)
      )
      (vlax-release-object Folder)
      (vlax-release-object FldObj)
      OutVal
    )
  )
)
;(BrowseFolder)
Код от сюда — http://discussion.autodesk.com
А я взял от сюда: - http://www.caduser.ru/cgi-bin/f1/board.cgi?t=20220eg

Это в плане открытия папки и получения ее адреса.
Код:
[Выделить все]
(vl-directory-files (BrowseFolder) "*.ini" 1)
Выведет список всех ini в указанной папке.

Последний раз редактировалось Supermax, 05.01.2008 в 17:42.
Supermax вне форума  
 
Непрочитано 05.01.2008, 20:19
#29
Кулик Алексей aka kpblc
Moderator

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


Этой "весчи" сто лет в обед, посмотри в dwgrulisplib - там есть это дело. Вдобавок немного расширенное.
SaveAsXRef - это откуда? Напомни исходник и тему, а то я не помню навскидку.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.01.2008, 13:16
#30
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Это ты это имел в виду?
Код:
[Выделить все]
(dwgru-browsefolder title show-files)
А почему нет тела самой функции, или темы на сайте с этим телом? Чтобы нельзя было функцию отдельно от библиотеки использовать? Я помнится, предлагал не давать lsp вместе с fas, но я не говорил, что вообще исходники не давать. Может политика поменялась?

Ладно, я в теме про библиотеку функций напишу свое "фе".


Вопрос 2 - http://forum.abok.ru/index.php?showtopic=14612&st=460

пост#461 и 440, 472 и мой ответ на него # 468 и 470

а проще...
Вложения
Тип файла: lsp _kpblc_save_as_xref.lsp (3.5 Кб, 99 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 06.01.2008, 18:48
#31
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, ты часом не знаешь, что это за файлы?
http://cl-debian.alioth.debian.org/r...cl-ansi-tests/
Supermax вне форума  
 
Непрочитано 06.01.2008, 18:50
#32
Кулик Алексей aka kpblc
Moderator

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


Я тебя предупреждал, что библа сырая? Я предупреждал, что справка, мягко говоря, не полная?
Предупреждал. Так что
Цитата:
А почему нет тела самой функции, или темы на сайте с этим телом?
не принимается Ну нету у меня времени корректно все прописывать! Даже на выходных (жена с дитем в больницу загремели 2-го числа).

Цитата:
Сообщение от Supermax Посмотреть сообщение
Kpblc, ты часом не знаешь, что это за файлы?
http://cl-debian.alioth.debian.org/r...cl-ansi-tests/
Цитата:
Сообщение от readme
This directory contains a partial Common Lisp standards compliance test suite.
Выделение мое.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.01.2008, 15:01
#33
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


И так, что мы имеем на данный момент? Макрос, который может сохранить в файл с расширением ini координаты и другие параметры вставки конкретного вхождения файла внешней ссылки и по записи в этом файле воспроизвести данное вхождение в другом файле.
Если я указываю на одну только внешнюю ссылку, то и ini получаю для нее, если я указываю сразу несколько файлов, то и ini получается на несколько файлов. Замечательно!
Раньше я предполагал, что имя у ini файла должно совпадать с именем dwg файла и описывать только одно вхождение именно этого, конкретного dwg файла. Теперь я так не думаю. Теперь имя ini файла может быть любым, а имя описываемого вхождения делается так, как ты и создал.
Только путь убери!!!! Ini лежит в той же директории, что и dwg. От куда загрузил ini, там же и ищи dwg. Если оставить только имя dwg файла, то можно будет переносить ссылки из директории в директорию и на другие компы не задумываясь.

ОЧЕНЬ ВАЖНО!!

Я просек, что если в директории, как у меня лежит слишком много файлов, то не только кад тормозить начинает безбожно, даже винда кряхтит и стонет, пока откроет эту папку. Хочу отсортировать свои ссылки по папкам, а не могу. В том виде, как есть мне надо выделять именно те ссылки, что хочу в другую папку переложить, а как? 230 штук попробуй на модели разберись, какую куда. В папке – другое дело. Они по именам сильно отличаются (группа от группы), а в группе – только номером. Обвел все и перекинул в другую папку. И ini я также бы перекинул.

Я не предлагаю отказаться от группового описания вхождения, я предлагаю создать выбор. По умолчанию – как сейчас, но если мне надо на каждый файл свой ini то создается куча ini с именами как у dwg (так лучше чем номера лепить, хотя и номера можно).
Также надо обрабатывать не один ini как сейчас это делается, а сразу все в выбранной директории или все выбранные в ручную.

Я очень надеюсь, что эта программа ляжет в библиотеку. Мне лично фиолетово, будет развиваться в кад сообществе направление по моделированию «без границ» или нет. Я не идиот себе конкурентов растить, но я в одиночку не могу создать нормы проектирования и утвердить в мозгах заказчиков убеждение, что моделирование – это не обсуждаемая потребность любого сложного и ответственного действа. Чем меньше трудностей испытывают проектировщики при моделировании сложных объектов, тем громче слышны их голоса в поддержку моделирования, как источника сведений о затратах на производство, и это мне на руку.

Далее:
Как ты знаешь, если выбирать dwg файл, то имеется возможность просмотра его образа в виде растровой картинки в правой стороне окна выбора. Если выбирать ini – то такой возможности нет. В случае, если надо вставить только один dwg, то можно в принципе предлагать выбрать dwg, а потом меняя расширение на ini загружать этот dwg по ini файлу.

Основываясь на новом мировоззрении предлагаю:

Функцию c:save-xref дополнить следующими процедурами:

1. Выбор через командную строку «Создавать ini для Всех/для Каждого» <В>:
Если для каждого, то не предлагается указать имя ini файла, а он автоматически пишется в туже директорию, что и dwg и с тем же именем. В случае группового описания (или описывания) имя и расположение ini файла указывается как сейчас это делается.
2. При выборе dwg файла (файлов) добавить возможность «выбрать Все/ все Абсолютно/ в Ручную <Р>:
Выбрать Все – Это имеется в виду те ссылки, что мы видим и можем «потрогать».
Выбрать все Абсолютно – это включая и те, что Unload и те, что на заморозке.

Функцию c:restore-xref дополнить следующими процедурами:
1. Как я уже писал ранее – «выбрать все в указанной Папке/Выборочно» <В>:
2. Если «Выборочно», то – «по Dwg/Ini» <I>:

Правда я так и не нашел, где можно почитать более широко о методах применяемых к не AutoCAD-овским объектам, но из под AutoCAD-a.
Описание метода BrowseForFolder я нашел, но что есть еще – увы, не знаю.

BrowseForFile мелькает то там, то сям, но добраться до него как следует не получается.
Все, что я нашел путного – это http://allo.usaaa.ru/workshop/sample...ns/sysfuns.htm

Может тебе извесно что-нибудь о выборе файлов черех ActiveX?
Supermax вне форума  
 
Автор темы   Непрочитано 08.01.2008, 16:30
#34
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Нашел по Shell.Application
http://www.script-coding.info/WSH/Shell.html#1.
Supermax вне форума  
 
Автор темы   Непрочитано 09.01.2008, 21:17
#35
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


И так, вот что у меня получилось:
Я взял allosys.dll вот от сюда:
http://allo.usaaa.ru/workshop/sample...ns/sysfuns.htm
которая содержит всего две системные функции BrowseForFile и BrowseForFolder, но улучшенные по сравнению с Shell.Application. В частности BrowseForFile там вообще нет, а BrowseForFolder "слегка" коряв.

Создать СОМ объект навсегда у меня не получилось, поскольку в VBA я не силен, а временно с помощью VBA создается.

dll-ку положил в system32 папки windows, зарегистрировал, для чего через меню пуск\выполнить запустил "regsvr32 allosys.dll" (без ковычек)

положил макрос VBA alloObj.dvb в папку для макросов, к которой у меня уже есть путь

и запуская лисп получаю список, состоящий из строк с полным путем к каждому файлу (множественный выбор).

Вот тело самого VBA макроса:
Код:
[Выделить все]
Sub setobj()
Call so
End Sub
____________________________________________
Private Sub so()
Dim Obj As Object
Set Obj = CreateObject("ALLO.SystemFunctions")

End Sub
Вот тело лиспа:
Код:
[Выделить все]
(vl-load-com)
(vl-vbarun "alloObj.dvb!Module1.setobj")
(defun dwgru-browseforfile ( toggle title initDir filter flags x y / AlloObj File strnamb list1)
  (setq AlloObj (vla-getInterfaceObject (vlax-get-acad-object) "ALLO.SystemFunctions"))
  (setq File (vlax-variant-value (vlax-invoke-method AlloObj 'BrowseForFile toggle title initDir filter flags x y)))
  (setq strnamb 0)
  (setq list2 nil)
  (while (vl-string-position 124 file strnamb)
  (setq list1 (list (substr file (+ 1 strnamb) (- (setq strnamb1(vl-string-position 124 file strnamb)) strnamb))))
  (setq strnamb (+ 1 strnamb1))
  (setq list2 (append list2 list1))
  )
  (setq list1 (list (substr file (+ 1 strnamb))))
  (setq list2 (append list2 list1))
)
Вот строка запуска функции:
Код:
[Выделить все]
(dwgru-browseforfile "true" "Множественное открытие файлов *.ini" "" "*.ini |*.ini|" "0x00000008" "" "")
Вот описание аргументов функции:

Цитата:
BrowseForFile
-------------------
Описание: Вызывает стандартный диалог Open/Save As и возвращает имя выбранного
файла, если нажато OK, и пустую строку, если нажато Cancel.
Синтаксис: (dwgru-browseforfile toggle title initDir filter flags x y)
Аргументы: toggle - тип диалога (строка) "true" = Open, "false" = Save As, по умолчанию true. Умолчание - пустая строка "".
title - заголовок диалога (строка), по умолчанию системный заголовок. Умолчание - пустая строка "".
initDir - начальный каталог диалога (строка), по умолчанию текущий каталог. Умолчание - пустая строка "".
filter - фильтры диалога (строка), по умолчанию "All files (*.*)|*.*|". Умолчание - пустая строка "".
flags - флаги диалога (строка с числом), по умолчанию OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT. Умолчание - пустая строка "".
x, y - смещение окна диалога от верхнего левого угла экрана; оба аргумента строки, по умолчанию окно центруется. Умолчание - пустые строки "" "".
Результат: Список из строковых значений.
Пояснения:
filter должен иметь следующий формат:
"Executable files (*.exe)|*.exe|All files (*.*)|*.*|".

flags - это комбинация следующих флагов:

0x00000001 (OFN_READONLY) Включает переключатель диалога "Read Only"
0x00000002 (OFN_OVERWRITEPROMPT) При задании имени существующего файла выводит запрос
на подтверждение перезаписи файла (Save As)
0x00000004 (OFN_HIDEREADONLY) Прячет переключатель диалога "Read Only"
0x00000008 (OFN_NOCHANGEDIR) Восстанавливает текущий каталог после выхода из диалога
0x00000200 (OFN_ALLOWMULTISELECT) Разрешает выбор нескольких файлов
0x00000800 (OFN_PATHMUSTEXIST) Запрещает ввод имен несуществующих путей и файлов
0x00001000 (OFN_FILEMUSTEXIST) Запрещает ввод имен несуществующих файлов
0x00002000 (OFN_CREATEPROMPT) При задании имени несуществующего файла выводит запрос
на подтверждение создания файла (Open)
0x00020000 (OFN_NONETWORKBUTTON) Прячет и запрещает кнопку диалога "Network"

Если выбрано несколько файлов, то возвращаемый список имеет вид:
("имя_файла1" "имя_файла2"..."имя_файлаN").
В противном случае функция возвращает список с именем выбранного файла в виде строки.

Если флаг OFN_HIDEREADONLY не был установлен, то в конец возвращаемой строки добавляется
подстрока "|1" или "|0" в зависимости то того, выбрал или нет пользователь опцию Read Only.
Описание слегка переработал.

Не ругайтесь, это моя первая попытка сделать функцию с применением dll-ки.

Как прения закончатся, допишу шапку и отформатирую как надо.
Вложения
Тип файла: dvb alloObj.dvb (11.0 Кб, 106 просмотров)

Последний раз редактировалось Supermax, 10.01.2008 в 14:29.
Supermax вне форума  
 
Автор темы   Непрочитано 10.01.2008, 14:35
#36
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Спасибо VVA, ткнул фейсом в нужную тему. А там Kpblc откровенничает про COM.
http://www.arcada.com.ua/forum/viewtopic.php?t=460


Вот новый вариант функции без VBA
Код:
[Выделить все]
(vl-load-com)
(defun dwgru-browseforfile ( toggle title initDir filter flags x y / AlloObj File strnamb list1)
  (setq AlloObj (vla-getInterfaceObject (vlax-get-acad-object) "ALLO.SystemFunctions"))
  (setq File (vlax-variant-value (vlax-invoke-method AlloObj 'BrowseForFile toggle title initDir filter flags x y)))
  (setq strnamb 0)
  (setq list2 nil)
  (while (vl-string-position 124 file strnamb)
  (setq list1 (list (substr file (+ 1 strnamb) (- (setq strnamb1(vl-string-position 124 file strnamb)) strnamb))))
  (setq strnamb (+ 1 strnamb1))
  (setq list2 (append list2 list1))
  )
  (setq list1 (list (substr file (+ 1 strnamb))))
  (setq list2 (append list2 list1))
)
Все остальное старое.

В начале функции не хватает функции Kpblc-a проверяющей сам факт возможности создания объекта, но вставим вместе, или так брошу.
Вложения
Тип файла: rar allosys.rar (12.3 Кб, 112 просмотров)

Последний раз редактировалось Supermax, 11.01.2008 в 11:03.
Supermax вне форума  
 
Непрочитано 10.01.2008, 15:13
#37
Кулик Алексей aka kpblc
Moderator

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


Я там (то бишь на аркаде) кое-чего добавил по поводу регистрации dll, мало ли кому пригодится.
А эти товарищи с allo (так и тянет добавить "мы ищем таланты" ) чего-то совсем офигели - у них на сайте корректно работает только MSIE и без вариантов. И то, dll лично мне скачать не удается Попробую еще дома, но получится или нет - не знаю. Навскидку (чисто по логике, не более того): позицию окна (аргументы x, y) я бы не требовал указывать, а записывал их в реестр и читал оттуда. Правда, получится или нет - я не знаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.01.2008, 18:13
#38
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


dll-ку с сайта ALLO выложил. См. выше.

Теперь про логику необходимости применения множественного выбора (я надеюсь Алексей, ты это имел в виду?):
По структуре ini файл не имеет заголовков и окончаний и поэтому два ini файла могут быть объеденены в один (чего лучше не делать), или обработаны по очереди, еесли в памяти есть список нескольких ini.
Поскольку очередность загрузки внешних ссылок не имеет значения, то и очередность обработки ini тоже.
Это, так сказать, приамбула.
Теперь о самой функции. Нужен множественный выбор файлов. Я думаю эти ребята из ALLO давно уже умерли. Датируется эта их статья 2001 годом, а сайт пере... на голову и все остальное. Посколку уже 2008-ой, делаем выводы. Я даже их реквизиты не нашел.

Понять кто делал и где исходники пока не могу, хотя скачал все дерево папок и нашел там много интересного.
Все дерево весит 2,5 мега в незаархивированном виде.

Мне не нравится, что dll-ка "брошенная". Не нравится, что окно нельзя растягивать. А так, в целом другой альтернативы вызова окна выбора файлов с возможностью множественного выбора не вижу.
Supermax вне форума  
 
Автор темы   Непрочитано 10.01.2008, 20:52
#39
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Пытаюсь определить имя объекта у shell32.dll

имена функций нашел.
Цитата:
CPlApplet
DefScreenSaverProc
DragAcceptFiles
DragFinish
DragQueryFile
DragQueryPoint
FindExecutable
GetMenuContextHelpId
GetWindowContextHelpId
RegisterDialogClasses
ScreenSaverConfigureDialog
ScreenSaverProc
SetMenuContextHelpId
SetWindowContextHelpId
SHAddToRecentDocs
SHAppBarMessage
SHBrowseForFolder
SHChangeNotify
Shell_NotifyIcon
ShellAbout
ShellExecute
ShellExecuteEx
SHEmptyRecycleBin
SHFileOperation
SHFreeNameMappings
SHGetDataFromIDList
SHGetDesktopFolder
SHGetDiskFreeSpace
SHGetFileInfo
SHGetInstanceExplorer
SHGetMalloc
их описание в zip-e win32_hlp.zip и shellcc.chm. Данные файлы распостраняются Microsoft платно и их распостранение без их ведома не разрешается.

Последний раз редактировалось Supermax, 11.01.2008 в 10:49.
Supermax вне форума  
 
Автор темы   Непрочитано 11.01.2008, 11:08
#40
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну почему мне никто не сказал, что достаточно библиотеку зарегистрировать и выражение (vla-getInterfaceObject (vlax-get-acad-object) "ALLO.SystemFunctions") начнет работать?
Я мучаюсь с этим VBA, vlax-get-or-grate-object, а все усмехаются и молчат!

Вот что надо написать в (vlax-get-acad-object) "????????????????") чтобы добраться до функций в библиотеке shel32.dll?
Supermax вне форума  
 
Непрочитано 11.01.2008, 11:31
#41
Кулик Алексей aka kpblc
Moderator

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


Дык ента... Я ж на аркаде несколько раз про это сказал! Сейчас запущу студию, посмотрю что там и как
---
Добавлено:
для лиспа вариант примерно таков:
Код:
[Выделить все]
(defun test (/ svr *error* res)
  (defun *error* (msg)
    (vl-catch-all-apply '(lambda () (vlax-release-object svr)))
    (princ msg)
    (princ)
    ) ;_ end of defun

  (if (setq svr (vlax-get-or-create-object "ALLO.SystemFunctions"))
       (setq res (vlax-invoke-method svr
                   'browseforfile
                   "toggle"
                   "title"
                   "" ;"initdir"
                   "" ;"filter"
                   "" ; x
                   "" ; y
                   ) ;_ end of vlax-invoke-method
             ) ;_ end of setq
     ) ;_ end of if
  (vl-catch-all-apply '(lambda () (vlax-release-object svr)))
  res
  ) ;_ end of defun
Естественно, что надо подставлять нормальные значения. Не факт, что сработает корректно - я код не гонял.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 11.01.2008 в 11:54.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.01.2008, 12:15
#42
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Надо покапаться в виндовых библиотеках и найти стандартное окно выбора файлов с множественными возможностями! Оно есть, но как его вызвать???
Supermax вне форума  
 
Автор темы   Непрочитано 11.01.2008, 17:09
#43
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


На первый взгляд, вроде ты функцию выбора файла пытаешся сделать, а почему тогда (defun test .....?
Ладно, проглотим, а почему такие странные переменные, и как запустить test без аргументов функции? И кому он без аргументов нужен?
Функция - это функция. Она должна предоставлять максимально возможные параметры.
Supermax вне форума  
 
Непрочитано 11.01.2008, 17:15
#44
Кулик Алексей aka kpblc
Moderator

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


Ну как почему - я ж решал задачу "показать как создавать СОМ-сервер и работать с ним из-под лиспа". А не нарисовать рабочую функцию
Чтобы она работала, надо немного дольше посидеть, потестировать в разных вариантах ну и т.п. А у меня особо времени не было Может, сегодня получится.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.01.2008, 17:53
#45
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ты чуток погоди. С начала надо найти нормальное окно выбора файлов, типа этого:
Миниатюры
Нажмите на изображение для увеличения
Название: Выбор.jpg
Просмотров: 115
Размер:	61.1 Кб
ID:	2172  
Supermax вне форума  
 
Автор темы   Непрочитано 11.01.2008, 18:54
#46
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


У меня не открывается объект
MSComDlg.CommonDialog

из библиотеки COMDLG32.OCX
(во всяком случае так говорят, что от сюда)

А в этом объекте есть множественный выбор файла.
Библиотека эта у меня стоит и зарегестрирована, но ...

http://forum.script-coding.info/viewtopic.php?id=64
вот от сюда эта малява.
Supermax вне форума  
 
Непрочитано 11.01.2008, 22:58
#47
Кулик Алексей aka kpblc
Moderator

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


В ocx, насколько я помню, лежат контролы, то есть ActiveX-компоненты. Сами по себе они не работают никогда, их надо помещать на формы и вызывать уже оттуда (по крайней мере в подавляющем больщинстве случаев, как мне припоминается). То, что у них есть свойства и методы, ни о чем не говорит.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.01.2008, 12:43
#48
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Не Kpblc, ты не прав оказался. Надо было всего лишь скачать из и-нета файл vb6controls.reg и два раза по нему щелкнув, ответить на запрос "записать в реестр или нет?" - да.
И все начинает работать.

Объект - "MSComDlg.CommonDialog"
Библиотека comdlg32.ocx

Код:
[Выделить все]
; ICommonDialog: Microsoft Common Dialog Control 6.0 (SP6)
; Property values:
;   Action = ...Indexed contents not shown...
;   CancelError = ...Indexed contents not shown...
;   Color = ...Indexed contents not shown...
;   Copies = ...Indexed contents not shown...
;   DefaultExt = ...Indexed contents not shown...
;   DialogTitle = ...Indexed contents not shown...
;   FileName = ...Indexed contents not shown...
;   FileTitle = ...Indexed contents not shown...
;   Filter = ...Indexed contents not shown...
;   FilterIndex = ...Indexed contents not shown...
;   Flags = ...Indexed contents not shown...
;   FontBold = ...Indexed contents not shown...
;   FontItalic = ...Indexed contents not shown...
;   FontName = ...Indexed contents not shown...
;   FontSize = ...Indexed contents not shown...
;   FontStrikeThru = ...Indexed contents not shown...
;   FontUnderLine = ...Indexed contents not shown...
;   FromPage = ...Indexed contents not shown...
;   hDC = ...Indexed contents not shown...
;   HelpCommand = ...Indexed contents not shown...
;   HelpContext = ...Indexed contents not shown...
;   HelpFile = ...Indexed contents not shown...
;   HelpKey = ...Indexed contents not shown...
;   InitDir = ...Indexed contents not shown...
;   Max = ...Indexed contents not shown...
;   MaxFileSize = ...Indexed contents not shown...
;   Min = ...Indexed contents not shown...
;   Orientation = ...Indexed contents not shown...
;   PrinterDefault = ...Indexed contents not shown...
;   ToPage = ...Indexed contents not shown...
; Methods supported:
;   ShowColor ()
;   ShowFont ()
;   ShowHelp ()
;   ShowOpen ()
;   ShowPrinter ()
;   ShowSave ()
T
Прежде чем применять метод, надо установить нужные свойства. Чем я сейчас и занят.

Код:
[Выделить все]
(setq MSCObj (vlax-get-or-create-object "MSComDlg.CommonDialog"))
(vlax-put-property MSCObj "InitDir" "C:\\")
(vlax-put-property MSCObj "DialogTitle" "Откройте нужный Вам файл!")
(vlax-put-property MSCObj "Filter" "Все файлы (*.*)|*.*|Программы (*.com,*.exe)|*.com;*.exe|Текст (*.txt,*.log)|*.txt;*.log")
(vlax-put-property MSCObj "FilterIndex" "2")
(vlax-put-property MSCObj "MaxFileSize" "32000")
(vlax-put-property AlloObj "Flags" "2621952")
(vlax-invoke-method MSCObj 'ShowOpen)
Чтобы выбрать много файлов или один - свойство "Flags"
Где взять описание не знаю.
Как получить строку при окончании работы - не знаю (пока)

Последний раз редактировалось Supermax, 12.01.2008 в 13:36.
Supermax вне форума  
 
Непрочитано 12.01.2008, 14:28
#49
Кулик Алексей aka kpblc
Moderator

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


Ну не надо, не надо. У меня хватило мозгов на создание объекта CommonDialog из-под лиспа. И на установку ему свойств. Но! Этому объекту нельзя применить метод, например, ShowOpen. AutoCAD'ы 2005 и 2008 выдавали ошибку Automation.
Я интересовался этими и подобными вещами в VB6, поэтому и сказал #47.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.01.2008, 15:56
#50
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А ты сделай, как я написал и будет все как надо.

Поковырял объект InternetExplorer.Application
там тоже можно сделать выбор файлов

http://forum.script-coding.info/viewtopic.php?id=64
пост #4

посмотри, может у тебя получится по нему что-нибудь сделать.

Цитата:
; IWebBrowser2: Web Browser Interface for IE4.
; Property values:
; AddressBar = ...Indexed contents not shown... http://msdn2.microsoft.com/en-us/lib...48(VS.85).aspx
; Offline = ...Indexed contents not shown... http://msdn2.microsoft.com/en-us/lib...61(VS.85).aspx
; ReadyState (RO) = ...Indexed contents not shown... http://msdn2.microsoft.com/en-us/lib...66(VS.85).aspx
; RegisterAsBrowser = ...Indexed contents not shown... http://msdn2.microsoft.com/en-us/lib...69(VS.85).aspx
; RegisterAsDropTarget = ...Indexed contents not shown... http://msdn2.microsoft.com/en-us/lib...72(VS.85).aspx
; Resizable = ...Indexed contents not shown... http://msdn2.microsoft.com/en-us/lib...73(VS.85).aspx
; Silent = ...Indexed contents not shown... http://msdn2.microsoft.com/en-us/lib...74(VS.85).aspx
; TheaterMode = ...Indexed contents not shown... http://msdn2.microsoft.com/en-us/lib...77(VS.85).aspx
; Methods supported:
; ExecWB (4) http://msdn2.microsoft.com/en-us/lib...87(VS.85).aspx
; Navigate2 (5) http://msdn2.microsoft.com/en-us/lib...94(VS.85).aspx
; QueryStatusWB (2) http://msdn2.microsoft.com/en-us/lib...96(VS.85).aspx
; ShowBrowserBar (3) http://msdn2.microsoft.com/en-us/lib...00(VS.85).aspx
T

Последний раз редактировалось Supermax, 12.01.2008 в 16:03.
Supermax вне форума  
 
Автор темы   Непрочитано 12.01.2008, 17:41
#51
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вот все, что я смог найти на сегодняшний день.
MSComDlg.CommonDialog +
UserAccounts.CommonDialog +
SAFRCFileDlg.FileOpen ++
SAFRCFileDlg.FileSave
Scripting.FileSystemObject
ADODB.Connection
InternetExplorer.Application

Где стоит "+" - есть возможность многофайлового выбора
Где стоит "++" - возвращает #<variant 19 1>
Остальные ничего не возвращают полезного.
Supermax вне форума  
 
Автор темы   Непрочитано 12.01.2008, 17:55
#52
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


По поводу ShowOpen:
Скопируй всю мою писанину в командную строку и увидишь, что ShowOpen работает, но ничего не возвращает. Окно появляется, файлы выделяешь и фигу получаешь после нажатия OK. А как известно, функция vlax-invoke-method возвращает только то, что обусловлено методом.
Supermax вне форума  
 
Непрочитано 12.01.2008, 22:26
#53
Кулик Алексей aka kpblc
Moderator

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


Если нужна инфа по CommonDialog, могу попробовать "нарыть" из MSDN 98-го года выпуска - там оно было в более-менее виде. То, что есть сейчас в онлайн, не смотрел.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.01.2008, 06:56
#54
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Периодически заглядываю в эту тему (думаю, что не только я) и кажется мне, что я наблюдаю вяло текущую шизофрению. Supermax, не обижайтесь, пожалуйста, только получается так: чем дальше в лес - тем больше дров. Проблемы громоздятся и просто жаль вас становится, а еще больше жаль Алексея. Одно только утешает, если можно так выразиться, - если Алексей Кулик поддерживает эту тему, то, наверное, видит какое-то рациональное зерно в ней. Смысл темы сейчас находится вне сферы моей компетентности, однако мыслится так: пока еще не найден надежно работающий механизм выбора файлов внешних ссылок для записи информации об них в файлы *.ini. А ведь в этих файлах еще надо записать информацию о том, что ПОСЛЕ вставки внешняя ссылка должна быть скопирована и, возможно, повернута с определенными параметрами. Не слишком ли сложна поставленная задача? Я это пишу не в плане критики, а в плане сопереживания. Что-то больше никто не высказывет своего мнения, даже очень опытные товарищи. Считают несерьёзной эту затею? Может, она действительно не до конца продумана, а с момента создания темы прошел уже месяц. Как бы с такими темпами вот это благое пожелание
Цитата:
А так я потихоньку могу и целый микрорайон смоделировать до винтика.
не растянулось на всю оставшуюся жизнь.
Profan вне форума  
 
Автор темы   Непрочитано 13.01.2008, 11:55
#55
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Profan, спасибо за поддержку и сопереживание, но спешу тебя обрадовать, в посте Kpblc-а #24 выложен лисп xref-and-ini3.lsp в котором две функции,
одна - c:save-xref
вторая - c:restore-xref
Первая создает ini файл и записывает в него все параметры вставки внешних ссылок, на которые ты указал, а вторая - используя этот ini файл вставляет ссылки в новый файл, как правило заново открытый пустой.
Можно было бы это сделать и на другой машине, но Kpblc упрямо не хочет выкинуть из ini файла путь к dwg файлу. Ну это я так, подкалываю.

Все уже работает, но не до конца. "Починить" лисп Kpblc-a я и сам могу, но уперся в множественный выбор файлов. Нашел DLL-ку, в которой есть нужные функции, но там окно не растягивается, а это меня коробит. Да и есть на компе эти ... окна. Этих DLL-ок хоть ... жуй. Только где, что и как - я пытаюсь разобраться, а все, кто уже разобрался - помогать не спешат, поскольку нафиг это им надо?
Вчера сервер замочил. Пытался в окне эксплорера запустить кад. Не охота за лиспом dll-ку таскать, хотя она того стоит, нет спору.

Множественный выбор файлов нужен для того, чтобы выделив сразу много ini вставить в текущий файл все dwg ссылки из них.

Черт с ним. ALLO, так и allo. На ней и остановимся. Появится что-нибудь лучше - поменяем.

Вот такие вот пироги.
Supermax вне форума  
 
Автор темы   Непрочитано 13.01.2008, 12:27
#56
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, чтобы продолжить, или точнее закончить эпопею с этой прогой, надо оформить и утвердить функцию выбора файла, которой в библиотеке DWGRU еще нет. Да ивыбор папки тоже можно пересмотреть, если оставить Allosys.dll. Ты главный массовик-затейник, тебе и принимать решение.
Писать прогу без этой функции можно, я не против, но и ты выскажись по этому поводу.
Supermax вне форума  
 
Непрочитано 13.01.2008, 14:11
#57
Кулик Алексей aka kpblc
Moderator

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


Замечания приняты. Пауза до вечера (примерно до 23:00 Мск, вряд ли раньше). Функции оформлю и выложу на всеобщее освистание
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.01.2008, 14:32
#58
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А я чуток тебе помогу:
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * DwgRu-BrowseForFile
;;; *
;;; * 14/01/2008 Версия 0001.    Андрей Лазебный (Supermax), Кулик Алексей (Kpblc)
;;; ************************************************************************
;;; Функция использует функции свободно распостраняемой библиотеки  Allosys.dll
;;; Автор - Юрий Лукач © Студия "АЛЛО" http://allo.usaaa.ru/workshop/samples/sysfuns/sysfuns.htm
;;; использование функции DwgRu-BrowseForFile требует инсталяцию данной библиотеки.
;;; В функции использована функция PL:String->List автор - Лоскутов П.В. 
;;; Опубликована в книге Полещук Н.Н. Лоскутов П.В."AutoLISP и Visual LISP в среде AutuCAD"
;;;
 ;;; Описание:
  ;;; Вызывает стандартный диалог Open/Save As и возвращает список состоящий из строк 
  ;;; в которых заключены полные пути и имена выбранных файлов, если нажато "Открыть", или nil, если нажато "Отмена".
 ;;; Синтаксис: 
  ;;; (dwgru-BrowseForFile toggle title initDir filter flags x y)
 ;;; Аргументы:
  ;;; toggle - тип диалога (строка) (true = Open, false = Save As), по умолчанию true
  ;;; title - заголовок диалога (строка), по умолчанию системный заголовок
  ;;; initDir - начальный каталог диалога (строка), по умолчанию текущий каталог
  ;;; filter - фильтры диалога (строка), по умолчанию "All files (*.*)|*.*|"
  ;;; flags - флаги диалога (строка с числом), по умолчанию OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT
  ;;; x - смещение окна диалога от верхнего левого угла экрана; по X. (строка с числом) По умолчанию окно центруется
  ;;; y - смещение окна диалога от верхнего левого угла экрана; по Y. (строка с числом) По умолчанию окно центруется
  ;;; 
  ;;; Умолчания - пустые строки "".
  ;;; filter должен иметь следующий формат:  "Executable files (*.exe)|*.exe|All files (*.*)|*.*|".
  ;;; 
  ;;; flags - это комбинация следующих флагов:
   ;;; 0x00000001 (OFN_READONLY)          Включает переключатель диалога "Read Only"
   ;;; 0x00000002 (OFN_OVERWRITEPROMPT)   При задании имени существующего файла выводит запрос
   ;;;                                    на подтверждение перезаписи файла (Save As)
   ;;; 0x00000004 (OFN_HIDEREADONLY)      Прячет переключатель диалога "Read Only"
   ;;; 0x00000008 (OFN_NOCHANGEDIR)       Восстанавливает текущий каталог после выхода из диалога
   ;;; 0x00000200 (OFN_ALLOWMULTISELECT)  Разрешает выбор нескольких файлов
   ;;; 0x00000800 (OFN_PATHMUSTEXIST)   Запрещает ввод имен несуществующих путей и файлов
   ;;; 0x00001000 (OFN_FILEMUSTEXIST)     Запрещает ввод имен несуществующих файлов
   ;;; 0x00002000 (OFN_CREATEPROMPT)    При задании имени несуществующего файла выводит запрос
   ;;;                                    на подтверждение создания файла (Open)
   ;;; 0x00020000 (OFN_NONETWORKBUTTON)   Прячет и запрещает кнопку диалога "Network"
   ;;; 
   ;;; Если флаг OFN_HIDEREADONLY не был установлен, то в конец возвращаемой строки добавляется
   ;;; подстрока "|1" или "|0" в зависимости то того, выбрал или нет пользователь опцию Read Only.
   ;;; 
  ;;; Возврат: 
   ;;; Cписок состоящий из строк в которых заключены полные пути и имена выбранных файлов, если нажато "Открыть", или nil, если нажато "Отмена".
  ;;; 
  ;;;   Для регистрации компоненты в меню пуск\выполнить наберите команду: regsvr32 allosys.dll.

(defun dwgru-BrowseForFile ( toggle title initDir filter flags x y / svr res PL:String->List)
  (if (setq svr (vlax-get-or-create-object "ALLO.SystemFunctions"))
       (setq res (vlax-variant-value (vlax-invoke-method svr 'BrowseForFile toggle title initDir filter flags x y))))
       (vl-catch-all-apply '(lambda () (vlax-release-object svr)))
(defun PL:String->List (_str _br / _pos)
  (if (setq _pos (vl-string-search _br _str))
  (cons (substr _str 1 _pos)
  (PL:String->List (substr _str (+ (strlen _br) _pos 1)) _br))
  (list _str)
))
(princ (PL:String->List res "|"))
)

Последний раз редактировалось Supermax, 13.01.2008 в 20:19.
Supermax вне форума  
 
Автор темы   Непрочитано 13.01.2008, 21:54
#59
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Поскольку возвращается список со строками, я написал следующую функцию для библиотеки:

Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * DwgRu-List-String-Search
;;; *
;;; * 14/01/2008 Версия 0001.    Андрей Лазебный (Supermax)
;;; ************************************************************************
;;;
 ;;; Описание:
  ;;; В списке состоящем из строк, находит строку по маске 
 ;;; Синтаксис: 
  ;;; (dwgru-list-string-search string standard)
 ;;; Аргументы:
  ;;; string - список состоящий из строк
  ;;; standard - маска (строка) 
   ;;; 
   ;;; маска может содержать все спецсимволы типа *, #, и прочие, перечисленные в описании функции wcmatch
   ;;; 
  ;;; Возврат: 
   ;;; Первая найденная строка с удовлетворяющая маске
 
(defun dwgru-list-string-search (string standard / )
(car (vl-member-if (function (lambda (x) (wcmatch x standard))) string))
)

Сюда надо добавить проверку на отсутствие в списке значений не являющимися строками и флаг, при значениях которого меняется тип возвращаемого значения: остатка списка, просто строки, номера найденной позиции и прочее.
Supermax вне форума  
 
Автор темы   Непрочитано 21.07.2009, 18:08
#60
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Давно я не занимался этой проблемой, но у меня появилось очень много новых мыслей на счет самосоздания модели.
1. восстановим в умах читателей суть затеи.
Кто не знает что такое Google Earth - очень сильно отстал от жизни. А для тех, кто знает, скажу - я собираюсь сделать тоже самое в Автокаде. Я собираюсь организовать бесконечную модель и написать программу, которая по ней ползает. К примеру модель целого города с точностью до фасок на гайках.
2. Структура базы с файлами модели выглядит так:
Коренная папка, в ней DWG файлы внешних ссылок, одноименные файлы с расширением ini в которых указаны координаты вставки файлов внешних ссылок и если есть в файлах внешних ссылок свои внешние ссылки, то одноименные папки с аналогичным содержанием. Вместо файлов внешних ссылок могут быть файлы с интегрируемыми данными, в таком случае в ini файлах указываются координаты вставки и набор свойств (если после интеграции надо настраивать свойства блоков).
3. Перемещение по модели осуществляется так:
Пространство модели очищается от любых элементов и в него по данным ini файлов интегрируется глобальная картина (верхний уровень внешних ссылок и/или интегрируемого хлама), приблежаетесь к объекту, клацаете по нем и он замещается набором объектов из состава ссылок в него входящих. Далее выбираете любой, который замещается еще более мелким содержимым и так до тех пор, пока не останутся одни интегрированные элементы, свойства которых вы сможете посмотреть в properties.
4. Движение из микро в макро и наоборот можно будет осуществлять как с очисткой глобальных планов, так и без.

Kpblc, ты поучаствуешь? А то обещался убрать из своего макроса путь и до сих пор не убрал.
Supermax вне форума  
 
Непрочитано 21.07.2009, 22:17
#61
Кулик Алексей aka kpblc
Moderator

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


Из какого макроса? Какой путь? Что-то не припоминаю, если честно...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.07.2009, 22:21
#62
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


В качестве идеи.
Любой блок или внешняя ссылка (далее - блок владелец) в своем составе может содержать примитивы INSERT, являющиеся вставками некоторого служебного блока, не имеющего в своем составе видимых примитивов, но имеющего невидимый атрибут с именем реального DWG файла-заместителя. После выбора вставки блока владельца и подачи команды "показать подробнее" все вставки вложенных служебных блоков первого уровня замещается вставкой указанных в их атрибутах файлов с соблюдением масштабов и углов поворота. Точно так же командой "скрыть подробности" можно произвести обратную замену на служебные блоки с занесением в их атрибуты имен реальных файлов.
Ну и все это, при желании, может иметь сколь угодно вложенную иерархию.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 21.07.2009, 22:34
#63
Кулик Алексей aka kpblc
Moderator

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


Вот еще бы понять, что хотели сказать - и было бы вообще замечательно. То, что внешняя ссылка, являясь примитивом типа INSERT, сама по себе хранит путь к dwg-файлу, из рассмотрения исключается?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.07.2009, 22:40
#64
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


А зачем это всё? ИМХО конечно красиво и глобально
>> К примеру модель целого города с точностью до фасок на гайках.
но практически - ненужно. это сродни ZUI (zoom user interface - заядлым автокадчикам понравится) - прикольно, но только побаловаться и потратить время и нервы на разработку.
+думаю при реальном использовании в сложных моделях будут серъезные тормоза и напряги с памятью, если перевод на меньшую детализацию отодвмнутых\невидимых элементов не делать динамически. автокад для этого не предназначен

Последний раз редактировалось zamtmn, 22.07.2009 в 00:08.
zamtmn вне форума  
 
Непрочитано 21.07.2009, 23:58
#65
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Вот еще бы понять, что хотели сказать - и было бы вообще замечательно. То, что внешняя ссылка, являясь примитивом типа INSERT, сама по себе хранит путь к dwg-файлу, из рассмотрения исключается?
Сама ссылка представляет собой подробную прорисовку некоторого фрагмента и весить может мегабайты, а вот не имеющий визуального представления служебный блок - сущий пустяк. Но этот пустяк, будучи вставленным, содержит в атрибуте имя файла-заместителя и, как всякий INSERT имеет точку вставки, масштаб по осям координат и угол поворота.
Речь идет о том, что в нужный момент вставка служебного блока заменяется на вставку реального файла с теми же параметрами.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 22.07.2009, 00:11
#66
Кулик Алексей aka kpblc
Moderator

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


Ага, а параметр Visibility для внешней ссылки не поменять, что ли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.07.2009, 11:48
#67
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ага, а параметр Visibility для внешней ссылки не поменять, что ли?

Для этого внешняя ссылка должна быть уже загружена, и следуя логике, так же рекурсивно загружены все вложенные в неё ссылки до последнего колена.
Игры с unload/reload, overlay и Visibility мне представляются более трудоемкими, чем предложенный способ, если вообще могут обеспечить желаемое поведение.
Кроме того, предложенным способом можно замещать вставки слжебного блока не только вставками внешних ссылок но и вставками блоков (в т.ч. генерируемыми "на лету" программно), что добавляет гибкости конечному продукту.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Автор темы   Непрочитано 23.07.2009, 18:14
#68
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Из какого макроса? Какой путь? Что-то не припоминаю, если честно...
Вот твой макрос
http://forum.dwg.ru/showpost.php?p=197058&postcount=24

Суть такова:
Надо на каждую ссылку свой ini и без пути к этой ссылке!
Там, где лежит ini ищется и ссылка. По сути, путь к ссылке определяется прочтением пути к ini. Файлы ini должны иметь то же имя, что и файлы ссылок. По имени файла ini производится идентификация имени файла ссылки. Если в ссылку вложена другая ссылка, то надо создать еще и одноименную папку, куда разместить все вложенные ссылки. Если и в тех ссылках тоже есть вложенные, то и там надо создавать папки и в них размещать вложенные ссылки. Таким образом, создается дерево вложенности из простых папок содержащих dwg файлы и ini к ним. Но НИКАКИХ ПУТЕЙ!
Помимо ссылок есть еще и интегрируемые данные. Ведь можно не ссылкой файл подключать к модели, а интегрировать его содержимое. В ini файле должен быть признак внедрение\ссылка Если я хочу в такой файл сохранить часть элементов модели, то я выбираю элементы, затем нужный файл и внедряю с учетом данных поворота, разворота из ini к нему.
Также в ini должны хранится настройки блоков, входящих во внедряемые данные.

Но это все потом. Сейчас ссылки надо добить, а там проблема с выбором файлов была.

Pastor , да, согласен, надо в ini также вставлять либо имя файла с заместителем объекта вставки и далее его только как ссылку вставлять, либо программый код упрощенной графики давать.
Всегда сначала вставляется заместитель, а уж потом он заменяется на оригинал.

Я попытаюсь описать процесс погружения и выныривания из глобальной модели.
Вот представьте себе, что у вас есть файл Москва.dwg, содержащий карту москвы, файл Москва.ini и папка "москва" в которой лежат файлы dwg с названиями районов, папки с названиями районов и ini файлы с названиями районов. В каждом районе есть кварталы, а в них дома, сооружения и подземные и надземные сети.
Карта москвы просто растровая картинка, районы - растровая картинка с графическими 3D кубиками домов, как в Google Earth, кварталы то же самое, что и районы, а вот дома - уже имеют псевдографику. Когда тыкаешь в квартал, и указываешь на его замену более подробно, то есть выполняешь Zoom, то вместо квартала из ini файлов домов и объектов, входящих в папку этого квартала, появляется псевдографика всех его состаных частей. Когда тыкаешь в какой-нибудь элемент этой псевдографики, да, это скорее всего программно созданный блок, то по имени этого блока (а оно такое же как и имя файла с этим домом) узнаем какой ini надо выполнить в части загрузки ссылки или внедрения графики. Дом делится на этажи, этажи на помещения, а помещения уже не делятся, они наполнены "виртуальными изделиями". Вместо "виртуальных изделий" тоже сначала псевдографика, а потом уж они самые.
Выныривание идет путем вызова дерева папок и тыканием в ini файла, скажем, район Левобережный.ini.
Вся модель перечерчивается до данного уровня.
Если в глобальной модели есть повторяющиеся элементы, то можно создать базу таких элемнтов и в ini указать имя файла из этой базы, а не искать одноименный файл в той же директории. Таким образом файл с гайкой будет один на всю Москву.
Вот я вставляю динамический блок с каким-нибудь теплообменником, но таких теплообменником тысячи в Москве, значит лучше хранить их в базе как шаблон, а не держать в дереве.
Вот, где-то приблезительно так.

Последний раз редактировалось Supermax, 23.07.2009 в 19:59.
Supermax вне форума  
 
Непрочитано 23.07.2009, 23:42
#69
Кулик Алексей aka kpblc
Moderator

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


Supermax, я ж вроде там ниже говорил, почему с путями необходимо. И потом, насчет интегрируемых данных... Навскидку команду не помню - то ли xclip, то ли clipit - что-то подобное в голове вертится, а конкретизироваться не хочет...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.07.2009, 14:54
#70
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


kpblc, а я тебе говорю - не нужны пути. Более того, категорически не нужны, вся концепция работать не будет с ними.
Вот давай простой пример разберем:
Есть открытое пространство модели и в него надо вставить внешнюю ссылку, опираясь на данные ini файла. Что мы делаем в первую очередь?
- Мы запускаем диалог выбора файла (очень нужен именно множественный выбор), настроенный на показ только ini файлов. Выбираем один или несколько ini файлов и прога получает их в виде строк с путями к ним, так? - так! Берем эти пути и меняем в них расширение ini на расширение dwg и это пути к dwg файлам. Не лежат dwg файлы с сылками в других папках, только в этой же папке!!!
Далее: Если нам надо библиотечный файл вставить, то в ini файле надо указать только имя файла в этой библиотеке, а путь к библиотеке должен быть записан в настройках Автокада, тогда его там будет прога искать. И тут, как видишь, тоже пути не нужны.
Если в ini файлах записывать пути, то с компа на комп не перенесешь модель. Нет на других компах такой же конфигурации, как на твоем и моем.
Supermax вне форума  
 
Непрочитано 27.07.2009, 00:39
#71
Кулик Алексей aka kpblc
Moderator

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


Код не тестировал. Совсем.
Вложения
Тип файла: lsp xref-and-ini4.LSP (8.2 Кб, 79 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.07.2009, 05:25
#72
aka raduntsev-nias

tester
 
Регистрация: 23.08.2008
Сообщений: 1,006


Цитата:
Сообщение от Supermax Посмотреть сообщение
Вот твой макрос
http://forum.dwg.ru/showpost.php?p=197058&postcount=24

Eсли в глобальной модели есть повторяющиеся элементы, то можно создать базу таких элемнтов и в ini указать имя файла из этой базы, а не искать одноименный файл в той же директории. Таким образом файл с гайкой будет один на всю Москву.
Вот я вставляю динамический блок с каким-нибудь теплообменником, но таких теплообменником тысячи в Москве, значит лучше хранить их в базе как шаблон, а не держать в дереве.
Вот, где-то приблезительно так.
что-то похожее реализовано в PDMS, можно делать заводы
aka raduntsev-nias вне форума  
 
Автор темы   Непрочитано 27.07.2009, 16:30
#73
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код не тестировал. Совсем.
Посмотрел, тоже не тестировал, но понял.
Протестирую - напишу.
Supermax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Запись параметров вставки внешней ссылки в саму внешнюю ссылку.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос объектов во внешнюю ссылку Supermax AutoCAD 3 09.12.2007 21:44
Не явный путь задания внешней ссылки Елена AutoCAD 2 05.11.2004 00:21