|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
05.06.2007, 07:28 | #1 | |
На заметку программистам
Thượng Tá Quân Đội Nhân Dân Việt Nam
44d32'44"С, 33d26'51"В
Регистрация: 14.03.2005
Сообщений: 13,381
|
||
Просмотров: 17654
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Заметка интересная, позвольте несколько встречных вопросов.
1. Вместо _-insert можно попробовать использовать ObjectDBX-доступ к библиотекам блоков и через vla-copyobjects копировать описания блоков (кстати, в CADWare я именно так и сделал). А собственно вставку выполнять старой незаменимой _change. 2. Возможно ли пройтись по всем блокам (я имею в виду библиотеки блоков) и установить блоки "unitless"? Если да, то, наверное, это будет более удобно. Правда, я не особо представляю себе, как быть с файлами-блоками... Добавлено: Ай-яй-яй, моя вина, не посмотрел. Файлы-то тоже можно сделать unitless Так что часть вопроса 2 снимается
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Кроме того - впереди Brics. Какие там особенности встретятся - еще не знаю. Цитата:
Кроме того, моих-то библиотек уже меньше, чем пользовательских. А в них может быть что угодно. Берут библиотеки из всех версий, от фирм. Так что решение должно быть независимым от свойств файла с блоками. |
|||
|
||||
Регистрация: 14.03.2006
Сообщений: 863
|
Цитата:
|
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
У себя в своих блоках после всех эих непонятных перемасштабирований устанвил Insunits в безразмерный.
как-то писал код для перемасштабирования так вот смутно оттуда помню, для того, чтобы Автокад не перемасштабировал блок, нужно при Insunits=0 менять свойства XEffectiveScaleFactor XScaleFactor YEffectiveScaleFactor YScaleFactor ZEffectiveScaleFactor ZScaleFactor именно в таком порядке, сначала XEffectiveScaleFactor=1 потом XScaleFactor=1 потом XScaleFactor=нужное Код:
Последний раз редактировалось VVA, 19.09.2015 в 12:05. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
>VVA
Это не тот случай. Надо не свойства вставленного блока менять, а иметь визуально видимый, предварительно смасштабированный блок "на курсоре", в момент запроса точки вставки, но до ее указания. Чтобы юзер видел, что и куда он вставляет. При этом еще у блока, возможно, есть атрибуты. Возможно, его еще придется повернуть. И все это в любой ПСК, в том числе в 3D. Сделать это можно только через command. С объектными методами проблем нет - какой масштаб задали, тот и будет. Но для объекта надо сначала запросить и передать точку, и в момент запроса точки блок не виден. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ээээ... Уважаемые, ShaggyDoc & VVA, я считаю вас своими учителями, но позвольте и ученику высказаться. Почему забыли про INSUNITSDEFSOURCE и INSUNITSDEFTARGET? Я, конечно, понимаю, что у меня вставка блока сейчас отработана только на 2D, но (обнаглею) посмотрите мой вариант вставки блока:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Я пошел другим путем, на сервере есть база данных, в ней лежат списки для entmakex... Короче, если блока нет в файле, то я его быстренько создаю. Чтение идет из единой базы данных - это мне нравится. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Все-таки выходной посередине рабочей недели расхолаживает У меня _-insert используется только в том случае, если библиотеку блоков никаким другим способом "не вскрыть" objdbx'ом. Вставка описания блока из библиотеки у меня происходит так (пока багов не встречал):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
>Кулик Алексей aka kpblc
Все эти функции вполне нормальные. Но есть "нюансы, значить". 1. 3D и произвольная ПСК обязательны для мультивставки. Проверь, это не больно. 2. Впреди BricsCAD. Что там и как с объектами - не исследовано. Судя по глюкам в самом Автокаде, там будет не лучше. 3. DBX хорош, если есть он. А если нет (Brics со товарищи), то стратегическая функция выпадает. Цитата:
В базе данных мы, например, храним координаты объектов в ГИС. Практически это немногим отличается от блоков. В БД можно, и это проще, просто запихать блоки. Это удобнее для централизации - хоть через Интернет вставляй. Но это уже другая тема, не про вставку... |
|||
|
|||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Цитата:
Суть в том, что для атрибутов в блоке, имеющих "немировую систему координат" она преобразовывается в текущую. Мой баг, не спорю. Но в остальном пока нормально работает. Может, я не полностью тестирование выполняю? Цитата:
Цитата:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
||||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Здесь мы начали обсуждать детали про "мультивставку", непонятные многим.
Приведу постановку задачи, может быть кто-то решит собственным методом. Итак, надо написать функцию с условным именем dwgru-multi-insert Вызов: Код:
block_name - имя блока, который уже определен x_scale - масштаб блока по Х, в том числе и отрицательный y_scale - масштаб блока по Y, в том числе и отрицательный и отличный от X block_angle - угол поворота блока в радианах или NIL для запроса угла msg_insert - приглашение для указания точки вставки msg_angle - приглашение для указания угла поворота Результат: примитив вставки или NIL при отказе. Что должна делать: 1. Предлагать в цикле, до пустого ввода, вставлять блок block_name. Блок должен при этом визуально висеть на курсоре, предварительно отмасштабированный до x_scale и y_scale. Пользователь должен видеть изображение блока до указания точки вставки (включая первую вставку) и приглашение msg_insert. Указывать точку вставки можно любым стандартным методом (мышкой, с клавиатуры, с использованием объектной привязки и прозрачных команд). 2. После указания точки вставки, если block_angle NIL (исправлено по замечанию Alaspher) выдается приглашение msg_angle для указания угла поворота вставленного блока (визуального или с клавиатуры, или любым стандартным методом) относительно точки вставки с углом 0 по умолчанию. В момент указания поворота прерывание работы должно блокироваться. Если block_angle NIL, угол поворота остается 0. 3.Примерный диалог: Command: Точка вставки <Хватит>: 100, 100, 100 Угол поворота <0>: 45 Точка вставки <Хватит>: 100, 1000, 100 Угол поворота <0>: 0 Точка вставки <Хватит>: Пустой ввод и выход Дополнительные обязательные требования: 4. Вставка должна корректно производиться в любой ПСК в плоскости XY. Координаты точки вставки при любом способе ввода должны быть в ПСК. 5. Блок может иметь атрибуты любых типов. При наличии редактируемых атрибутов после вставки должен выводиться стандартный диалог редактирования атрибутов. 6. Функция должна работать «чисто» — во время работы за курсором не должны тянуться «резиновые» нити, а при любом, в том числе аварийном завершении, не должны оставаться «трупы» временных объектов и прочий мусор. 7. Работа функции не должна завершаться нажатием клавиши <Esc> в качестве основного средства прерывания вставки (хотя возможно в качестве дополнения к штатному выходу при пустом вводе; при этом не должна прерываться основная программа); Все условия являются обязательными! Предлагаю желающим потренировать свои мозги. Наш старый вариант имеется в книге "САПР на базе AutoCAD - как это делается", глава 22, листинг 22.25. Он уже подвергался корректировке. А можно и не смотреть, чтобы сделать на свежую голову. "Забьем Мике баки?" (c) |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Маленькое дополнение: при использовании отрицательных масштабов вставки блока поведение атрибутов, мягко говоря, вызывает серьезные нарекания. Желающим предлагаю попробовать
P.S. Я проворачивал на 2005 и 2006, там ситуация не менялась. Может, в 2008 и решена эта проблема, не знаю. Но прога-то должна работать в любой версии от 2002, так? P.P.S. ShaggyDoc, тут (ИМХО, конечно) будет явно не одна функция
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Код:
По поводу теток, я вообще им не доверяю работу с базой данных - все делается за кадром - если создается блок для дальнейшей работы, значит отправляем его в базу... |
||||
|
|||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
А вот насчет "я вообще им не доверяю работу с базой данных" как раз самое опасное - привязка к конкретному "я". Все мы люди живые, а некоторые даже и смертные. Нет человека - нет технологии. Впрочем, это побочная тема, не собираюсь переубеждать. Это не мое собачье дело. Цитата:
Цитата:
Цитата:
|
||||
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Еще раз прочитал тему, в связи с этим вопрос: так проблема во вставке имеющегося описания блока или во вставке описания блока из другого файла, с, возможно, "нестандартными" insunits? Чего-то я торможу...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||