|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Запись параметров вставки внешней ссылки в саму внешнюю ссылку.
Руководитель фирмы
Москва
Регистрация: 28.03.2007
Сообщений: 1,831
|
||
Просмотров: 18498
|
|
||||
Попробую разжевать:
Параметры вставки внешней ссылки, то есть координаты, масштаб, углы поворота и пр. обычно хранятся в том файле, куда она вставлена. А я хочу эти данные вычленить и скопировать в служебное пространство файла самой внешней ссылки. Что тут не понятного? Хочу сделать макрос, который это туда запихивает, а потом от туда читает и совершает процесс вставки внешней ссылки в файл, но с уже известными параметрами, а не вручную. Открываешь чистый файл, запускаешь макрос, указываешь какой файл вставить и он, если нашел там запись - вставляет этот файл как внешнюю ссылку в текущее пространство модели. Если собрать модель только из внешних ссылок, переписать во все эти файлы их же собственные координаты вставки и повороты, а потом в чистом файле запустить макрос, то мы опять соберем модель в единое целое. Можно не все файлы собирать, а только некоторые. Будем иметь частично собранную модель там, где нам надо. У меня модель 200 с лишним ссылок, мне чтобы скопировать все это в новый файл, надо системный блок в холодильник ставить. А так я потихоньку могу и целый микрорайон смоделировать до винтика. |
||||
![]() |
|
||||
Народ как-то вяло реагирует на это весьма многообещающее действо. А ведь я только вершину пирамиды обрисовал, так сказать основные моменты, а дальше последует привязка модели к квадратам геоподосновы, привязка к осям здания, привязка координат геоподосновы к геодэзической сети города и все это для того, чтобы можно было построить модель до бесконечности, но одновременно не перегружать проектировщика.
Сделал модель теплового пункта - привяжи модель к осям здания. Привязка эта подразумевает положение теплопункта в пространстве модели здания, куда тепловой пункт входит как внешняя ссылка, а само здание привязано к крестам геоподосновы в файле плана участка строительства, а сами кресты имеют конкретное отношение к плану города и т.д. Вот еще поболтаю: Допустим я архитектор. У меня есть модель каркаса дома. У нее (у модели) есть оси и высотные отметки, которые на отметке 0,000 и пересечение оси 1 с А образуют точку в 0,0,0 модели. Это вообще-то должен быть закон такой. Если тот, кто проектирует теплопункт знает этот факт и может с помощью макроса установить в своем файле данные соответствующие положению теплопункта в модели дома, то я, вставляя такой файл автоматом, сразу получу его на том месте, где его спроектировали и со вставкой мучаться не буду. Мне приносят файлы и они самовставляются в общую модель. Ну разве это не круто? |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
ADT и никаких гвоздей
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Ну, с ADT надо подружится однозначно. Все Арх и текторы ее любят и ценят, но это же тоже только навороченный кад и ссылки там вставлять тоже можно.
Речь ведь о самовставлении. Вот очень часто, если работаешь с файлом непрерывно, в нем накапливается какая-то гадость, что никакими аудитами не вычисляется. Стоит только все скопировать в новый файл и усе становится на рельсы. А когда в файле немеряно всего соединили в кучу - скопировать без пяти-шести фатал-егоров не получается, да и к скопированному уже нет доверия. К ссылке ведь идет обращение один раз - при генерации модели. Она лежит и есть не просит и если в ней лежат ее координаты вставки, то и ладушки. Нет сборочного файла вообще, вы это понимаете? Это же прорыв в моделировании. Все кусочками, но каждый кусочек знает свой шесточек. И делов-то найти параметры вставки, проанализировать их и понять, как их можно смоделировать для вставки автоматом. |
||||
![]() |
|
||||
Вот есть у вас файл, который вы вставили как внешнюю ссылку в другой файл, точнее в этот файл поместили параметры вставки в другой файл. В него можно напихать в словари тысячи параметров вставки в разные, даже именованные файлы. Создаете файл, делаете ему заранее выбранное имя и в него ссылки вставляются так, как запланировано.
Имена файлов и условности с привязкой создаются самими пользователями, главное обеспечить для этого инструментарий. |
||||
![]() |
|
||||
Еще раз обращаю внимание форумчан на данный вопрос.
Если знать, как оси здания расположены по отношению к X, Y, Z пространства модели, где это здание собирается, то внешние ссылки, из которых и состоит модель этого здания можно заранее снабжать данными для их автоматической вставки в модель. Надо сделать макрос, генерирующий такие данные и макрос читающий их с последующим вставлением нужного файла в нужное место сборочного файла. Можно сделать макрос переписывающий данные с уже вставленной ссылки и запихивающий ей, эти самые данные. Испортился сборочный файл - не беда. Открыл чистый и собрал всю модель автоматически. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
ADT, Project Manager. По крайней мере для этой задачи.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Вот живой, свежий пример:
У меня модель дома, ну очень подробная. более 200 файлов внешних ссылок. Я естественно все не кручу и даже то, что вижу - подрезаю Xref-ом, а тут один ряд надо было переименовать. Есть у меня такой макрос от Kpblc-a, ну о-очень классный. Я взял и переименовал один ряд не выключая подрезки и ... Все переименовалось, правда ряд стал виден весь, без подреза, но не это самое главное. Когда я выключил подрез, то те ссылки, которые полностью попали в зону затенения включаться отказались. Слава аллаху я перед этим эксперементом сейвился. Файлец я сохранил под другим именем и если кто хочет, могу выложить его и те файлы ссылок, что не хотят высвечиваться. Если бы у меня в ссылках были данные их вставки - заново бы все пересобрал в чистом файле и вся песня. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Лично у меня сейчас шансов нуль принять участие (максимум, на что способен - созерцание). Если хочешь, попробуй сделать все это в ADT. Там сборочный файл создается за 10 секунд. Правда, при условии, что подготовительная работа выполнена верно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Kpblc, ты либо читаешь мои опусы под конец дня, когда голова как переполненная мусорная корзина, либо я думать и писать стал на языке, который только сам и понимаю.
Какой ADT? Какой Project Manager? Как можно собрать модель, если в файлах внешних ссылок нет данных для их вставки, а сборочный файл умер!!! И баки его умерли!!! и sv$ умерли!!! Точнее, что еще хуже - они не умерли, а в основном файле случился кризис, который плавно перескочил в sv$, а бак - старый и в нем нет нужных ссылок, и в него влезла кака. Ссылок на том месте, на котором они должны быть нет. Откат короче обломился. Дня на два. Представляешь, вставил пару ссылок в чистый файл, поковырял их, и файл этот убил. Зачем он нужен? В новом файле новую часть конструкции собрал, сделал все что надо с ней и готово. Я пока загружается модель, где 2\3 ссылок не введены - успеваю кофе налить. Они все равно все грузятся, хотя все Unload. От перечня введенных и не введенных ссылок рябит в глазах. Поверь, я правильную штуку придумал. Делов-то вставить ссылку в файл, да хоть в 0,0,0 и переписать ей координаты вставки, которые прочесть из нее же. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
В сам файл внешней ссылки пытаться записывать такое положение - бессмыслица ИМХО. Надо записывать внутрь ini-подобного файла, откуда потом и читать (кстати, ADT живет по аналогичному принципу, но там наворотов намного больше). Если сырость библиотеки не пугает, то можешь попробовать lsp, что в аттаче
Архив обязательно предварительно загрузить! --- Добавлено: Код особо не гонял. --- Добавлено 2: И тишина... ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 21.12.2007 в 11:55. |
|||
![]() |
|
||||
Ты не надейся, тишины не будет. Спасибо за библиотеку (2-ю по счету) и за лисп. Я как только на каникулы уйду - ими воспользуюсь в полную меру. В смысле покурочу и приспособлю.
А пока я буду крушить твое предложение по поводу ini. Да, ini более защищен от всяких случайностей, но кто его должен создавать? Если на каждую внешнюю ссылку по 1 ini - я согласен, а если один ini на всю модель - никогда! Есть рабочее место, где стоит комп и в нем макрос, собирающий модель. Никаких ini там нет. На это рабочее место из разных источников поступают локальные файлы и файлы ini к ним. Макрос их читает и собирает модель. Можно сделать сборку ini файлов в кучу, а потом уже сборку модели. Но только так и не иначе должна собираться модель. Я еще не смотрел твой ini генератор, поэтому мои высказывания считай как реплика в ответ на твои высказывания. Поскольку в строительстве все взаимосвязано, то положение одного тела в пространстве другого всегда можно точно предопределить не вставляя это тело туда практически. Если при сборке элементы не будут совпадать точно, то это говорит, что что-то не так и это тоже польза. Я скоро подробнее посмотрю твой лисп и отпишусь. |
||||
![]() |
|
||||
Если каждый файл внешних ссылок имеет свой ini файл, то это решает проблему переноса модели с компа на комп. У меня модель (повторюсь в 100-й раз) больше 200 файлов внешних ссылок. Если перенести этот файл на другой комп, я даже не представляю ту работу, которую надо будет проделать для того, чтобы согласовать новые пути. А если модель будет самособирающаяся, то тогда путь к файлу внешней ссылки - временная информация.
Жду не дождусь, когда освобожусь и займусь этим. |
||||
![]() |
|
||||
Kpblc, погонял макрос, который ini создает и по нему вставляет ссылки в новый файл.
Файл создался, только Angle= пустой и наверно поэтому ругается. Цитата:
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Код изменил, прогнал на пустом файле, 10 внешних ссылок, вроде сработало корректно. Файл переименовал, но команды "как были". DwgRuLispLib все так же требуется.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Все заработало, но "почти".
Ошибка в формировании 210 dxf кода. Вставь в ini файл строку с этим кодом! Изначально у меня в ссылке (210 0.0 -1.0 0.0), а когда создаю новую модель становится (210 0.0 0.0 1.0). Аналогичная фигня и в макросе, что внешнюю ссылку копирует как "сохранить как". Вручную меняю 210 код на старое значение и становится все на свои места. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
А если так?
P.S. Предупреждаю: я коды не тестирую!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Вот это - другое дело!!!
Все стало как надо. Теперь о путях: Ты вставил в ini файл пути к файлам внешних ссылок и этим угробил возможность переноса модели на другой комп. Если ini файл лежит тамже, где и сам dwg файл, то путь к dwg файлам ссылок определяется месторасположением ini файла. Так? Поскольку ты сделал один ini на все ссылки, то прийдется держать все ссылки в одной папке (что у меня и имеет место быть). Если у каждого файла dwg, являющегося внешней ссылкой будет свой ini, то ссылки можно будет держать в разных папках. Склеить выбранные ini в один - дело двух строк на лиспе, даже одной команды. Имя ini файла должно в точности совпадать с именем файла dwg к которому этот ini принадлежит. Убери пути! |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Не уберу. Как иначе будешь искать ссылки?
Можно, конечно, попытаться обрабатывать относительные пути, но сейчас на это меня точно не хватит.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Есть два пути развития данной темы.
Первый - сделать специальное окно DСL и через него выбирать ссылки и более гиморно для пользователя, но менее трудоемко для программиста - через ком. строку. Вот смотри: Запускаем (c:restore-xref), просит выбрать один из трех параметров "всю папку", "отдельный файл" или "далее". Если выбрать "всю папку", то выскочит окно для указания папки, в которой лежат ссылки и ini файл к ним (или к каждому из них). После выбора все ini файлы в этой папке будут прочитаны и склеены в один (в смысле в памяти компа, а не в файл). Если выбрать "отдельный файл", то попросит указать файл. После выбора к уже имеющимся записям добавится считанное из этого файла. Впрочем как и "всю папку", так и "отдельный файл" могут запускаться в любой очередности. Каждый раз, как сделан выбор в бесконечном цикле, прерываемом только либо Esc либо "далее" предлагается выбрать еще раз и еще раз. Если выбрать далее, то все выбранные файлы будут обработаны. Ну, в принципе, теперь и любой продвинутый юзер может дописать твой лисп. Даже я. Если я допишу, то обязательно сюда выложу. Если ты не возражаешь конечно. SaveAsXref починишь?, а то я заколебался все из плана делать. Последний раз редактировалось Supermax, 05.01.2008 в 15:32. |
||||
![]() |
|
||||
Вот полезную весч узрел
Код:
А я взял от сюда: - http://www.caduser.ru/cgi-bin/f1/board.cgi?t=20220eg Это в плане открытия папки и получения ее адреса. Код:
Последний раз редактировалось Supermax, 05.01.2008 в 17:42. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Этой "весчи" сто лет в обед, посмотри в dwgrulisplib - там есть это дело. Вдобавок немного расширенное.
SaveAsXRef - это откуда? Напомни исходник и тему, а то я не помню навскидку.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Это ты это имел в виду?
Код:
Ладно, я в теме про библиотеку функций напишу свое "фе". Вопрос 2 - http://forum.abok.ru/index.php?showtopic=14612&st=460 пост#461 и 440, 472 и мой ответ на него # 468 и 470 а проще... |
||||
![]() |
|
||||
Kpblc, ты часом не знаешь, что это за файлы?
http://cl-debian.alioth.debian.org/r...cl-ansi-tests/ |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Я тебя предупреждал, что библа сырая? Я предупреждал, что справка, мягко говоря, не полная?
Предупреждал. Так что Цитата:
![]() Цитата:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
И так, что мы имеем на данный момент? Макрос, который может сохранить в файл с расширением 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? |
||||
![]() |
|
||||
Нашел по Shell.Application
http://www.script-coding.info/WSH/Shell.html#1. |
||||
![]() |
|
||||
И так, вот что у меня получилось:
Я взял 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 макроса: Код:
Код:
Код:
Цитата:
Не ругайтесь, это моя первая попытка сделать функцию с применением dll-ки. Как прения закончатся, допишу шапку и отформатирую как надо. Последний раз редактировалось Supermax, 10.01.2008 в 14:29. |
||||
![]() |
|
||||
Спасибо VVA, ткнул фейсом в нужную тему. А там Kpblc откровенничает про COM.
![]() http://www.arcada.com.ua/forum/viewtopic.php?t=460 Вот новый вариант функции без VBA Код:
В начале функции не хватает функции Kpblc-a проверяющей сам факт возможности создания объекта, но вставим вместе, или так брошу. Последний раз редактировалось Supermax, 11.01.2008 в 11:03. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Я там (то бишь на аркаде) кое-чего добавил по поводу регистрации dll, мало ли кому пригодится.
А эти товарищи с allo (так и тянет добавить "мы ищем таланты" ![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
dll-ку с сайта ALLO выложил. См. выше.
Теперь про логику необходимости применения множественного выбора (я надеюсь Алексей, ты это имел в виду?): По структуре ini файл не имеет заголовков и окончаний и поэтому два ini файла могут быть объеденены в один (чего лучше не делать), или обработаны по очереди, еесли в памяти есть список нескольких ini. Поскольку очередность загрузки внешних ссылок не имеет значения, то и очередность обработки ini тоже. Это, так сказать, приамбула. Теперь о самой функции. Нужен множественный выбор файлов. Я думаю эти ребята из ALLO давно уже умерли. Датируется эта их статья 2001 годом, а сайт пере... на голову и все остальное. Посколку уже 2008-ой, делаем выводы. Я даже их реквизиты не нашел. Понять кто делал и где исходники пока не могу, хотя скачал все дерево папок и нашел там много интересного. Все дерево весит 2,5 мега в незаархивированном виде. Мне не нравится, что dll-ка "брошенная". Не нравится, что окно нельзя растягивать. А так, в целом другой альтернативы вызова окна выбора файлов с возможностью множественного выбора не вижу. |
||||
![]() |
|
||||
Пытаюсь определить имя объекта у shell32.dll
имена функций нашел. Цитата:
Последний раз редактировалось Supermax, 11.01.2008 в 10:49. |
||||
![]() |
|
||||
Ну почему мне никто не сказал, что достаточно библиотеку зарегистрировать и выражение (vla-getInterfaceObject (vlax-get-acad-object) "ALLO.SystemFunctions") начнет работать?
Я мучаюсь с этим VBA, vlax-get-or-grate-object, а все усмехаются и молчат! ![]() Вот что надо написать в (vlax-get-acad-object) "????????????????") чтобы добраться до функций в библиотеке shel32.dll? |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Дык ента... Я ж на аркаде несколько раз про это сказал! Сейчас запущу студию, посмотрю что там и как
![]() --- Добавлено: для лиспа вариант примерно таков: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 11.01.2008 в 11:54. |
|||
![]() |
|
||||
На первый взгляд, вроде ты функцию выбора файла пытаешся сделать, а почему тогда (defun test .....?
Ладно, проглотим, а почему такие странные переменные, и как запустить test без аргументов функции? И кому он без аргументов нужен? Функция - это функция. Она должна предоставлять максимально возможные параметры. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Ну как почему - я ж решал задачу "показать как создавать СОМ-сервер и работать с ним из-под лиспа". А не нарисовать рабочую функцию
![]() Чтобы она работала, надо немного дольше посидеть, потестировать в разных вариантах ну и т.п. А у меня особо времени не было ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
У меня не открывается объект
MSComDlg.CommonDialog из библиотеки COMDLG32.OCX (во всяком случае так говорят, что от сюда) А в этом объекте есть множественный выбор файла. Библиотека эта у меня стоит и зарегестрирована, но ... http://forum.script-coding.info/viewtopic.php?id=64 вот от сюда эта малява. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
В ocx, насколько я помню, лежат контролы, то есть ActiveX-компоненты. Сами по себе они не работают никогда, их надо помещать на формы и вызывать уже оттуда (по крайней мере в подавляющем больщинстве случаев, как мне припоминается). То, что у них есть свойства и методы, ни о чем не говорит.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Не Kpblc, ты не прав оказался. Надо было всего лишь скачать из и-нета файл vb6controls.reg и два раза по нему щелкнув, ответить на запрос "записать в реестр или нет?" - да.
И все начинает работать. Объект - "MSComDlg.CommonDialog" Библиотека comdlg32.ocx Код:
Код:
Где взять описание не знаю. Как получить строку при окончании работы - не знаю (пока) Последний раз редактировалось Supermax, 12.01.2008 в 13:36. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Ну не надо, не надо. У меня хватило мозгов на создание объекта CommonDialog из-под лиспа. И на установку ему свойств. Но! Этому объекту нельзя применить метод, например, ShowOpen. AutoCAD'ы 2005 и 2008 выдавали ошибку Automation.
Я интересовался этими и подобными вещами в VB6, поэтому и сказал #47.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
А ты сделай, как я написал и будет все как надо.
Поковырял объект InternetExplorer.Application там тоже можно сделать выбор файлов http://forum.script-coding.info/viewtopic.php?id=64 пост #4 посмотри, может у тебя получится по нему что-нибудь сделать. Цитата:
Последний раз редактировалось Supermax, 12.01.2008 в 16:03. |
||||
![]() |
|
||||
Вот все, что я смог найти на сегодняшний день.
MSComDlg.CommonDialog + UserAccounts.CommonDialog + SAFRCFileDlg.FileOpen ++ SAFRCFileDlg.FileSave Scripting.FileSystemObject ADODB.Connection InternetExplorer.Application Где стоит "+" - есть возможность многофайлового выбора Где стоит "++" - возвращает #<variant 19 1> Остальные ничего не возвращают полезного. |
||||
![]() |
|
||||
По поводу ShowOpen:
Скопируй всю мою писанину в командную строку и увидишь, что ShowOpen работает, но ничего не возвращает. Окно появляется, файлы выделяешь и фигу получаешь после нажатия OK. А как известно, функция vlax-invoke-method возвращает только то, что обусловлено методом. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Если нужна инфа по CommonDialog, могу попробовать "нарыть" из MSDN 98-го года выпуска - там оно было в более-менее виде. То, что есть сейчас в онлайн, не смотрел.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Периодически заглядываю в эту тему (думаю, что не только я) и кажется мне, что я наблюдаю вяло текущую шизофрению. Supermax, не обижайтесь, пожалуйста, только получается так: чем дальше в лес - тем больше дров. Проблемы громоздятся и просто жаль вас становится, а еще больше жаль Алексея. Одно только утешает, если можно так выразиться, - если Алексей Кулик поддерживает эту тему, то, наверное, видит какое-то рациональное зерно в ней. Смысл темы сейчас находится вне сферы моей компетентности, однако мыслится так: пока еще не найден надежно работающий механизм выбора файлов внешних ссылок для записи информации об них в файлы *.ini. А ведь в этих файлах еще надо записать информацию о том, что ПОСЛЕ вставки внешняя ссылка должна быть скопирована и, возможно, повернута с определенными параметрами. Не слишком ли сложна поставленная задача? Я это пишу не в плане критики, а в плане сопереживания. Что-то больше никто не высказывет своего мнения, даже очень опытные товарищи. Считают несерьёзной эту затею? Может, она действительно не до конца продумана, а с момента создания темы прошел уже месяц. Как бы с такими темпами вот это благое пожелание
Цитата:
![]() |
|||
![]() |
|
||||
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. На ней и остановимся. Появится что-нибудь лучше - поменяем. Вот такие вот пироги. |
||||
![]() |
|
||||
Kpblc, чтобы продолжить, или точнее закончить эпопею с этой прогой, надо оформить и утвердить функцию выбора файла, которой в библиотеке DWGRU еще нет. Да ивыбор папки тоже можно пересмотреть, если оставить Allosys.dll. Ты главный массовик-затейник, тебе и принимать решение.
Писать прогу без этой функции можно, я не против, но и ты выскажись по этому поводу. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Замечания приняты. Пауза до вечера (примерно до 23:00 Мск, вряд ли раньше). Функции оформлю и выложу на всеобщее освистание
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Поскольку возвращается список со строками, я написал следующую функцию для библиотеки:
Код:
Сюда надо добавить проверку на отсутствие в списке значений не являющимися строками и флаг, при значениях которого меняется тип возвращаемого значения: остатка списка, просто строки, номера найденной позиции и прочее. |
||||
![]() |
|
||||
Давно я не занимался этой проблемой, но у меня появилось очень много новых мыслей на счет самосоздания модели.
1. восстановим в умах читателей суть затеи. Кто не знает что такое Google Earth - очень сильно отстал от жизни. А для тех, кто знает, скажу - я собираюсь сделать тоже самое в Автокаде. Я собираюсь организовать бесконечную модель и написать программу, которая по ней ползает. К примеру модель целого города с точностью до фасок на гайках. 2. Структура базы с файлами модели выглядит так: Коренная папка, в ней DWG файлы внешних ссылок, одноименные файлы с расширением ini в которых указаны координаты вставки файлов внешних ссылок и если есть в файлах внешних ссылок свои внешние ссылки, то одноименные папки с аналогичным содержанием. Вместо файлов внешних ссылок могут быть файлы с интегрируемыми данными, в таком случае в ini файлах указываются координаты вставки и набор свойств (если после интеграции надо настраивать свойства блоков). 3. Перемещение по модели осуществляется так: Пространство модели очищается от любых элементов и в него по данным ini файлов интегрируется глобальная картина (верхний уровень внешних ссылок и/или интегрируемого хлама), приблежаетесь к объекту, клацаете по нем и он замещается набором объектов из состава ссылок в него входящих. Далее выбираете любой, который замещается еще более мелким содержимым и так до тех пор, пока не останутся одни интегрированные элементы, свойства которых вы сможете посмотреть в properties. 4. Движение из микро в макро и наоборот можно будет осуществлять как с очисткой глобальных планов, так и без. Kpblc, ты поучаствуешь? А то обещался убрать из своего макроса путь и до сих пор не убрал. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Из какого макроса? Какой путь? Что-то не припоминаю, если честно...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
В качестве идеи.
Любой блок или внешняя ссылка (далее - блок владелец) в своем составе может содержать примитивы INSERT, являющиеся вставками некоторого служебного блока, не имеющего в своем составе видимых примитивов, но имеющего невидимый атрибут с именем реального DWG файла-заместителя. После выбора вставки блока владельца и подачи команды "показать подробнее" все вставки вложенных служебных блоков первого уровня замещается вставкой указанных в их атрибутах файлов с соблюдением масштабов и углов поворота. Точно так же командой "скрыть подробности" можно произвести обратную замену на служебные блоки с занесением в их атрибуты имен реальных файлов. Ну и все это, при желании, может иметь сколь угодно вложенную иерархию.
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Вот еще бы понять, что хотели сказать - и было бы вообще замечательно. То, что внешняя ссылка, являясь примитивом типа INSERT, сама по себе хранит путь к dwg-файлу, из рассмотрения исключается?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
А зачем это всё? ИМХО конечно красиво и глобально
>> К примеру модель целого города с точностью до фасок на гайках. но практически - ненужно. это сродни ZUI (zoom user interface - заядлым автокадчикам понравится) - прикольно, но только побаловаться и потратить время и нервы на разработку. +думаю при реальном использовании в сложных моделях будут серъезные тормоза и напряги с памятью, если перевод на меньшую детализацию отодвмнутых\невидимых элементов не делать динамически. автокад для этого не предназначен Последний раз редактировалось zamtmn, 22.07.2009 в 00:08. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
Речь идет о том, что в нужный момент вставка служебного блока заменяется на вставку реального файла с теми же параметрами.
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Ага, а параметр Visibility для внешней ссылки не поменять, что ли?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
Для этого внешняя ссылка должна быть уже загружена, и следуя логике, так же рекурсивно загружены все вложенные в неё ссылки до последнего колена. Игры с unload/reload, overlay и Visibility мне представляются более трудоемкими, чем предложенный способ, если вообще могут обеспечить желаемое поведение. Кроме того, предложенным способом можно замещать вставки слжебного блока не только вставками внешних ссылок но и вставками блоков (в т.ч. генерируемыми "на лету" программно), что добавляет гибкости конечному продукту.
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
||||
Цитата:
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. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Supermax, я ж вроде там ниже говорил, почему с путями необходимо. И потом, насчет интегрируемых данных... Навскидку команду не помню - то ли xclip, то ли clipit - что-то подобное в голове вертится, а конкретизироваться не хочет...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
kpblc, а я тебе говорю - не нужны пути. Более того, категорически не нужны, вся концепция работать не будет с ними.
Вот давай простой пример разберем: Есть открытое пространство модели и в него надо вставить внешнюю ссылку, опираясь на данные ini файла. Что мы делаем в первую очередь? - Мы запускаем диалог выбора файла (очень нужен именно множественный выбор), настроенный на показ только ini файлов. Выбираем один или несколько ini файлов и прога получает их в виде строк с путями к ним, так? - так! Берем эти пути и меняем в них расширение ini на расширение dwg и это пути к dwg файлам. Не лежат dwg файлы с сылками в других папках, только в этой же папке!!! Далее: Если нам надо библиотечный файл вставить, то в ini файле надо указать только имя файла в этой библиотеке, а путь к библиотеке должен быть записан в настройках Автокада, тогда его там будет прога искать. И тут, как видишь, тоже пути не нужны. Если в ini файлах записывать пути, то с компа на комп не перенесешь модель. Нет на других компах такой же конфигурации, как на твоем и моем. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Код не тестировал. Совсем.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
tester Регистрация: 23.08.2008
Сообщений: 1,006
|
Цитата:
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перенос объектов во внешнюю ссылку | Supermax | AutoCAD | 3 | 09.12.2007 21:44 |
Не явный путь задания внешней ссылки | Елена | AutoCAD | 2 | 05.11.2004 00:21 |