Supermax
4.10.2007, 15:43
К стати про инсталлеры:
Я тут совершенно бесплатно прогу установил так как ты мне предлагаешь, так она мне столько иконок набросала без моего на то согласия, что теперь я такие проги игнорирую.
История Startup Suite хранится в реестре. Точка.
Обезьяноустойчивость - практически основное требование (по крайней мере с моей стороны). Я лучше потрачусь на 2-3 дополнительные проверки, чем буду выслушивать по телефону все что обо мне думают.
Почему реестр? Наверное, потому, что (getcfg) и (setcfg) мне просто не понравились. Работая с реестром, я в любой момент могу там поменять данные - когда нужно, где нужно и на что нужно. Самое главное - я это моментально увижу. Глазами, запустив regedit. Вопрос привычки, наверное..
К # 403: Это куда эта прога понакидала? На рабочий стол? Такое ощущение, что это просто "с мясом" выдранный рисунок из ресурсного файла.
Supermax
4.10.2007, 16:44
Да, в ресурсный файл с иконками.
Ты мне так и не ответил правильно я выразил твое мнение или нет? в посту №397. Читай как "правильно я тебя понял или нет?".
Реестр Windows особоохраняемое файло в крупных конторах. Писать прогу, которая туда лезет и там чего-то куда-то пишет - значит ставить под удар саму прогу. В крупных конторах рассуждают как? - Если прога написана известной фирмой, имеющая службу поддержки и отвечающая за свои ошибки - ставим. Если прога требует инсталляции и при ней оперирует конфигурацией всей системы, а фирмы ее написавшей просто не существует, то такие программы к инсталляции запрещены. Пользователь может сам запустить инсталляцию, но состояние реестра все время контролируется и его изменение тут же обнаруживается. Более того, я лично знаю одо ГУП, где реестры систематически восстанавливаются из сохраненных копий и каждый раз, прийдя на работу пользователь садится за одну и ту же "нулевую" машину. Все временные и постоянные (выполненные окончательно) файлы лежат на файл-сервере. Там можно садится за любую машину. Дисководов нет вообще. Один единственный CD у руководителя группы. Правда с флэшками теперь там плачут. Макрос на такой машине запустить можно только через (load ... или командную строку.
Ладно. Ну его к черту. Хочешь - объединяй. Только последний вопрос. Как запустить твою равнялку "просто так"?
Цитата
Ты мне так и не ответил правильно я выразил твое мнение или нет? в посту №397. Читай как "правильно я тебя понял или нет?".
Почти правильно. Прописывается в реестре только жизненно необходимое - путь к загрузчику. А он уже сам все делает.
Прога не будет оперировать всей конфигурацией системы, задача инсталлятора - прописать всего один ключ в реестре.
Цитата
Пользователь может сам запустить инсталляцию, но состояние реестра все время контролируется и его изменение тут же обнаруживается.
Пользователь, не обладающий правами администратора (локального или доменного), не сможет запустить инсталлятор. Контролируется самим инсталлятором. Соответственно изменение реестра контролируется самой службой IT.
Цитата
Более того, я лично знаю одо ГУП, где реестры систематически восстанавливаются из сохраненных копий и каждый раз, прийдя на работу пользователь садится за одну и ту же "нулевую" машину.
По меньшей мере глупо. Достаточно закрыть доступ к определенным веткам реестра и больше ничего. Я сильно подозреваю, что там просто отлажена и полностью интегрирована какая-то PDM-система. И соответственно вся работа выполняется в ней. Потому что иначе получится, что гендир имеет право на запуск AutoCAD'a, который ему, во-первых, нафиг не нужен, а, во-вторых, попросту не установлен у него на машине. Терминальный режим поддерживается далеко не всем имеющимся ПО.
Цитата
Как запустить твою равнялку "просто так"?
Открой файл функции равнялки и прочитай. Это
не окончательный продукт!
---
Что должно быть (эх, черт, "САПР на базе" на работе оставил - а так бы процитировал напрямую оттуда) в программе, ее инсталляторе и "стартере". Без объяснения причин моего видения этого дела.
- Инсталлятор: один exe-шник, который сам, с контролем прав устанавливающего, выполняет распаковку файлов комплекса, прописывается в реестр (как минимум для возможности деинсталляции), регистрируется в AutoCAD либо в имеющиеся профили и рабочие пространства, либо создавая новый профиль.
- "Стартер": лисп, dvb или arx (неважно), который по заранее заданному ключу реестра отыскивает собственное местоположение, и проходит по всем подкаталогам, подгружая имеющиеся программные модули. Также проверяет и при необходимости модифицирует пути поддержки AutoCAD'a и (или) пути нахождения палитр инстументов. При наличии файла меню выполняет его загрузку (если оно уже не подгружено).
- Программа :
вариант 1 :основная работа выполняется через меню - как выпадающее, так и кнопочное (toolbar). Внутри кнопок прописаны готовые к употреблению макросы вида
Код
^C^C^P(defun c:abok() (do-some-function param1 param2 param3));abok;
Что позволяет выполнять повтор постоянно переопределяемой команды по правому клику мышой или пробелу. Вся "фоновая" работа выполняется в do-some-function - в том числе и отлов ошибок, и метки начала и окончания, и т.д.
---
Теперь самое страшное. Помимо самого комплекса и инсталлятора необходимо разработать и предоставить справку как минимум 2 видов:
- для пользователей (типа "чтобы получить а, нажми б")
- для разработчиков типа:
* эта функция выполняет то-то и то-то; вызывает такие-то и такие-то функции; в качестве входящих параметров получает а, б, в; контроля соответствия параметров не выполняется; в случае успешного выполнения возвращает указатель на модифицированный объект; в случае ошибки - пустое (nil) значение. Исходный код: тра-ля-ля.
* dll с именем <Бла-бла-бла> позволяет использовать при разработке внутри AutoCAD'a следующую команду (функцию / СОМ-сервер). Входящие параметры; в случае успеха / неудачи возвращает ...; скомпилировано с использованием Visual Studio 2002 + SP / Delphi 7.0 etc; исходный код: тру-ля-ля
Вариант "для разработчиков" особых трудностей не вызывает - достаточно предоставлять исходные коды (в полном объеме), прописывая внутри них комментарии по согласованному варианту. А вот для пользователей... Тут-то и кроется еще одна яма. Например, для "равнялки" примерный текст будет таковым:
Панель инструментов : ABOK_Blocks
Кнопка : <Вид кнопки>
Падающее меню : ABOK - Операции - Блоки и дин.блоки - Выровнять значения дин.блоков
Команда выполняет округление плавно изменяющихся значений динамических блоков (например, длины, угла поворота и тому подобное).
Окно настроек команды вызывается <...> и имеет следующий вид: <...>
Выполненные настройки сохраняются только в текущем файле AutoCAD'a. Настройки по умолчанию имеют следующий вид: <...>
Команда не имеет режима работы только в командной строке.
Выравнивание может быть выполнено:
- с округлением значения до ближайшего большего числа, кратного коэффициенту округления. Все значения округляются в сторону "+"
- с округлением значения до ближайшего меньшего числа, кратного коэффициенту округления. Все значения округляются в сторону "-"
- с округлением значения до ближайшего числа, кратного коэффициенту округления. Округление значений выполняется по стандартным законам.
Выравнивание может быть применено к обычным блокам. В таком случае выполняет выравнивание их коэффициентов масштабирования по каждому измерению. Если коэффициенты масштабов равны 1, блок исключается из обработки.
Выравнивание может быть выполнено как на указанной области, так и целиком для файла.
Из обработки исключаются внешние ссылки. При установке флажка <...> выполняется выравнивание для вложенных блоков. Выравнивание для блоков копирования-вставки и их состава выполняется обязательно. А казалось бы, элементарная вещь...
Сусанин - отдыхает.
Я твой ответ буду пережевывать аж до конца дня, наверное. Но не гарантирую, что и в конце дня я обрету дар речи. С твоей "равнялкой" видимо мне пока торопиться не следует.
VVA - АУ! А твое мнение услышать можно?, или я один должен во всем этом разбираться?
Знаешь Kpblc, есть выставки сюрреалистических скульптур. Это такие замысловатые конструкции из металла и прочего материала, которые крутятся, качаются, в общем чего-то делают. Внешне весьма впечатляющая картина, но полезной нагрузки эти монстры не несут никакой. Твое решение очень смахивает на такую скульптуру.
Я надеюсь, что ты не из любви к красоте сложных схем все это наваял, и под каждым шагом есть какое-то разумное обоснование. Аргументы типа
Цитата
Наверное, потому, что (getcfg) и (setcfg) мне просто не понравились
ты уж не обижайся - не катят.
Нужно подробно, шаг за шагом все аргументировать. Вырывая зубами у оппонентов признание "согласен" по каждому пункту.
Есть такой бородатый анекдот про Джо неуловимого. Я бы его немного добавил и сделал Джо - неуловимый и непобедимый. Если не знаешь - слушай (тобишь - читай).
Сидят пару ковбоев на веранде кабака и беседуют друг с другом, тут мимо них на худющей кляче проезжает такой же худющий ковбой. Один из этих двоих спрашивает друго "А кто это собственно такой поехал?" Ему его приятель отвечает "А, это Джо - неуловимый и непобедимый поехал" тот вздымает к верху брови и задает ответный вопрос "Это почему же?" и получает ответ "Да на хрена он кому-то нужен?".
Стать победителем можно только кого-то победив. И быть непобедимым еще не значит быть победителем.
Есть красота сложных схем, но есть также и величие примитива. Что более впечатляюще красота или величие?
.
Supermax
5.10.2007, 12:38
Из всего тобою Kpblc, выше сказанного я ставлю под сомнение следующее:
Цитата
Что должно быть (эх, черт, "САПР на базе" на работе оставил - а так бы процитировал напрямую оттуда) в программе, ее инсталляторе и "стартере". Без объяснения причин моего видения этого дела.
- Инсталлятор: один exe-шник, который сам, с контролем прав устанавливающего, выполняет распаковку файлов комплекса, прописывается в реестр (как минимум для возможности деинсталляции), регистрируется в AutoCAD либо в имеющиеся профили и рабочие пространства, либо создавая новый профиль.
- "Стартер": лисп, dvb или arx (неважно), который по заранее заданному ключу реестра отыскивает собственное местоположение, и проходит по всем подкаталогам, подгружая имеющиеся программные модули. Также проверяет и при необходимости модифицирует пути поддержки AutoCAD'a и (или) пути нахождения палитр инстументов. При наличии файла меню выполняет его загрузку (если оно уже не подгружено).
Это все надо разбить на части и обсудить.
Предлагаю начать с конца.
Есть функции "служебные" - поиск и исправление ошибок, проверки состояний и пр., есть функции "рабочие" - осуществление определенных намерений. Все они разложены по файлам, а файлы классифицированы и разложены по папкам. Папки имеют название, каждое из которых обозначает следующее:
arx - ?
arx\2002 - ?
arx\2005 - ?
arx\2006 - ?
arx\2007 - ?
arx\2008 - ?
lsp - ?
lsp\acad - ?
lsp\block - ?
lsp\block\attr - ?
lsp\block\attr\get - ?
lsp\block\dynprop - ?
lsp\block\dynprop\get - ?
lsp\block\dynprop-set - ?
lsp\conv - ?
lsp\conv\ent - ?
lsp\conv\list - ?
lsp\conv\selset - ?
lsp\conv\value - ?
lsp\dir - ?
lsp\dir\root - ?
lsp\dir\splash - ?
lsp\error -?
lsp\error\sysvar -?
lsp\eval -?
lsp\get - ?
lsp\get\ent - ?
lsp\get\ent\name - ?
lsp\get\layer - ?
lsp\get\low-level - ?
lsp\get\msg - ?
lsp\is - ?
lsp\is\dinprop - ?
lsp\is\ent - ?
lsp\is\ent\block - ?
lsp\is\ent\layer - ?
lsp\layer - ?
lsp\layer\low-level - ?
lsp\layer\status - ?
lsp\list - ?
lsp\progressbar - ?
lsp\progressbar\limited - ?
lsp\progressbar\low-level - ?
lsp\property - ?
lsp\property\get - ?
lsp\property\set - ?
lsp\string - ?
lsp\string\parser - ?
lsp\string\replase - ?
lsp\string\unformat - ?
lsp\sysvar - ?
vba - ?
Я о назначении мгого догадываюсь (очевидно) но просто общую картину решил не портить. Красота!
И в каждой папочке по кучке лиспиков и пр. Народ думает, что я зря шум поднял.
Kpblc, я понимаю сколько в ЭТО вложено мозгов. Я понимаю, что нужно практически все. Я понимаю, что создать макросы работающие по отдельности - означает дублировать в бешенном количестве множество функций. Но ты меня пойми тоже. работая над отдельным макросом, или пытаясь убедить в необходимости применять автоматизированный подход в работе и использовать при этом конкретный макрос - зависеть от ЭТОЙ библиотеки очень не хотелось бы. А если еще и инсталятор требуется и реестр Windows затрагивает - у меня шок!
А если еще учесть, что в каждом файле может быть не одна функция, а целая куча ... Так, я пошел пить кофе.
Supermax
5.10.2007, 12:52
Kpblc, ты учти, что народ "западает" на какую-то одну фишечку, ну две, ну максимум - три. Когда показываешь как равняются длины, народ говорит - да, это круто, когда показываешь как исчезают и появляются элементы модели - народ говорит - ну, это воаще!, когда показываеш как переименовываются блоки - народ дико вращает глазами и уже ничего сказать не может, но если народу, даже не объясняя показать 100 таких "фишечек" (а у тебя в архиве их не меньше) - народ поймет, что как медведь что-то проспал и спрячется под стол, чтобы не смотреть "в низ" с этой высоты.
А тут получается я не могу показать что-то одно. Или все, или ничего. Не у каждого человека здоровье может выдержать такое.
Так ты и AutoCAD показываешь "либо все, либо ничего". Никто не запрещает тебе показать в меню одну-две-три кнопки. Остальная работа для конечного пользователя невидима и ему неинтересна.
"Рабочие" (то есть вызываемые) функции и команды можно хоть куда прописать, в том числе и напрямую в меню - кто запрещает-то?
P.S. Какой "народ думает"? Я ж только тебе и VVA присылал...
Supermax
5.10.2007, 17:09
Народ читает тему и этот принципиальный спор. Ему не известно сколько и чего у кого есть. Я слежу за темой непрерывно. Почти из нее не выхожу (Интернет такой). На одном мониторе работаю, а на другой кошусь (или косюсь?). Вижу сколько и кто. Ты думаешь, что количество скрытых пользователей и гостей ни о чем не говорит?
Я ж не лиспы выложил, а только дерево набрал. К стати весьма устал при этом. Можешь его "слизать" и на досуге вопросики ответиками заменить.
Я не прочь основательно понять, что к чему и может быть в твоем древе появятся и мои желуди. Или это только для твоих лиспов и др. макросов?
Предлагаю выпускать макросы в двух вариантах 1. - твой, 2. - LT, то есть мой. Выпускаем 3-4 макроса LT, они "приманивают рыбку", а потом мы ее глушим твоим динамитом.
AutoCAD кстати вещь эволюционная и начинался он с кнопочек, размером со спичечную коробку, ну поменьше конечно, но не намного. Народ даже тогда из ступора не вылазил. А теперь конечно все в порядке вещей.
Я конечно за то, чтобы приборов и инструментов было побольше (не на планере летаем), но только чтобы приборчики эти и инструмент были самые, самые лучшие. Между выставкой работ одного художника и картинной галереей большая разница. Только большого поклонника таланта конкретного художника можно заставить стоять и рассматривать его работы. Только в картинной галерее художник понимает на сколько он крут. Я хочу чтобы у меня одна кнопочка была написана тобой (их уже три), другая - dimkin-ом, третья мною самим, четвертая еще кем-то. Если каждый из нас последует твоему примеру, а ты следуешь примеру разработчиков Windows, то начнется самое настоящее выхолащивание продуктивных решений. Что собственно и произошло со всей вычислительной техникой. Раньше и 64к. оперативки умели с толком использовать. У меня до сих пор под DOS есть Neopaint програмка для рисования. На одном мегабайте дискеты помещается вместе с кучей файлов gif, а по функционалу круче paint раз в 100. Надо было мозги раньше напрягать, чтобы уместиться в маленький ресурс, вот и писали проги на уровне гениальности, а теперь развернись моя душа! - да не выходит ни шиша! Повальное увлечение библиотечностью на столько раздуло объем прог, а функционал как был хреновенький, так и остался. Зато какая графика!
Очень трудно провести черту между объективной необходимостью и глобализмом, но вот "равнялка" VVA работает, а твоя у меня без того, чтобы я сделал так, как ты хочешь - нет. А ты хочешь, с моей точки зрения, очень много.
Уже пора убегать, поэтому "кратенько".
В папках (правда, не во всех) есть файл типа folder.notes - в нем ответы на вопросы.
Ты в любой момент можешь добавить любой свой лисп. Самое главное - помести его в подкаталог lsp, чтоб он не мешался. Хотя и положив его рядом с загрузчиком, ты (пока) тоже ничего не потеряешь. VBA-макросы - в каталог vba; arx - в каталог arx. Также можно добавить каталоги vlx и fas, если считаешь нужным. При минимальной доработке загрузчика они тоже будут загружены в текущий файл. Последовательность загрузки сейчас непрогнозируема (хотя и можно отсортировать имена загружаемых файлов, только я этого не делал - в имеющейся схеме гарантированного несовпадения имен и функций это не надо).
Цитата
Предлагаю выпускать макросы в двух вариантах 1. - твой, 2. - LT, то есть мой. Выпускаем 3-4 макроса LT, они "приманивают рыбку", а потом мы ее глушим твоим динамитом.
Помрем. Вот ты веришь, что сейчас, занимаясь лиспом "по приведению файла из кривого конвертера ArchiCAD'a", я эту схему я уже раз 5 использовал? Клиенту понадобилось еще чего-то (всем примитивам внутри блоков присвоить ByBlock). Основная функция - строк 15. Все остальное - библиотека. Стоит начать собирать все воедино, хорошо если в 1000 строк уложишься. А асли понадобится что-то поменять? В твоем варианте надо шерстить полностью все эти собранные лиспы - по методике "библиотеки" меняется одна (!) функция, и эти изменения затрагивают все места, где она используется.
Supermax
5.10.2007, 17:56
Цитата
меняется одна (!) функция, и эти изменения затрагивают все места, где она используется.
Палка о двух концах.
Двух одинаковых имен не должно быть, но это реализуемо, достаточно в имя функции вставить дату ее создания (ну к длинным именам тебе не привыкать). А вот как отражается работа функции на работу проги - вещь очень принципиальная. Ты под новые условия откорректировал функцию, а все свои лиспы проверил на ее адекватное поведение? Я например сталкивался с такими случаями, когда одна фукция испльзует временные переменные другой. Я очень часто этим пользуюсь. Ты конечно ответишь, что вот тогда надо такую связку вставлять в тело основной проги, а другие пусть будут библиотечными.
Библиотечная функция всегда где-то в чем-то избыточна, иначе она не подойдет сразу многим, а написать текст проги, в котором и большой диапазон возможностей и компактность исполнения сочетаются гармонически с моей стороны - кайф для программиста.
Supermax
5.10.2007, 20:42
Вот так, потихоньку и океан выпьем.
Возникла новая потребность.
Все знают, что аудит и рековер файлов не гарантирует их работоспособности. Очень часто проверка показывает 0 ошибок, а файл не хочет работать правильно. В таких случаях я включаю все слои, копирую в буфер все, что выделяется и в новом файле вставляю с исходными координатами. Помагает безотказно.
НО!
Когда модель содержит очень большое количество элементов сделать это оказывается очень трудно. Тем более если часть элементов выключена.
Значит надо перекачивать элементы из файла в файл программно. Назовем эту функцию Super_recover.
Если ты смотрел на файлы, то видел, что глобальных переменных там раз-два и обчелся. Передача данных идет через параметры. А они уже внутри анализируются.
"LT" & Co - вот скажи, тебе легче будет, если я попросту втупую буду компилить всю библиотеку в разные fas'ы, и их тебе (ну или не тебе) отдавать? Это ж теряются все преимущства OpenSource-проекта. Или ты его собираешься переводить на проприетарные рельсы?
Изменения в функционале на самом деле редкость. За последние полгода я изменил всего одну свою базовую функцию и на ее основе нарисовал несколько "с предустановками". На самом деле это не страшно

Цитата
<...>написать текст проги, в котором и большой диапазон возможностей и компактность исполнения сочетаются гармонически с моей стороны<...>
нереально. Если большой функционал - как правило, неизбежен большой код. Компактный код - минимализм в масштабируемости. Если вдруг и то, и другое соблюдено, то, скорее всего, будут приличные потери памяти и (или) скорости выполнения. Исключения чрезвычайно редки - по крайней мере из того, что я видел.
Цитата
<...>аудит и рековер файлов не гарантирует <...> работоспособности <файла>
Если файл экспортирован в AutoCAD из внешнего приложения, ничего не поможет

Если из вертикального решения напрямую открыт - помочь нереально. Вся функция, кстати, сведется в конце концов к вызову _.wblock. Возможно, в activex-варианте.
Supermax
6.10.2007, 13:27
Я не сторонник крайних позиций, таких как или туда, или сюда. Во всем есть плюсы и минусы. Надо подбирать так необходимый метод, чтобы это было оптимально. К сожалению многие (и я в частности) склонны к созданию себе тепличных условий и многое делается только для того, "чтобы потом не напрягаться". Труд, с моей точки зрения, по мере возможностей всегда должен быть творческим. Только внимательно все оценивая и заново осмысливая можно добиться совершенства. К сожалению требования рынка к количеству и скорости производства продукта не дают такую возможность.
Когда надо срочно, я и микроскопом гвозди забиваю, но когда есть возможность понять и даже где-то в чем-то отойти назад и заново все пересмотреть (к стати я обнаружил, что пастулаты выложенные в начале темы безбожно устарели), то я предпочитаю HI-END, а не HI-FI.
Все преимущества "OpenSource-проекта" умирают как только перед человеком становится факт, что если он хочет что-то изменить ему надо "впитать" в себя все, а это все, делалось не одним человеком и не один год. Посмотри на свое дерево. Тебе там все ясно, поскольку это ты написал, а мне надо, конечно не столько чтобы это сделать заново, но очень много времени, чтобы просто разобраться, а чтобы найти то, что я мог бы усовершенствовать - вообще даже представить не могу. Для чего люди демонстрируют открытые коды? - для того, чтобы преодолеть собственную "зашоренность", не пропустить ошибок, не использовать устаревших способов и т.п. Развитие других индивидуумов происходит только если они сами этого хотят. OpenSource нужны если автор хочет, чтобы его детище в дальнейшем развивалось и совершенствовалось. Не у всех есть силы чтобы это делать самостоятельно. Как скажи можно совершенствовать операционную систему Windows одному человеку, если ему только предстоит разобраться в ее устройстве. Одельный драйвер - пожалуйста. Целую систему - слабо! VVA выложил свою равнялку, я за пол часа в ней разобрался, запустил, проверил, нашел пару моментов, которые я попозже переделаю, а твою, для анализа которой мне надо отследить куда она это лезет и чего хочет - надо неделю потратить.
Желание что-то сделать - вещь очень хрупкая. Убить его - раз плюнуть. Когда ты вываливаешь на две страницы лисп, думаешь его тянет изучать? Есть такой строительный опыт - проще построить здание в чистом поле, чем снести, а потом построить в центре города, не смотря на то, что и коммуникации есть и все под рукой. Мне проще сесть и написать все заново, чем разбираться даже в собственных функциях годичной давности.
Это так сказать тот минус раздробленности и библиотечной упорядоченности, но плюсы тоже есть. Не будем считать плюсом возможность наращивать функционал быстро за счет библиотеки. Я это считаю крайней мерой и кривлюсь когда делаю. Плюсом можно считать то, что каждый маленький лисп, содержащий какую-то функцию можно быстро найти, рассмотреть и легко понять, но только, если он самодостаточен, или его "обвязка" не требует изучения "СНИП-ов" и "ГОСТ-ов".
При написании функционала в самодостаточном варианте можно пользоваться библиотекой как источником знаний, имплантируя ее функции в тело макроса. Можно и подгружать функции и из библиотеки, но только при условии, что эти функции настолько проверены и многократно усовершенствованы, что просто уникальны и не требуют больше совершенства. Как функции самого LISP-а (хотя не факт, что все они совершенны).
К сожалению Интернет меня разочаровал, конечно не он сам, а люди, которые в нем. Взять и сделать описание твоим функциям если собрать человек хотя бы 20 - 1 день. Но мы с тобою Kpblc, обречены на одиночество. Ты сам этим не займешся, поскольку тебе оно не надо. Я тоже предпочитаю у тебя спросить и закрыть локальную проблему локальным действием, после чего дела, дела. Так что OpenSource-проект это только красивые идеалистические мечты. Делают те, кто случайно выбран для этого судьбой.
P.S. Для выполнения моей задачи достаточно включить выбор всем элементам, даже тем, которые выключены. В этом могут помочь те самые грабли, на которые ты с dimkin-ом наступили. Только теперь не сбрасывать выбор надо, а наоборот. И у меня тут в мозгу что-то щелкнуло. Я пытался запустить внутреннюю ссылку включая ее ручки, а выбрать ее по человечески не удавалось. А тут получается есть выбор, но ручки выключены и видимость тоже. И в чем же этот выбор состоит?
Kpblc, колись! Что ты делаешь чтобы снять выбор? Что в элементе отвечает за принадлежность к набору выбора?
Если ты это откапаешь, я повешу твой портрет себе на стену и если ты приедешь в Москву - поведу в кабак.
Без особых проверок. Уж извини, но с использованием библиотеки. Прописывать весь код полностью - шансов нуль сейчас.
Код
; Через wblock
(defun hideobj (/ selset)
(foreach item (_kpblc-conv-selset-to-vla (ssget))
(_kpblc-property-set item 'visible :vlax-false)
);_ end of foreach
);_ end of defun
(defun showobj ()
(vlax-for blk_def (vla-get-blocks *kpblc-activedoc*)
(if (_kpblc-is-ent-space blk_def)
(vlax-for item blk_def
(_kpblc-property-set item 'visible :vlax-true)
);_ end of vlax-for
);_ end of if
);_ end of vlax-for
);_ end of defun
(defun try01 (/ selset)
(_kpblc-error-catch
(function
(lambda (/ ss)
(vla-clear (setq ss
(vla-item (vla-get-selectionsets *kpblc-activedoc*) "for_wblock")
);_ end of setq
);_ end of vla-clear
(vla-delete ss)
);_ end of lambda
);_ end of function
nil
);_ end of _kpblc-error-catch
(setq selset (vla-add (vla-get-selectionsets *kpblc-activedoc*) "for_wblock"))
(vlax-for item (vla-get-modelspace *kpblc-activedoc*)
(vla-additems
selset
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray vlax-vbobject '(0 . 0))
(list item)
);_ end of vlax-safearray-fill
);_ end of vlax-make-variant
);_ end of vla-AddItems
);_ end of vlax-for
(vla-wblock *kpblc-activedoc* "c:\\wblock.dwg" selset)
);_ end of defun
Через CopyObjects не рисовал - может, к вечеру поближе..
P.S. hideobj и showobj - для собственной проверки корректного экспорта скрытых объектов
Supermax
6.10.2007, 17:13
Kpblc, что-то не так. Все блоки, которые я сделал копируя твоим макросом, прописали в нуть себя еще один комплект элементов, но не тот, из которого был сделан этот блок, а тот, который был до его редактирования. То есть при восстановлении модели в блоки поверх элементов, что я установил легли старые элементы. Теперь у меня на каждой позиции по два экземляра одного и того же. И это в нутри блока. Такие блоки не хотят копироваться в буфер, хотя открываются редактором и изменяются.
Твой макрос я проверить не смог, он завязан на твою библиотеку, а я ее устанавливать не хочу. Переписывать все функции, цепляющиеся гирляндой одна за другую, у меня пока настроения нет. Подождем пока оно у меня появится.
Kpblc, ты Русский язык не забыл? Ты похоже тепрь только на Лиспе разговариваешь? Может для разминки мозгов пофилосовствушь немного?
Нет, некоторые копируются. Да, вот наглядный пример, что нельзя держать все яйца в одной карзине.
О-бра-зец! Я проверял на простых элементах.
P.S. Насчет философствования - попозже, к ночи поближе. Когда пивка попью и потянет пофлудить.
Ну что поделать... Кстати, сообщи версию, обрабатывалось файло в "чистом" каде (в смысле - не в ADT / ABS / etc) или не совсем. Можешь в мыло кинуть, если светить не хочешь.
P.S. Можешь на посчту, 2 или 3 частями. Попробую выкачать. Хотя учитывая, что я сейчас дистриб Linux'a закачиваю, могу разобраться не сразу
Supermax
6.10.2007, 18:44
Не, тут не в макросе дело, тут глюк такой специфический произошел. Макрос вроде работает правильно. Рековер этого файла тоже не причем. Кад у меня чистый без адоптаций и надстроек. Да я бы и "засветил", да боюсь мне администрация сайта за это тоже засветит. Сейчас частями по 10 мег. нарежу и тебе скину. Может у меня кофигурация када к чертям слетела? Попробуй аккуратненько включить все детали. У меня сразу кад слетает. Грузится долго. Включить все детали мне удалось только после того как я сохранил файл под 2004 форматом. Хочу посмотреть на те ряды, что выключенные были. Там тоже по много деталей на одном месте?
Supermax
6.10.2007, 18:54
Да, с этим надо что-то делать. Я бы не сказал, что у меня слишком большая модель. Если ЭТО слишком много, то что говорить о больших объектах?
Уф, слава богу скрытые блоки не пострадали. Только те, что ты видишь, когда включаешь.
Не представляю как такое могло произойти, чтобы в блоке восстановилась старая версия компановки по верх новой?
Supermax
6.10.2007, 19:00
Представляешь, конвертнул в 2004 формат и из 140 мег стало всего 89, а когда заархивировал то и вообще 16. А в 2007 формате даже заархивировать прилично не захотело. Я сейчас в таком состоянии как Фрекин Бокс из мультика про Карлсона. Что-то в ухе жужжит и приведения в компе завелись.
Пока тихо. Можно (для гарантии) выложить на любой файлообменник типа webfile и мне либо в ПМ, либо в почту ссылку.
Вру, пришло. Сейчас скачиваю.
Supermax
8.10.2007, 12:59
Kpblc, у тебя кад жив? А то после запуска моих файлов что-то больно тихо стало.
Местами оно живо. Увы, всего лишь местами. Дома 2005-й просто отказался работать (дело до открытия не дошло, слопал 2 гига оперативки и "ква"), 2006-й тормозил безбожно (1,5 гига RAM), 2008-й вылетел в момент попытки регенерации. Все проверял на "чистых". Сегодня вечером попробую еще на ADT2007 - но не факт, что получится. Открывал, ессно, и напрямую, и через _recover, и через _insert пробовал.
Supermax
8.10.2007, 15:26
Я делаю так:
Как только файло загрузилось в 2006-ой кад я ничего не двигая нажимаю Front. Вижу модель с фронта. К сожалению, за это время я успеваю налить и выпить чай. Затем я нажимаю твой макрос с опцией "включить все". Закусываю, запускать на машине что либо еще не решаюсь. Думаю, что два монитора это конечно хорошо, но два системных блока по два монитора на каждом наверное еще лучше.
Модель появляется.
Теперь я наверное буду каждый ряд превращать во внешнюю ссылку. Посмотрю на сколько мне удасться всетаки прочистить мозги каду.
К стати я заметил одну странность. Сегодня, когда я ковырял очередной теплопункт, я обратил внимание на то, что если я выхожу из пространства листа в пространство модели через вскрытие окна, а потом возвращаюсь в лист, машина начинает очень плохо перемещать лист по экрану. Стоит мне выйти в модель, и обратно зайти все просто летать начинает. И это повторяется даже после перезагрузки компа. Я человек в компьютерах суеверующий, когда я чувствую тормоза и у меня есть возможность перезагрузится я это делаю.
Моделька была, так себе, но если есть такие глюки на модельке, то во что они могут вылиться на моделище?
Надо покупать НОРМАЛЬНУЮ видеокарту. Баксов так за 1000. Сертифицированную на AutoCAD-e. Вот только всегда находятся первоочередные траты. Может кому теплосеть проложить за видеокарту? А то опять все деньги семья слопает.
Поиграйся с кеширование модели и листа - скорее всего, проблема там порылась.
Supermax
8.10.2007, 15:45
Эта модель, так, баловство. Хотя очень хорошая школа выживания получилась. Если строить модель до бесконечности, то на таких испытательных полигонах все можно очень хорошо отработать.
Задача ставится такая:
На компьютере стандартной конфигурации надо дать возможность пользователям лазить по модели очень большого объема информации. Чем круче конфигурация машины, тем больше можно видеть одновременно не сокращая динамику работы с моделью. Чем меньше оперативки, тем меньше можно видеть элементов одновременно, НО! все равно, можно работать и понимать где ты, и куда тебе надо.
Выключая элементы мы тем самым разгружаем видеокарту, или ту часть работы процессора, которая отвечает за графику. НО! Оперативную память мы не разгружаем. Как и раньше в нее грузится весь файл с включенными и выключенными элементами. Причем размер оперативки больше 2гиг. уже не имеет значение. У меня 3 гига. Что 1 гиг подкачки, что 1,5 гига подкачки при ресурсе 3 гига. Начинают тормозить работу машины по черному.
От сюда вывод, что идея mmax-а с подгрукой элементов может очень и очень решить этот вопрос. Надо избавляться от лишнего веса файлов.
Если долго работать с одним и темже файлом, в нем начинают накапливаться не видимые каду погрешности и рано или поздно такой файл, не смотря на то, что в нем мало деталей - виснет. Поэтому периодически надо полностью заменять основу чертежа на новую. Это как перечертить чертеж на новой бумаге. Твой макрос я еще не ковырял, но прийдет время и к нему доберусь. К стати можешь опробовать его на этой модели.
Supermax
8.10.2007, 16:05
По поводу кеширования попрошу подробнее, а то я что-нибудь сейчас себе закеширую, однако.
Два одновременно запущенные 2008 када одновременно не уживаются. То есть работают по началу, а потом чегото-там не могут поделить. За 2006-ым такого не замечал.
Надо определить оптимальный размер файла внешней ссылки для конфигурации машины "простенькая".
Определил - 10 мегов.
Supermax
9.10.2007, 13:45
Вчера вечером изучал (C:BLOCKTOXREF). С точки зрения русского пользователя блок должен преобразоваться во вешнюю ссылку, а он на самом деле заменяется внешней ссылкой, причем эту внешнюю ссылку можно делать абсолютно какой угодно. Я немного разочарован, но не беда.
По свежим следам оглашаю свои ощущения и выводы.
1. - То что делает (C:BLOCKTOXREF) нужно иметь в двух вариантах, а не в одном. Первый вариант, это как есть, то есть внешняя ссылка заменяет все вхождения блока, а второй - это когда одно, конкретное вхождение удалаяется, а вместо него вставляется внешняя ссылка.
2. - Данная функция требует надстройки в следующем виде:
При указании блока, в меню, где предлагается выбрать внешнюю ссылку надо добавить опцию - создать файл внешней ссылки и при его создании спрашивать копировавать ли в него содержимое выбранного блока, или нет. При копировании тоже надо спрашивать - в виде блока, или содержимое блока.
3. - Нужна возможность переносить указанный блок в указанную внешнюю ссылку.
4. - Также как и с блоками возникла потребность в SAVEASXREF. В принципе можно доработать SAVEASBLOCK и сделать универсальную вещь. Если вы указываете блок, то следует запрос нового имени, а если вы указали внешнюю ссылку, то запрашивается новое имя файла внешней ссылки и данное вхождение внешней ссылки 1 заменяется вхождением внешней ссылки 2. Разумеется при этом создасться новый файл, куда будет скопировано содержимое внешней ссылки 1.
Supermax
9.10.2007, 16:14
Да, модель у меня не слабая, но что-то не так с этим (C:BLOCKTOXREF). Я беру и создаю новый файл, открываю редактором блоков блок с рядом кирпичей, копирую все в буфер, перехожу в этот новый файл и вставляю с исходными координатами все из буфера, сохраняю, закрываю, остается основной файл. Набираю (C:BLOCKTOXREF), указываю в списке блок, который мне надо заменить на внешнюю ссылку, в открывающимся после этого окне указываю на файл, которым мне надо этот блок заменить, на вопрос Purge unreferenced items when finished? <Y>: давлю ентер и пол часа жду пока блок заменится, причем загрузка процессора все это время близка к 100%!!! Вхождений этого блока всего 2. Ссылку сделал за 5 минут, а заменить блок на ссылку - чуть не заснул.
Целый час!!! Один блок.. Наверное purge делать не надо.
Supermax
10.10.2007, 11:37
О чудо! Никаких наслоений будто и не было!
Стал переводить все в XREF и дойдя до злополучных рядов не нашел в них ни единой ошибки. Чудеса!
Как, от куда, что и почему - ничего не понимаю! Вчера машина работала еле-еле, сегодня просто летает. Думаете я ее вчера не перезагружал? - Ошибаетесь! Раз 100 не меньше!.
Наверное домовой научился работать на компе.
Supermax
10.10.2007, 16:24
Взял и выключил внешнюю ссылку. Потом ее Unload, потом ее Reload, а она так выключенной и осталась. Замечательно!
Один ряд имеет два вхождения. Я один выключил, а второй оставил. Потом ее Unload, потом ее Reload, а та, что выключенная, так выключенной и осталась, а включенная - включенной. Как замечательно!
Мысли в слух:
Вот сижу и думаю, такая возможность есть, включать и выключать элементы не разнося их по слоям, а AutoDesk ее в палитру не вставил. Почему? Это же круче чем разбивка по слоям! А теперь получается, что если элементы оформленны как внешняя ссылка, то множество копий этого элемента можно выключить поштучно, а потом все скопом Unload-ом и после включения всего скопом Reload-ом, сохраняется выключенность у тех ссылок, что были выключены индивидуально. Фантастика! Мало того, что видеоресурс не ест, так еще и оперативку разгружает.
Kpblc, ты сделал такое, что сам не понимаешь, что сделал.
Правда если все ссылки Unload, а потом сделать "включить все", то ссылки, что были выключены становятся включенными. Это конечно не кайф, но поправимо. Надо только вставить в "включить все" фильтрик, глазу пользователя не видимый. Если элемент - ссылка XREF и она Unload, то такой элемент трогать нельзя. А вот если она Reload, но выключена, то тогда можно и включить.
Kpblc, ты думаешь, что это не то, над чем можно поколдовать? Да это - лебединая песня твоей жизни! Такие примочки нужны всем, а не только мне. И шанс их обнаружить не такой уж большой. Доделывай и на DWG.RU и здесь устраиваем грандиозную презентацию. Мне в воскресенье сдавать пару проектов, поэтому очень трудно засесть за окна, но ты не бросай ТАКУЮ вещь.
Ты прежде чем кайфовать, сначала поменяй состояние ссылок, потом им Unload и перезагрузи файл (то бишь закрой и снова открой). Потом - Reload. Сработало?
Цитата
если все ссылки Unload, а потом сделать "включить все", то ссылки, что были выключены становятся включенными. Это конечно не кайф, но поправимо.
Не понял фразы. Но это объяснимо - у меня тут с понедельника за два дня работы навалилось на месяц вперед. Который кончается в пятницу. Так что до 15-го я мертвый.
Supermax
11.10.2007, 10:49
Не Интернет, а кладбище какое-то. Все очень заняты, то есь "мертвые". А я значит "шары гоняю"?
Взял свою боевую модель, перекрестился, Reload ссылку, что имеет две копии (то есть два вхождения), Появились. Одну "выключил". Пропала. Unload эту ссылку. Исчезла и та, что не выключал. Сохранился. Выключил кад вообще. Включил кад. Загрузил файл. Reload эту ссылку - появилась одна, та что не выключал. "Включить все" - появилась вторая.
Замечательно!
Поясняю свою фразу:
Ссылки включаются и выключаются не зависимо от того. Reload они или Unload. Да, своей начинкой они память не засоряют (если Unload), но в таблице привязанных ссылок остаются и по видимому вкл\выкл тоже сидит в этой таблице. Поэтому получается, что если ссылка Unload, а ты берешь и поголовно все элементы включаешь, то включаются и те ссылки, что выгружены. Хотя они на экране не появляются, но если их загрузить, то они уже все включенные. У других элементов такого сервиса как у ссылок нет и этим надо воспользоваться. Если ссылка выгружена (то есть Unload), то ее не надо включать или выключать. Выключить ты эти элементы просто так не выключишь, поскольку их нет на экране, а вот включить сейчас можешь, хотя по идее этого делать не надо.
Ну не обижайся ты... Что сработало - это круто. Теперь то же самое можно попробовать провернуть на разных версиях (потому как поведение может отличаться). И на самом деле такое поведение может быть расценено как "баг" и в последующих версиях снесено.
P.S. Надеюсь, SP установлен?
Supermax
11.10.2007, 11:12
Я уже с 2006 кадом не расстоюсь, хотя и 7 и 8-ой тоже использую. 7-ой - вообще отстой конкретный!
Вот в редакторе блоков в 6-ом был 3Dorbit, потом в 7-ом это расценили как баг и его снесли, а в 8-ом он опять появился. А я без этого орбита не могу выставить трехмерный объект в точку 0,0,0, а без этого к этому объекту практически не возможно правильно прицепить Linear Stretch.
Так и тут. правда я не понимаю почему это могут расценить как баг. Если в 2009 каде они чего-то схалтурят или закроют, то и будем по десятку кадов на рабочем месте держать. А что делать? Вот механикал десктоп 2004 даже диффицитом стал. Потому что там библиотека болтов, гаек, шайб, проката и пр. в 3D. А в остальных механикалах - фига с маком. А что, там нельзя начинать, а в другом каде продолжать?
Пусть сносят - поезд уехал.
P.S. да не обижаюсь я, с чего ты взял?
Supermax
11.10.2007, 17:23
Отредактировал пост №3, где описаны принципы построения модели.
Supermax
11.10.2007, 19:51
Да-а, а вот внешние ссылки вручную переименовать не получается, однако.
Kpblc, спасай, рупь дам!
1. Прочесть имя указанной ссылки и перед созданием файла предложить сделать новое имя путем изменения старого. Обычно когда много ссылок там одну единственную циферку меняют, типа "Кирпичи 1-й ряд" было, а надо сделать "Кирпичи 2-й ряд".
2. В ту же папку, где лежит ссылка-прототип "скопировать как" этот файл. Не надо предлагать сменить директорию. не нужно это, хотя это мое личное мнение.
3. И вот тут самое интересное. Надо в этом, конкретном вхождении ссылки-1 заменить источник данных на ссылку-2. Поскольку файлы - близнецы и даже лежат рядом, то внешне вроде бы ничего не произойдет, только в свойствах имя ссылки изменится.
Усе, так сказать. Получится _Kpblc_SAVE_AS_XREF.
Умоляю!
А также умоляю, без библиотеки!!! За это еще один рупь дам.
Про эти рупьли отдельно разговор будет. В личке.
Попробуй такой вариант:
http://forum.abok.ru/index.php?act=attach&...st&id=10546Слои должны быть разблокированы и разморожены. Ссылка вставляется как Attached (без вариантов, контролируется - см.коммент). Описание ссылки из диспетчера ссылок не сносится (и даже попыток не делается) - для этого надо ковыряться и искать, а у меня мозгов пока не хватат
Supermax
12.10.2007, 10:08
Низкий тебе поклон Kpblc!
Сносить ссылку из диспетчера и не требуется. Такая ситуация возникает только при размножении ссылок копированием, с последующей заменой одного из вхождений на новое. То есть остаются еще и старые вхождения.
Ситуация, когда надо переименовать существующую ссылку, которая стоит в одном единственном числе решается просто. Делается проверка на количество вхождений этой ссылки и если она одна, а точнее, если она была одна, то (command "_-xref" "d" "имя удаляемой ссылки") и вот она была - и нету. Имя удаляемой ссылки известно, так что подставить не трудно.
Kpblc, этот макрос - произведение искуства! С меня пузырь. Очень вовремя!
Готов дать тебе 3000 (больше не дам, хотя ты стоишь гораздо больше). Весь вопрос как? В личке ответь.
ИМХО выполнять (command "_.xref" "_d") как-то не комильфо... Если мозгов и времени хватит, попробую нарисовать без команды (если надо, конечно).
Supermax
12.10.2007, 12:11
Нашел один хомут в макросе. Все работает только если модель в плане, если вид изменить и после этого запустить макрос ссылка вставляется как в план, то есть поперек остальных ссылок.
А про (command и иже с ним, ну, ну. Заказчики узнают, что ты из за не любви к command готов заново AutoCAD написать и надают по попке.
Supermax
12.10.2007, 12:20
Еще одно на первый взгляд не важное, но на второй - ужас.
Если я набрал новое имя, да пьян был и циферкой ошибся, то уже существующий файл внешней ссылки, представленный в разных уголках модели - тю-тю. БЕЗВОЗВРАТНО!
Supermax
12.10.2007, 12:30
Да не будь таким принципиальным - это не есть ку. В разных случаях - разные подходы. Я согласен, что в принципе есть такие случаи, когда команды автокада не катят. Скажем когда макрос пишется не только для автокада, но когда такой случай появится - вот тогда и думай. Динамические блоки я знаю только в автокаде, так и бог с ними, с остальными прогами.
Образец пришли, может, на выходных получится разобраться. Ситуацию #444 повторить не удалось (AutoCAD 2007 ENG+ SP1). Ситуацию #443 проверил - у меня вроде корректно прошло.
Supermax
12.10.2007, 16:03
Про №444 - я удивлен! Как не получилось? Берешь делаешь файл ааа.dwg в него рисуешь кружечки, затем делаешь файл bbb.dwg, в него рисуешь квадратики. Затем открываешь новый файл и вставляешь туда обе эти ссылки. На экране кружечки и квадратики стали. Квадратики - одна ссылка, кружечки - другая.
Запускаем макрос. Указываем на ссылку с квадратиками, вместо того, чтобы написать новое имя пишем ааа. давим на ентер - вместо кружечков выскакивают квадратики. Лезем в папку, открываем файл ааа и видим там квадратики. Вот взяли, с дуру имя файла перепутали (с кем не бывает), а ссылка с кружечками умерла. Теперь она ссылка с квадратиками. И из корзины ты этот файл не достанешь! Прежде чем создавать новый файл, надо проверять на наличие такого в папке и если есть - спрашивать "заменить?" или нет.
Про №443 У меня даже с блоками такое было, но после перезагрузки пропало. А вот с сылками стоит твердо.
Сейчас на 8-ом проверю.
Все, теперь понял. Я по-другому тестировал. То есть предлагаешь вбить проверку на предмет совпадения имени с любым файлом в текущей папке? Или проще - вывалить алерт и отказаться работать дальше (я бы именно этот вариант предпочел, если честно).
Supermax
12.10.2007, 16:25
Нет. Надо заменять файлы. Это хорошо, что заменяет, я уже успел этим воспользоваться. Вот проверять и спрашивать надо обязательно.
Про №443 Делай все в точности как я пишу.
Чистый файл, вид - Top (то есть план), рисуем квадрат. Сохраняемся, закрываем файл.
Открываем новый, вид - Top. Вставляем в новый файл ссылку с квадратом.
Переходим в вид Front (с переди). Квадрат стал как линия.
Запускаем макрос по переименованию ссылки. Тыкаем в эту линию. Указываем новое имя, ну к примеру www и давим энтер. Вместо того, чтобы на экране как линия была, так и осталась она вдруг становится квадратом.
Понял?
8-ой кад аналогично себя ведет. Дело в макросе. Я уже как-то замечал, что кад запоминает три цифры, которые по идее значат X, Y, Z, но поскольку перед цифрами не стоят эти буквы, то при смене плана на вид с переди каду об этом не известно, вот он и впендюривает как в план.
Понял

Не сейчас, это точно - VB всю малину испортил. Может, вечером удастся (около 23:00 Мск)
Да все дело в том, что я забираю с объекта его начальное положение. "На ура" вычислить ошибку пока не в силах.
Supermax
12.10.2007, 17:00
Моя модель "усохла" до 25 мег. Папка с сылками - 260 мег.
К стати, в автокаде этот глюк с видами "коренной". Если скопировать объект в буфер, перейти в другой файл, а там стоит не план а фронт, вставить из буфера данные - встанут как будто это план. Путает зараза где верх, а где низ. Если в чертеже мы видим изменение компаса, когда виды переключаем, то программно к этому компасу никаких привязок нет. Что за три цифры - а фиг его знает.
Недоработочка, однако. В смысле не у тебя, а у AutoDesk-a.
Надо, когда получены координаты посмотреть в каком состоянии видовой экран и эти координаты вместе с данными о виде представления сохранять, а когда вставляешь - тоже смотреть на установленный вид и свои циферки менять местами в зависимости от того, в каком виде производится вставка.