Реклама / ООО «ИЗОЛПРОЕКТ» / ИНН: 7725566484 | ERID: 2Vtzqx6kV7S
IPB IPB
Проектирование, монтаж, наладка, сервис


Здравствуйте, гость ( Вход | Регистрация )

- Стандарт НП «АВОК» 7.11-2024
«Рекомендации по проектированию инженерных систем
дошкольных образовательных организаций»

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
20 страниц V  « < 2 3 4 5 6 > »   
Добавить ответ в эту темуОткрыть тему
> Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани
Гость_Supermax_*
сообщение 20.6.2007, 13:25
Сообщение #91





Guest Forum






С ником это случайно, поскольку в голове держал слово крыс, извиняй. А вот рекурсией и разбиением ссылок - это ты мне предлагаешь чтобы посчитать кусочек модели всю ее превратить в кучу элементов, принадлежащих только этому файлу? А в случае переопределения этапов строительства и реквизитов поставщика, получается это только в этом файле и будет переопределено?
Я на типовом этаже в конкретном туалете, конкретный унитаз переназначил по всяким там параметрам, а остальные этажи - побоку? Так, с внешними ссылками, мое вмешательство автоматически распостранится на все копии этой ссылки, а так - будь добр трудись аж до старости.
А как работать в коллективе, где один - один файл ваяет, другой - другой? А тот, кто отвечает за cнабжение - должен работать со всеми файлами? Да еще и ссылки в одной модели вставлены так, а в другом файле - сяк. Файл один, а используют его как внешнюю ссылку несколько человек и каждый по своему. Автор поменял трубу, а у других она осталась прежней?
Ссылки это не только сокращение объема файла, это еще и возможность работать с фрилансерами. Я не собираюсь такую груду работы делать в одиночку. И прекратите ради бога выискивать у меня в тексте спорные моменты. Прогу я для всех делаю (или мы, если кто не против). Так давайте ее родимую ваять.
.
В прогу можно вставлять fas, если уж ты так дорожишь секретом, только надо договориться о тактике.
1. Подарть что либо можно только если ты это имеешь. В отношении программных продуктов это факт их регистрации как готового продукта.
Если это материал одного лица - распечатывается на бумаге текст исходника и нотариально заверяется дата создания. Затем можно и в палату идти регистрировать.
Если прога содержит недокументированные и не зарегистрированные функции, а без них она не пашет, то при последующей регистрации этих функций, как отдельных программ возникнет правовой инцидент, поскольку распостраняться программа будет комплектом, а она может быть и подарена, а автор функций с этим не согласен.....
2. На сколько мне известно без исходников нифига не зарегистрируешь, поскольку не возможно доказать нарушение авторских прав не имея возможности это нарушение предьявить к опознанию.
Я в начале темы поднимал вопрос об открытости кода и нотариальном сопровождении темы. Вот если бы за темой следил нотариус - тогда другое дело, можно писать любые секреты открыто, дата их создания автоматически равна дате появления на экранах мониторов. Но такого пока нет, поэтому и коды всякие только универсального назначения.
.
Выбор элементов модели секущей или простой рамкой по всем ссылкам и в текущем пространстве модели - вещь универсальная. ее можно использовать не только для обработки этх элементов в плане количества, а еще и для их переопределения, выделения, перенесения в другие слои, включеия в набор и пр.
.
К стати, я еще ни разу не пробовал создать набор из элементов находящихся в разных ссылках. Надо будет как нибудь попробовать.

Сообщение отредактировал Supermax - 20.6.2007, 16:28
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 20.6.2007, 17:00
Сообщение #92


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Я ж вроде сказал, что пока у меня не получено добро на публикацию исходного кода. Как только - так сказу. А вот хочешь я всю твою малину по выбору и получению точек расколошмачу за 5 секунд?
Запускаешь
Код
(defun test ()
  (mapcar '(lambda (x)
         (entmakex x)
         );_ end of lambda
      '(((0 . "LINE") (10 2716.29 -479.869 0.0) (11 755.128 552.49 0.0))
        ((0 . "LINE") (10 569.456 -1320.84 0.0) (11 2524.81 -856.854 0.0))
        ((0 . "LINE") (10 1642.87 -21.6875 0.0) (11 459.214 -1030.85 0.0))
        ((0 . "LINE") (10 232.926 -456.67 0.0) (11 436.005 1115.07 0.0))
        )
      );_ end of mapcar
  );_ end of defun

В ком.строке дай
Код
Command: _select
Select objects: _wp

А теперь внимание, задача! Получи вершины, по которым был построен полигон выбора. Как это сделать - и вообще, возможно ли,- я не знаю.
Это все было "нумер раз".
Теперь настает "нумер два".
Цитата
А вот рекурсией и разбиением ссылок - это ты мне предлагаешь чтобы посчитать кусочек модели всю ее превратить в кучу элементов, принадлежащих только этому файлу?
Во-первых, я не предлагаю сразу и одновременно использовать внедрение ссылок и рекурсию. Не надо за меня придумывать и договаривать. Почитай внимательно мой пост #91 (оффтоп: сейчас покажу тему одному товарищу, он вынесет вердикт - кто прав а кто нет).
Во-вторых.
Цитата
А в случае переопределения этапов строительства и реквизитов поставщика, получается это только в этом файле и будет переопределено?

Что значит "переопределения"? Ты что, атрибут в блоке поменял? Или в свойствах файла покопался?
Цитата
Я на типовом этаже в конкретном туалете, конкретный унитаз переназначил по всяким там параметрам, а остальные этажи - побоку?
Что значит "переназначил"?
Я, если честно, не понимаю, какая связь между подсчетом элементов и логистикой. Ну поменял ты атрибут (к примеру) у блока в какой-то внешней ссылке, ну и ладно. Запуск подсчета по новой - вуаля, оно подсчитано как надо.
Скажи, почему ты отказываешься напрочь от идеи сделать разбивку внешних ссылок более детализированной? Проблем будет на три порядка меньше.
---
Добавлено в 22:29:
Во, придумал пример! Смотри, ставишь ты оборудование (неважно какое - насос, вентилятор, козловой кран и т.п.). Вставляешь ты его внешней ссылкой. Теперь тебе надо для здания посчитать спецификацию. По выбранному полигону / региону. Ты выделяешь, и в этот полигон от твоего вентирятора попадает 1 лопасть, 2 болта, 3 винта и 4 гайки. И что, только это и будешь учитывать?

Сообщение отредактировал kpblc - 20.6.2007, 21:30
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
mmax
сообщение 20.6.2007, 22:30
Сообщение #93





Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568



Уопщем так.
Создается такая программа которая подсчитывает блокрефы с определенными параметрами и заносит информацию о их названиях и количествах в спецификацию.

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

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

Но
Все блокрефы:
1. имеют происхождение от какогото одного блока.
2. имеют масштабы
Вот и все что их унифицирует. И только по этим двум параметрам можно их сортировать и специфицировать.

Если пользователь вставляет блок под названием UNITAZ в масштабе 1 и тотже блок в масштабе 2, то он вставил два разных изделия и в спецификацию они пойдут в разные места.

Тут шел разговор о красных кнопках. В настоящее время ниодин здравомыслящий человек не будет им доверять никогда. И когда спецификация отправится к заказчику он еще раз все перепроверит, пересчитав все изделия пальцем (исключения могут быть в госпредприятиях на которых не платят зарплату).

Программа должна быть маленькой и простой и должна дать пользователю право самому выбирать что и как делать.
Например:
Команда СПЕЦИФИЗД
Select object выбрали один блок
Далее выводится диалоговое окно в котором имеется информация о подсчитанных унитазах. Также в этом окне должны быть ячейки в которые пользователь может заполнять сам и их значения будут иметь более высокий приоритет чем программно посчитанная информация, ябы даже сказал, что эти ячейки будут иметь не приоритет а выносить вердикт. Например программа в плане жилого дома нашла 10 одинаковых унитазов, так как все остальные этажи не рисуются, то надо чтобы пользователь указал некий коэффициент по которому будет посчитано полное их количество во всем доме и на всякий случай сделать маленький текстбоксик в котором пользователь сам будет выносить окончательный вердикт количеству изделий независимо от коэффициента этажности, даже если он его указал.
Тоже самое касается имен и прочих столбцов спецификации, напрмер:
Наша программа вычислила имя блока и предложила в диалоге, в ячейке соответствующей графе спецификации НАЗВАНИЕ ИЗДЕЛИЯ, имя блока как название изделия, а пользователь, в свою очереть, должен иметь право вынести вердикт названию.

Также будет НЕочень уместно специфицировать каждое изделие поотдельности. Поэтому надо сделать диалог так чтобы полученная информация в нем могла выстраиваться последовательно на каждое изделие. Например вывести сразу екселевскую таблицу на экран.
_______________________________________________________________________
_______________________________________________________________________

Пользователь выбрал объекты рамкой и в набор попали задвижки и унитазы и в итоге в спецификации может получиться такая сумятица:
Унитазы 1 серии
Задвижки 5 серии
Унитазы 8 серии
Задвижки 125 серии
А они должны располагаться по группам да еще в алфавитном порядке.
Вывод:
Всетаки без определенных соглашений с пользователем не обойтись придется ему в свои любимые блоки вставлять наши метки по которым программа будет их идентифицировать. Надо сделать отдельный модуль который автоматически добавит необходимую информацию в блок пользователя

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

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

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

Итог:
А не лучше ли просто создать программку, для рисования табличек и сделать так чтобы в них было удобно заносить текст. Дабы не пришлось никому ходить с унитазом на голове.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
mmax
сообщение 21.6.2007, 19:46
Сообщение #94





Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568



Имеем три файла 1 2 3 двг
1 вложен в два
2 вложен в три

Работаем с третим файлом:
Код
(command "_-refedit")
И так далее


чтобы подсветить нужную ссылку надо выбирать ее по коду 2. которй хранит ее имя которое равно имени файла.

Код
;подсветим самую дальнюю 1.двг

(setq ss (ssget "_X" (list (cons 2 "1"))))

(sssetfirst nil ss)


при этом надо не забыть что в данном примере ссыка 2 будет подсвечиваться со ссылкой 1 так как ссылка 1 является примитивом файла 2

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

А если я захочу отказаться от редактирования ссылки, то что мне тогда делать. команда refclose предлагает мне либо сохранить измения в файлах ссылки либо выключать компьютор из розетки.
Или это всетаки глюк только Автокада 2007

Нет я вообще не буду пользоваться ссылками лучше copy paste так и овцы сыты и волки на воле. Ради размера файла не стоит на такие вещи и заморачиваться.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 23.6.2007, 13:12
Сообщение #95





Guest Forum






Ну вы братцы и навалили мне работы!
Начну как всегда с (так, тут надо тщательнее) kpblc-а.
1. Ты ж вроде сказал, да я ж не то тебе ответил. Я сказал (пост 92), что секрет можно и не раскрывать, только использовать такую функцию надо корректно. Договорившись, лучше в письменном виде (даже не лучше, а обязательно).
2. Внимательно вчитайся в эту строку:
(command "_.select" "BOX" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)) ^C^C)
Она ничего не делает. Не создает набор, не выделяет объекты – она только показвает рамку и сохраняет в переменных nnn1 и nnn2 координаты рамки. И даже при выходе, она не Enter нажимает (в таком случае было бы “”) а Esc. Что соответствует ^C^C.
Далее следует строка:
(set (read (strcat "ss" (itoa n_ss))) (if (< (car nnn1) (car nnn2)) (ssget "_W" nnn1 nnn2) (ssget "_C" nnn1 nnn2)))
Вместо (set (read (strcat "ss" (itoa n_ss))) …. Можно вставить (setq ss1 …..чтобы понятнее было
Для публики поясню: В зависимости от того, меньше или больше значение X точки nnn1 по отношению к значению X точки nnn2 создается набор либо секущей, либо простой рамкой с координатами рамки nnn1 –начальная точка и nnn2 – конечная точка и сохраняется в переменной ss1 (в первом случае номер множится).
Данную строку можно многократно запускать на одном и том же месте пространства (например открывая ссылки _-refedit-ом). Можно пополнять какую-нибудь базу, сведениями получившимися после обработки этого пространства, можно производить с элементами, попавшими в это пространство различные манипуляции.
Можно конечно и так:
(setq ss1 (ssget "_W" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1))))
Или так:
(setq ss1 (ssget "_C" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1))))
Но в этих случаях выбор (секущая или нет) предопределен, рамка белая и жирная.

Теперь рассмотрим твой пример автоматического рисования четырех линий.
Где ты их нарисовал и зачем? Ну, даже, если ты их нарисовал в том месте, где я произвожу подсчет, то я могу их посчитать (или то, что попадает в условия выбора, в смысле секущности). Раз с сохранением координат выбора проблем нет, перехожу дальше.

Даю пояснение к слову «переопределение». С начала считали, что отмостку будут делать на этапе нулевого цикла, а потом передумали и переопределили как работу этапа «благоустройство». К проектированию конструкции здания это не относится. Это моя головная боль, поскольку я занимаюсь «виртуальным строительством», то есть по готовому проекту имитирую в компьютере процесс строительства объекта. Увязывая действия многих подрядчиков между собой и заодно проверяю проект на «глюки» проектировщиков. А вот как я называюсь и где сижу – только в личку. Тут к стати ящики для участников форума есть.
А на счет атрибута – да. Этап строительства был – нулевой цикл, а стал благоустройство.

Далее. А вот тут ты за меня придумываешь. Когда и где я отказывался, или вообще рассуждал о детализации внешних ссылок? Ссылки есть и будут. Большие или маленькие, но все равно будут. Приведу живой пример. Проектная фирма (у меня за стенкой) человек не много, но все с пальцами веером и неслабой зарплатой. Выход продукции зависит от их настроения. Очень долго бились за производительность и наконец-то приняли следующее решение: Работа считается выполненной, если она положена в архив на центральном файл-сервере. Редактировать ее прямо там могут считанные единицы людей (и даже не всегда может сам автор). У других она – да, да, да – внешние ссылки. В конце месяца смотрят по журналу сервера сколько кто сделал и зарплату работника делят на количество сделанного.
Раньше никто не хотел записывать, кто и что его попросили сделать, а теперь сами придумывают.

Самое последнее. Козловой кран. Ты открой мой теплопункт и увидишь, что фильтры сетчатые ДУ-100 имеют свои гайки, болты и пр. детали, но они все объединены в блок и названы «фильтр сетчатый ДУ-100». Так и кран. Его надо с начала сделать краном, а не грудой элементов от крана, а уж затем этот файл вставлять ссылкой в другой. При открытии такого файла мы не получим никаких вентиляторов. Мы получим только один кран козловой.

Теперь mmax.
«Вы пытаетесь навязать пользователям свою методику и свои блоки. А теперь назовите хоть одного человека который любит когда ему чтото навязывают и еще такого который относится с доверием к чужим блокам.»

Во первых я имею на экране компьютера те же блоки и элементы чертежа что и вы. Моих блоков нет. Атрибуты к блокам придумал не я, иначе бы вы их не смогли увидеть. Состав атрибутов я не определяю (как между прочим многие мне навязывают). У меня и состав и написание и количество их оставлено на усмотрение пользователя.
Это к стати тоже многим не нравится. Говорят хочу сделать универсальную прогу, а это недостижимо.
Слово «навязать» имеет несколько негативный характер. Я и сам не люблю, когда мне навязывают и другим этого стараюсь не делать, а вот термин «убедить» мне больше по душе. Да, я во многих вещах убежденный человек, а это значит, что меня можно в чем-то разубедить.
Вся моя методика сводится к строению тела программы и к тому, что она сможет считать. И я вам даже еще раз перечислю.
1. Простые блоки – по именам, как это делает макрос на VBA лежащий в первом сообщении темы.
2. Блоки динамические и не динамические с атрибутами – по данным атрибутов с их сортировкой по этапам строительства, разделам проекта, системам, категориям и другими параметрами определяемыми пользователем в файле-маршрутизаторе.
3. Виртуальные материалы и изделия, (то есть такие, которые представлены не в виде модели, а в виде условного параметра длинны, площади, объема и т.п. взятого с примитивов типа линии, плоскости, солиды и т.п.) – по данным атрибутов с их сортировкой по этапам строительства, разделам проекта, системам, категориям и другими параметрами определяемыми пользователем в файле-маршрутизаторе.

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

Да, я маршрутизатор, (то есть такой детал, который показывает проге маршрют ее продвижения, то есть какой раздел делится на какие подразделы, в какой последовательности вести подсчет и вообще чего искать в свойствах атрибутов?) сделал на Эселе, а не на СУБД-шной базе или в блокноте – вот какой я тиран и угнетатель пользователей. Они хотят Access а я им гад даю Excel.

Количество элементов «в точности» никогда не закупается. И кабель, и трубы и те же унитазы покупаются с процентовкой в соответствии с нормами сметы. Данные проектировщика никогда не идут напрямую в работу. Только после сметчика. Про «никогда» я пожалуй поторопился, забыл где живу.

Да, красные кнопки многие не любят. Страшно. А вдруг, что не так? Но я кранные тоже не люблю, вот фиолетовые, или в крайнем случае зеленые – другое дело.
Программа не должна быть настроена на окончательное действие. Ведь в работе нужно постоянно иметь возможность локального подсчета, чтобы оценить правильность общей концепции. Поэтому и выбор рамкой, и возможность иметь маршрутизатор ко всем проектам свой, и таблицы чтобы были любые, от самых примитивных в три столбца, до технологических карт и листов ресурсов к М.S. Рroject-у.
Про заказчиков и их отношение к автоматизму я знаю не понаслышке. Когда объем бетонирования заваливает за 10000 м3, пальчик, которым считают, отсохнет у любого. Заказчик знает о процентах на «утруску – усушку», но закладывать их в объем закупок – только его прерогатива, и его же ответственность. Я лично сдавал объемы бетонирования по 3D модели, и могу судить о таких вещах.

Про забытые детали:
Есть такая проблема, но она не потому, что пользователь не нажал на деталь курсором, а потому, что деталь относится к группе подсчитываемых, но ни в один набор не попала. То ли атрибута какого-то не хватило, то –ли в маршрутезаторе про такую разновидность материализма забыли указать. Но тем не менее, все элементы подлежащие учету выбраны, обработаны и распределены по группам, а те, что остались – предъявлены к «опознанию» и решению их дальнейшей судьбы.

С кодом – (setq ss (ssget "_X" (list (cons 2 "*")))) - Выберает все элементы с кодом 2, кроме тех, что находятся в нутрии внешних ссылок. Не веришь? Накидай в 1.dwg блоков, они тоже имеют такую пару и посчитай длину набора (функция sslength).
Ну про сохранение ссылки это ты зря. Выбор есть. Я все время выхожу так:
(command "REFCLOSE" "D") А хотел бы сохранятся, поставил бы “S”.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
mmax
сообщение 23.6.2007, 16:03
Сообщение #96





Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568



Сколько болтовни я все и усвоить не могу.

Ну сделайте просто программу которая просто подсчитывает в 1 открытом документе блокрефы с одинаковыми именами, масштабами и атрибутами или с отсортировкой атрибутов. И все. Как два пальца об асфальт.
далее пользователь сам решит что ему надо сделать. В конце концов он сам разрабатывал проэкт и знает где чего и сколько.
В ссылки лазать не надо, потомучто пользователь может спокойно открыть документ на который вставлена ссылка и там спокойно запустив вашу программу все пересчитать и добавить в общий подсчет. Главное чтобы ваша программа была адаптирована к работе с несколькими документами.
Тоесть подсчитали в одном документе. Перешли в следующий, программа спрашивает, начать новую спецификацию или добавить в созданные.
а если вы попытаетесь автоматизировать процесс полностью, недавая пользователю контроля, то у него будет очко дрожать когда он будет передавать документы по инстанциям


Цитата(Supermax @ 23.6.2007, 10:12) *
С кодом – (setq ss (ssget "_X" (list (cons 2 "*")))) - Выберает все элементы с кодом 2, кроме тех, что находятся в нутрии внешних ссылок. Не веришь? Накидай в 1.dwg блоков, они тоже имеют такую пару и посчитай длину набора (функция sslength).
Ну про сохранение ссылки это ты зря. Выбор есть. Я все время выхожу так:
(command "REFCLOSE" "D") А хотел бы сохранятся, поставил бы “S”.

Я вам руку зажег? Код (2 . 1) говорит о том что ссылка имеет имя файла 1 без DWG.
Изначально разработчиками акада в этом разделе была заложена полная жопа. и нет смысла пытаться ее раздвинуть
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 24.6.2007, 0:35
Сообщение #97


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



> Supermax :
Цитата
Внимательно вчитайся в эту строку:
(command "_.select" "BOX" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)) ^C^C)

Вчитался. Проникся. Всплылил, был неправ. Это я про себя.
Наверное, дело в том, что как только вижу DIESEL-выражения, не примененные к RTEXT или modemacro, я их даже не анализирую. Да и твой код, кстати, можно сделать более удобным для применения:
Код
(if
  (and
    (not
      (vl-catch-all-error-p
        (vl-catch-all-apply
          '(lambda ()
             (setq nn1 (getpoint "\nНачальная точка рамки выбора <Отмена> : "))
             );_ end of lambda
          );_ end of vl-catch-all-apply
        );_ end of vl-catch-all-error-p
      );_ end of not
    nn1
    (not (vl-catch-all-error-p
           (vl-catch-all-apply
             '(lambda ()
                (setq
                  nn2 (getcorner nn1 "\nКонечная точка рамки выбора <Отмена> : ")
                  );_ end of setq
                );_ end of lambda
             );_ end of vl-catch-all-apply
           );_ end of vl-catch-all-error-p
         );_ end of not
    nn2
    );_ end of and
  (progn
   ;; Погнали основной код
    )
  );_ end of if
И будет такой вариант ИМХО более удобным.
Теперь насчет доступа "внутрь" xref'a. Я не понимаю, неужели невозможно через vla-isxref получить - является ли элемент внешней ссылкой или нет? И если да, то выполнять проход по его внутренностям и добавлять в общий результат? Я не зря сказал, что
Цитата
если проходить целиком по внешним ссылкам, не фильтруя их состав, то получить список <...> с учетом внешних ссылок любого уровня вложенности особых проблем не составляет. Для активного (текущего) документа

---
В общем, как я понимаю, основная проблема именно в том, чтобы составить список объектов, так? "Фильтр" выбора (блоки с атрибутами и без и/или дин.блоки с атрибутами и без и/или остальные примитивы, удовлетворяющие каким-то внешним условиям) формируется программно в момент вызова "подсчитывающей" функции.
P.S. Сейчас еще раз скачаю первый VBA-макрос, куда-то я его дел...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 24.6.2007, 14:39
Сообщение #98





Guest Forum






Ну, теперь начну с mmax-a.
Да, болтовни не просто много, а очень много. Это очень злободневная проблема всех форумов. Я тут уже бодался с некоторыми по поводу «болтовни» в темах, но оказывается тему можно сделать нечитабельной и не только болтовней. Вот она, конкретная примера однако. Те, кто интересуется данной темой, не очень стремятся читать все с нуля, а лезут в самое пекло, в текущую дискуссию, так сказать поразмяться. Даже я сам не очень горю желанием туда лезть и что-нибудь корректировать. Есть много вариантов бороться с этим, например, отредактировать все нафиг так, чтобы материал темы стал похож на художественную книгу, чтобы можно было читать и ржать или плакать. Комментатора что ли завести, как на футбольных матчах? Или еще один вариант, это периодически подводить итоги и «обнулять» исходную точку дискуссии на каждой странице темы. Чтобы далеко не ходить в поисках первоисточника. Но все лень, проклятая лень, вот это все написать не лень, а в два раза меньше для «освежения» понимания происходящего – лень. Но я как-нибудь напрягусь. Обещаю.
Далее: Первый абзац – ну так оно примерно и получится, только на достигнутом останавливаться облом. В Excel уже сбрасывали, и лежа, и стоя, и по диагонали. В Word – аналогично. В Layout любые рамки, включая создание самих Layout-ов потоком. Даже настройка размеров рамки под контур границы печати. Все постигнуто и достигнуто. Осталось только сделать так, чтобы любая прихоть заказчика (про проектировщиков молчу, им лишь бы деньги были) была удовлетворена. Поверь, если ты можешь удовлетворить заказчика, остальных ты можешь удовлетворить пять раз подряд без перерыва.
В ссылки лазить надо. Тебе не надо – не лазь. А мне надо – судьба. Если ссылку открыть отдельным документом – она будет иметь свое пространство. При подсчете элементов в этом пространстве будут созданы новые таблицы, которые надо будет сливать с таблицами других документов. Такое возможно и будет, поскольку не всегда работы объединены в одну модель, но это потом. Сейчас же я заказчику на огромном экране демонстрирую модель здания и отвечаю на его вопросы с помощью его воображения. Оно, это его воображение, очень меня беспокоит. Точнее его отсутствие. И вопросы «А сколько это будет стоить?», «А это за какое время можно сделать?» мне уже сняться.
Если сделать программу, которая может залезть в ссылку, то не лазить туда – вопрос вкуса.
Далее: Да, эта сволочь, покопалась у себя в нутрии и нашла этот файл, но ручку зажгла только одну, ту, которая на самом верхнем уровне. В набор вставить она внутреннюю ссылку не захотела. И мы по прежнему туда залезть не можем. С жопой целиком и полностью с вами согласен. Вот kpblc туда слазил, а впечатлениями делиться не спешит, видать там много интересного и нужного добра лежит. Но я все же туда дорогу отыщу. Я не мазохист по жопам лазить, но все указатели на дороге показывают именно туда.
Вот один из них:
(nentsel "Укажи блок:")
Выдает:
(<Entity name: 7efdda58> (10251.0 -3557.01 0.0) ((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0) (9368.0 -3560.07 0.0)) (<Entity name: 7efd2e40> <Entity name: 7efb5da0> <Entity name: 7efa5078> <Entity name: 7ef9b090> <Entity name: 7ef820a8>))

Вот это:
(<Entity name: 7efd2e40> <Entity name: 7efb5da0> <Entity name: 7efa5078> <Entity name: 7ef9b090> <Entity name: 7ef820a8>)
С лева, на право 1. – имя самого блока; 2. – имя ссылки куда он вставлен; 3. – имя ссылки куда вставлена первая ссылка; 4. – имя ссылки куда вставлена вторая ссылка; 5. – имя ссылки куда вставлена третья ссылка. Последнее имя можно получить выковыряв его из простого набора в текущем пространстве созданного функцией ssget (в смысле, набор создан).
Как эти имена получить без указания на деталь чертежа – вопрос открытый, поиски ответа продолжаются.

Теперь к kpblc:
Мой вариант красившее. И зелененькая, и синенькая, и всего одна строчка. И работает. А у тебя белая, как я и раньше писал с ssget в паре. С (command “_select” “BOX” … такое вытворяет! И ^C^C в конце не помогает выйти из коллапса. Что я, думаешь не пробовал? Да я все почти перепробовал. Остановился на этом варианте, как на наиболее показательном. Вот ее своими проверками на политкорректность и совершенствуй. Красивый лисп, это не только волны по экрану, а еще и маленькое такое зернышко хитрости. Все гениальное не всегда – просто. Но иногда и простота бывает гениальной.
Так, увлекся. Пардон.
Далее:
Колись как пройти целиком по внешним ссылкам. Хрен с ними, их не так уж и много будет, можно и все подряд открывать и этот клочек пространства прочесывать.
Вот мои кады такой функции Lisp-а как vla-isxref не знают. Может у тебя библиотека какая-нибудь подгружена? Вот vla-get-IsXref имеется. Ну я ей и пользуюсь по мере возможности (см. пост №73). Список ссылок, попавших в набор имею, но только в верхний, в текущем пространстве модели сделанный. А мне нужны все имена, причем в привязке вернего уровня (текущего пространства модели), а не взятые при открытии ссылок из пространства _refedit.
КОЛИСЬ!!! Или сделай функцию, которая включает ручки всем ссылкам.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 24.6.2007, 21:10
Сообщение #99


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Цитата
Вот мои кады такой функции Lisp-а как vla-isxref не знают.

Ну, знаешь, когда пишешь без запущенного акада, такого класса ошибку легко допустить. Согласен, есть только vla-get-isxref, моя ошибка.
Цитата
Остановился на этом варианте, как на наиболее показательном. Вот ее своими проверками на политкорректность и совершенствуй.

В любой момент пользователь (то бишь я) нажимает Esc - и чего будет в результате? Праально, возврат ошибки. Который надо обрабатывать. Что лично мне делать в ломак. ИМХО гнаться за красивостью на экране в данном случае - излишество. Как бы то ни было - дело твое.
Далее.
Как ты проходишь по всему составу блока? В этом смысле доступ к составу внешней ссылки для активного (текущего) документа ничем не отличается.
Вот и получай: если ent - vla-указатель на вхождение внешней ссылки, то пройтись по ее составу можно так:
Код
(vlax-for subent
          (vla-item
            (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
            (vla-get-name ent)
            );_ end of vla-item
;; И здесь все что надо получить - в обработку.
  );_ end of vlax-for

Дерзай. Заключай в рекурсивную функцию и соединяй результаты.
Цитата
Или сделай функцию, которая включает ручки всем ссылкам.
На хрена, если и без включения ручек я подобным кодом пройдусь по всем ссылкам, попавшим в набор?

Сообщение отредактировал kpblc - 24.6.2007, 21:12
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 24.6.2007, 21:25
Сообщение #100





Guest Forum






(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
И как же это ты совместил? Если не секрет конечно?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 24.6.2007, 21:32
Сообщение #101


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



А чего там совмещать-то? Вопроса не понял.

Сообщение отредактировал kpblc - 24.6.2007, 21:35
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.6.2007, 8:04
Сообщение #102





Guest Forum






О! Заработало. А вчера давало ошибку сервера. Пардон. Щас прогоню дальше.
Только я нашел способ получения имен. Да, с этими именами, этим разработчикам када, пельмень им в одно место, не все гладко.
Айн момент. Щас подготовлю текст и выдам.

К стати объясни, будь добр, от куда брать ent?

Сообщение отредактировал Supermax - 25.6.2007, 8:09
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 25.6.2007, 8:56
Сообщение #103


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Как откуда? Из набора, который ты создал до этого.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.6.2007, 9:18
Сообщение #104





Guest Forum






Мне нужен список DXF пары -1 из пространства модели. Чтобы это значение совпадало со значением, получаемым (entget (car (ensel))).
Через функцию (tblobjname "block" (car (acet-table-name-list "block"))) дает не те значения. В набор не лезут. DXF код -2 в набор лезет, но ручки включать не хочет.
То что ты мне дал я и так знаю. Я весь dump перековырял и даже в М.S. Project дерево с раскрывающимися подразделами сделал. И что? Имен нет и vla-объектов вставленных элементов тоже. Тыкаешь на простой или динамический блок - есть, а на ссылку - дуля с маком.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 25.6.2007, 9:29
Сообщение #105


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Слушай, я сейчас начну шипеть и плеваться.
Ты путаешь описания блоков и вхождения блоков. Зачем тебе DXF, если и без него неплохо живется?
P.S. Полный код все равно не покажу пока - добро не получено.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.6.2007, 11:09
Сообщение #106





Guest Forum






Вскрываю не документированные функции. Уже много вскрыл. Надо куда-нибудь скидывать результат. На DWG-RU может, в AutoLisp директорию? Но там нет специального раздела по недокументированным функциям.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 25.6.2007, 13:28
Сообщение #107


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Это какие же функции недокументированы?
---
Добавлено: Но тему-то создать никто не запрещает wink.gif

Сообщение отредактировал kpblc - 25.6.2007, 13:30
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.6.2007, 15:53
Сообщение #108





Guest Forum






kpblc, тема не катит. надо _lspdump развернуть и все функции сделать кнопками. Тыкаеш в функцию - раскрывается окошко с ее описанием. Полещуку это навеное не понравится. А может и понравится. Надо спросить. Я ему на сайт уже начал это делать. Только как оглавление к его книге. А вот не документированные - это дело интересное. Угрожающим заголовкам в лип-файлах не противоречат.
Я например надыбал, что не все функции подгружены, из тех, что в лисп-файлах лежат. А там есть такие, что очень даже пригодились бы. Только описывать их надо по какой-то системе, и куда-то складывать. Эту прозу должен контролировать модератор, то есть через него все должно фильтроваться. Ты сечешь куда клоню?
Могу поделиться уже почищенным думп-файлом.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 25.6.2007, 16:32
Сообщение #109


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Цитата
Тыкаеш в функцию - раскрывается окошко с ее описанием

Я таким точно пользоваться не буду. Есть VBA-шная справка, ее достаточно.
Цитата
А вот не документированные - это дело интересное

Что за недокументированные функции, я так и не допетрил. Есть некоторые функции ET, благополучно перекочевавшие в ядро AutoCAD'a, есть некоторые особенности поведения, но недокументированных лично я не могу вспомнить. Приведи хотя бы один пример.
Цитата
Я например надыбал, что не все функции подгружены, из тех, что в лисп-файлах лежат. А там есть такие, что очень даже пригодились бы.

Это про какие лисп-функции (файлы) сейчас разговор? Или вопрос в автозагрузке всех этих лиспов? Если второе - сходи, например, сюда (сам пользуюсь аналогом этого), или сюда. Вариантов по автозагрузке много.
Цитата
Только описывать их надо по какой-то системе, и куда-то складывать.
"САПР на базе AutoCAD - как это делается. Там все это очень неплохо описано. Если не в ломак, скачай у меня CADWare (это не в порядке рекламы), установи и посмотри, как лиспы лежат. Хотя сейчас там уже многое поменялось, но система осталась прежней. Практически.
---
Добавлено: там при установке на 2006 слетали иногда менюхи, так что не пугайся. Если что - пиши, скажу чего надо сделать
---
Цитата
Ты сечешь куда клоню?
Не-а, я сегодня тупой smile.gif
Цитата
Могу поделиться уже почищенным думп-файлом.
Давай. А то, опасываюсь, скоро мне придется здесь пищать нечто типа: "Куплю оверлок. Можно б/у. Можно сломанный. Хоть узнаю, что это такое" wink.gif

Сообщение отредактировал kpblc - 25.6.2007, 16:33
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.6.2007, 17:16
Сообщение #110





Guest Forum






Kpblc, ты не обижайся, но тебе нужно было не программистом, а в театральный. Очень уж ты любишь на публику работать. Ладно, для публики:
Не документированная команда (ну, Полещук ее задокументировал однако) _lspdump создает текстовый файл с расширением .dmp а имя файла соответствует имени файла .dwg, открытого у вас в это время в каде, где перечисляются все загруженные на данный момент функции и созданные глобальные переменные (с их значением разумеется).
Переименовав расширение на .txt читаем:
Все строки начинающиеся с ; - функции лиспа в виде сохраняемого макроса под глобальным именем
;(setq ACET-INSERT-ATTRIB-GET #<SUBR @07fec3fc ACET-INSERT-ATTRIB-GET> ) типа этого
следует очень длинный список и далее
(setq ACARROWORIGIN2 8)
следуют списки имен переменных и занесенные в них значения.
Этот думп-файл, как я его называю, - дышит. Каждый раз, как вы создаете переменную, или функцию, она сюда попадает (ну после перезапуска _lspdump разумеется).
Берем открываем в Program Files/AutoCAD.../ папочку /Express/ Выделяем все файлы с расширением .lsp и копируем их в буфер обмена. Создаем себе где-нибудь новую папочку и вставляем их туда. Затем, долго и упорно переименовываем их из .lsp в .txt.
Выходим из этой папочки и выделив ее мышкой, нажимаем правую кнопень мышки, в выпавшем меню выбераем "найти" и вставляем имя интересующей на функции в окошко "слово в файле" в окошке "имя файла" ставим *.*.
Поиск мгновенно находит те лиспы, в которых она применяется и по тому, как она использована можно легко определить и количество и значение ее аргументов.
Пример:
(acet-table-name-list "block") "block" - это имя таблицы, как и "layer", и многие другие
по таким вот строчкам:
(setq lst (acet-table-name-list (list "block" 1 4 16))) ;exclude anonymous and xref blocks
даже тупой осел поймет, что функция может фильтровать выдаваемое содержимое.
Тем, кто имеет напряг с английским могу порекомендовать автоматический переводчик
http://pereklad.online.ua/ загружаете туда весь текст и переводите нажав кнопень "перевести".
Вернемся к функции - выдает список имен всех (ну чего там указали) типа блоков к примеру, включая внешние ссылки и прочее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.6.2007, 17:43
Сообщение #111





Guest Forum






Продолжу. Автозагружать всю эту хрень - упаси бог! А вот поковырятся в ней - самое оно. С автопереводчиком за пару секунд все переводишь и понимаешь, даже если и без него половину можешь прочесть, но то-ж половину, а надо все.
Выкладывать эти лиспы на тему нельзя. Там ясно сказано - Правительство США ограничело свободное копирование и использование ... и так далее. Чтоб им рубль на голову упал!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.6.2007, 18:01
Сообщение #112





Guest Forum






Есть к примеру переменная *LAST-VALUE* (звездочки ее собственные). В переводе на наш великий и могучий - "последнее значение". Создается автоматически и она содержит значение последней сохраненной переменной. Поясню: Коммандой setq создавали и создавали, и переписывали разные переменные, но какая-то последняя сохранилась. Когда создаешь коммандой (set (... переменную с изменяемым программно именем и если в значение этой переменной вставить хотя бы часть (изменяемую) этого имени, то при помощи переменной *LAST-VALUE* всегда можно узнать и "что" записано и ориентировку "куда" записано.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.6.2007, 18:11
Сообщение #113





Guest Forum






Kpblc, ты-ж модератор на dwg-ru, чего скрывать? Все знают это. Вот тебе и карты в руки. Собирай от разных челов инфу про эти функции и складывай в копилку. Только не у себя дома. Тебе, как программисту будет очень полезно. Полещук (опять Полещук, ну и что? Раз нету больше на кого сослаться?) правда говорит, что это очень трудное занятие - разбираться с недокументированными функциями, но полезное - однозначно.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 26.6.2007, 0:47
Сообщение #114


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



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

Ну есть, наверное, такое. Хотел ситуацию немного разрядить, надеюсь, удалось smile.gif
_lsdump, наверное, интересная команда. Но я как-то привык работать с (atoms-family), мне инфы от него хватало - она ж, собака этакая, как правило, требуется "здесь и сейчас, пока мысля не уползла". Но за инфу спасибо, сегодня попробую smile.gif Кстати, acadinfo, по-моему, выполняет аналогичные действия. И, кстати, еще и системные переменные выводит smile.gif
---
Добавлено: Попробовал. Пока останусь, наверное, на старом.
---
ET, к сожалению, не безгрешны. Есть у них и свои баги, которые отловить "снаружи" достаточно тяжко зачастую. Кроме того, ET в AutoCAD LT запустить иногда становится невозможно - LT Extender, которым я пользуюсь, по непонятным причинам иногда просто отказывается загружать fas. Чего ему не нравится - неясно. А работать надо wink.gif
Продолжу smile.gif
Цитата
Автозагружать всю эту хрень - упаси бог! А вот поковырятся в ней - самое оно.

Нда? Кхе, найди, ради интересу, описание (в смысле defun) acet-error-init - он у них стандартный обработчик ошибок, судя по наименованию. Лично у меня описания не обнаружено. Ни в каком виде. И прально, оно болтается в одном из acedutil*.fas. Я уже говорил, и еще раз повторю - дизассемблировать эти файлы я отказываюсь напрочь.
*LAST-VALUE* использую, кстати, только в отладочных целях. Делать на нее ставку я б не стал - обращаться к ней надо отдельно. А зачем, если есть пользовательские переменные? К ним обращение ИМХО более удобно. Но спорить не буду.
Цитата
Kpblc, ты-ж модератор на dwg-ru, чего скрывать? Все знают это. Вот тебе и карты в руки. Собирай от разных челов инфу про эти функции и складывай в копилку. Только не у себя дома. Тебе, как программисту будет очень полезно. Полещук (опять Полещук, ну и что? Раз нету больше на кого сослаться?) правда говорит, что это очень трудное занятие - разбираться с недокументированными функциями, но полезное - однозначно.

Ну да, я там модер. И что? Понимаешь, недокументированные функции, судя по форумам и лиспам, которые и публикуются, и обсуждаются, и (чего греха таить) мне присылаются - в лиспе не используются. Устаревшие - да (в частности, vla-get-color и vla-put-color - официально их дальнейшая судьба неизвестна, но, пока есть AIC, они наверняка будут здравствовать). Недокументированные функции чаще используются в ObjectARX, да и там на них особо не обопрешься (сужу по личному общению с А.Н.Ривилисом по аське).
Разбираться с недокументированными функциями - дело полезное, конечно. Но (как бы сказать-то, чтоб никто не обиделся) - лично мне оно пока не требуется. Мне зачастую более важно поведение AutoCAD'a на стандартных функциях.
Там-то тоже проколов полно - начиная от особенностей вставки анонимных и динамических блоков и таблиц и заканчивая недокументированными (официально) моментами ObjectDBX-интерфейса.
И последнее. Если хочешь, я могу тебе накатать код, который для указанного примитива (или списка примитивов, или набора) покажет все его (их) свойства? Хотя чего я спрашиваю - лови:
Код
(defun _kpblc-get-properties-and-methods (ent / res lst_prop lst_meth)

  (defun loc:conv-to-vla (ent / res tmp)
    (if (not (vl-catch-all-error-p
               (vl-catch-all-apply
                 '(lambda ()
                    (setq res (cond
                                ((= (type ent) 'ename)
                                 (setq ent (vlax-ename->vla-object ent))
                                 )
                                ((= (type ent) 'vla-object) ent)
                                ((= (type ent) 'str)
                                 (if (not (vl-catch-all-error-p
                                            (vl-catch-all-apply
                                              '(lambda ()
                                                 (setq tmp
                                                        (vlax-ename->vla-object (handent ent))
                                                       );_ end of setq
                                                 );_ end of lambda
                                              );_ end of vl-catch-all-apply
                                            );_ end of vl-catch-all-error-p
                                          );_ end of not
                                   tmp
                                   );_ end of if
                                 )
                                ((= (type ent) 'list)
                                 (vlax-ename->vla-object (cdr (assoc -1 ent)))
                                 )
                                );_ end of cond
                          );_ end of setq
                    );_ end of lambda
                 );_ end of vl-catch-all-apply
               );_ end of vl-catch-all-error-p
             );_ end of not
      res
      );_ end of if
    );_ end of defun

  (setq lst_prop (acad_strlsort
                   (mapcar '(lambda (a)
                              (substr a 9)
                              );_ end of lambda
                           (vl-remove-if-not
                             '(lambda (x) (wcmatch (strcase x) "VLA-GET*"))
                             (atoms-family 1)
                             );_ end of vl-remove-if-not
                           );_ end of mapcar
                   );_ end of ACAD_STRLSORT
        lst_meth (acad_strlsort
                   (mapcar '(lambda (a)
                              (substr a 5)
                              );_ end of lambda
                           (vl-remove-if-not
                             '(lambda (x)
                                (and (wcmatch (strcase x) "VLA-*")
                                     (not (wcmatch (strcase x) "VLA-GET-*"))
                                     );_ end of and
                                );_ end of lambda
                             (atoms-family 1)
                             );_ end of vl-remove-if-not
                           );_ end of mapcar
                   );_ end of ACAD_STRLSORT
        ent      (cond
                   ((and (= (type ent) 'list) (cdr (assoc -1 ent)))
                    (list (loc:conv-to-vla ent))
                    )
                   ((member (type ent) (list 'ename 'vla-object))
                    (list (loc:conv-to-vla ent))
                    )
                   ((= (type ent) 'pickset)
                    (mapcar 'loc:conv-to-vla
                            (vl-remove-if 'listp (mapcar 'cadr (ssnamex ent)))
                            );_ end of mapcar
                    )
                   ((= (type ent) 'list)
                    (mapcar 'loc:conv-to-vla ent)
                    )
                   );_ end of cond
        res      (mapcar
                   '(lambda (x)
                      (list
                        (cons
                          "properties"
                          (vl-remove
                            'nil
                            (mapcar
                              '(lambda (a / res)
                                 (if (vlax-property-available-p x a)
                                   (cond
                                     ((not (vl-catch-all-error-p
                                             (vl-catch-all-apply
                                               '(lambda ()
                                                  (setq
                                                    res (cons a (vlax-get-property x a))
                                                    );_ end of setq
                                                  );_ end of lambda
                                               );_ end of vl-catch-all-apply
                                             );_ end of vl-catch-all-error-p
                                           );_ end of not
                                      res
                                      )
                                     (t
                                      (cons a "ERROR: Блин, мало данных для получения!")
                                      )
                                     );_ end of cond
                                   );_ end of if
                                 );_ end of lambda
                              lst_prop
                              );_ end of mapcar
                            );_ end of vl-remove
                          );_ end of cons
                        (cons "methods"
                              (vl-remove-if-not
                                '(lambda (a) (vlax-method-applicable-p x a))
                                lst_meth
                                );_ end of vl-remove-if-not
                              );_ end of cons
                        );_ end of list
                      );_ end of lambda
                   (vl-remove 'nil ent)
                   );_ end of mapcar
        );_ end of setq
  res
  );_ end of defun

Функция принимает на вход всего один параметр - это может быть ename- или vla-указатель на примитив, строка (воспринимается как хендл примитива), список (entget), список примитивов (в любом из предыдущих представлений, возможно смешанное представление) или набор примитивов, полученный через (ssget). Что возвращает - сам посмотри. Только эта функция на самом деле не больше чем гимнастика ума, так сказать. Реальной области ее применения я не вижу (как правило, требуется более конкретное решение).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 26.6.2007, 13:06
Сообщение #115





Guest Forum






Помусорю немного.
Функция шеснадцатиричного счетчика:
(st-16 <аргумент>)
<аргумент> - любое отличное от nil значение (строка, цифры, выражения и пр.)

Возвращает строку с постоянно увеличивающимся шестнадцатиричным кодом на 6 позиций от "000000" до "ffffff" (от запуска функции к ее следующему запуску). Хранит значения "колесиков" в переменных st-a, st-b, .... st-f.

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

Использование:
Перебор значений меток на предмет обнаружения положительного отклика функцией vla-HandleToObject и других хакерских штучек.

Код
(defun st-16 (x / )
(if (and st-a st-b st-c st-d st-e st-f) T (setq st-a 0 st-b 0 st-c 0 st-d 0 st-e 0 st-f 0))
(if x
(if (<= st-a 14) (setq st-a (1+ st-a)) (progn (setq st-a 0)
(if (<= st-b 14) (setq st-b (1+ st-B)) (progn (setq st-b 0)
(if (<= st-c 14) (setq st-c (1+ st-c)) (progn (setq st-c 0)
(if (<= st-d 14) (setq st-d (1+ st-d)) (progn (setq st-d 0)
(if (<= st-e 14) (setq st-e (1+ st-e)) (progn (setq st-e 0)
(if (<= st-f 14) (setq st-f (1+ st-f)) (setq st-a 0 st-b 0 st-c 0 st-d 0 st-e 0 st-f 0))))))))))))
); конец второго if
(apply 'strcat
(reverse (mapcar '(lambda (j)
(if (= j 0) (setq st "0") T)
(if (= j 1) (setq st "1") T)
(if (= j 2) (setq st "2") T)
(if (= j 3) (setq st "3") T)
(if (= j 4) (setq st "4") T)
(if (= j 5) (setq st "5") T)
(if (= j 6) (setq st "6") T)
(if (= j 7) (setq st "7") T)
(if (= j 8) (setq st "8") T)
(if (= j 9) (setq st "9") T)
(if (= j 10) (setq st "a") T)
(if (= j 11) (setq st "b") T)
(if (= j 12) (setq st "c") T)
(if (= j 13) (setq st "d") T)
(if (= j 14) (setq st "e") T)
(if (= j 15) (setq st "f"))
(setq st st)
); конец lambd-ы  
(list st-a st-b st-c st-d st-e st-f))); конец reverse и mapcar-a
); конец apply
); конец defun st-16


Сообщение отредактировал Supermax - 26.6.2007, 13:26
Причина редактирования: нужно пользоваться тегом code и таких траблов не будет
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
LordN
сообщение 26.6.2007, 13:19
Сообщение #116


МОДЕРАТОР


Группа: Модераторы
Сообщений: 10903
Регистрация: 3.7.2004
Пользователь №: 32



нужно пользоваться тегом code и таких траблов не будет.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
andrey R
сообщение 26.6.2007, 13:24
Сообщение #117


инженер ВК


Группа: Модераторы
Сообщений: 41682
Регистрация: 11.7.2006
Из: Москва
Пользователь №: 3370



Всем модераторам было отправлено уведомление от Supermax через кнопку «Жалоба».
Э, на камбузе!
Что еще за фигня в тексте? Не могу смайлик убрать!

Уважаемый Супер!
Сделайте одолжение, формулируйте свои жалобы в ином тоне. По хорошему прошу, по доброму...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 26.6.2007, 13:25
Сообщение #118


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Ребят, а смысл какой ковыряться с хендлами, скажите? Вы ж проходите целиком по файлу (причем вынуждены отлавливать ошибки преобразования), потом получать примитив, потом - его владельца, определять владельца, разворачивать свойства и методы, необходимые для дальнейшей обработки, при этом избегать дублирования... Не много ль будет? По-моему, вы идете не с той стороны.
Кстати, функции преобразования шестнадцатиричного числа в десятичное и обратно показывались на autocad.ru: http://www.autocad.ru/cgi-bin/f1/board.cgi?t=5624Ob например.
---
Добавлено: [offtop]Опа, какие тут страсти-то кипят, оказывается...[/offtop]

Сообщение отредактировал kpblc - 26.6.2007, 13:26
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 26.6.2007, 13:35
Сообщение #119





Guest Forum






Kpblc, посмотрел, ничего интересного. Во первых у меня это счетчик. Во вторых, строить счетчик на десятичном принципе, а потом переводить в шестнадцатиричное значение - лисп, километр длинной. В третьих, здесь я могу и строкой, и списком, и задом на перед и отдельными позициями через пробел, а при переводе - только как по науке. Негибко и громоздко.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 26.6.2007, 14:03
Сообщение #120





Guest Forum






Kpblc, это ты ко мне во множественном числе? Нельзя столько за компьютером сидеть. Видишь, уже двоится в глазах. Про метки тобишь Handl-ы ты не догоняешь преследуемые цели. Тебе сразу мерещаться какие-то базы и сложные археологические раскопки. А мне интересен принцип определения номера метки. Там сплошные пробелы, как сито, но постоянно одни и теже начальные условия записи. Вот и анализирую. Щас списочек составлю, закономерность вычислю и обнародую.
Потом, возвращаемый vla-объект сразу проверяется на принадлежность (сам понимаешь к чему). И мне интересен ответ на следующий вопрос: Вот я nentsel-ом пробиваю все ссылки насквозь и получаю значении примитива - APP: имя и метку, которые меня устраивают, но эти данные уже были в описании базы рисунка, или созданы путем конвертации в момент моего воздействия на рисунок? Это очень важно знать, поскольку может и искать нечего, или искать надо не то, что я ищу.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

20 страниц V  « < 2 3 4 5 6 > » 
Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274




Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqvWgxEU

ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqvybpdW

Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума






RSS Текстовая версия Сейчас: 5.8.2025, 18:32
Политика ООО ИИП «АВОК-ПРЕСС» в отношении обработки персональных данных