|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Цитата:
Нужно вставить 3D тело (для простоты - цилиндр) с поворотом в пространстве вдоль известной 3D полилинии. Из панели тело можно вставить блоком с последующим расчленением - это уже мне давно kpblc объяснил. Да, повтор может захотеться ![]() |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Алекс Юстасу, лучше dwg, потому как неясно на скрине, где базовая точка вставки блока. Как я понимаю, Первая исходная точка для _align у нас - это точка вставки блока, она же его базовая точка, - она спрашивается у пользователя при вставке блока. Вторая исходная точка находится в плоскости цилиндра? Где именно? Ее можно, наверняка, рассчитать математически или геометрически, упразднив один клик. Первая целевая точка и Вторая целевая точка - похоже, что это две любые точки на 3D полилинии, т.е в идеале лучше у пользователя попросить не указать две точки, а выбрать полилинию? И, судя по всему, в опциях _align'a надо ответить Нет на вопрос Масштабировать...? .
Тогда лучше лисп, ну или макролисп, - это как больше по душе. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
ИМХО надо искать тему "Программистам на заметку" - там были варианты программной вставки блока.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Действия видятся примерно так: 1. Указываю точку, туда вставляется блок. 2. Указываю точку блока, которую нужно поворачивать. 3. Указываю точку, в которую нужно повернуть. 4. Блок поворачивается относительно точки вставки. 5. Блок разбивается. Указывать линию, вдоль которой нужно выравнивать блок, не общее решение, т.к. такой линии может не быть. Повтор команды тоже под вопросом, т.к. большинство команд Автокада работает без него. Хотя, сам по себе повтор - очень экономит время-силы. Про Ваш макрос можно невеже узнать? ^C^C_-insert;"block_name";_s;1;_r;0;\_rotate;_l;;(getvar "lastpoint");_R;(getvar "lastpoint");\\_explode;_l; Что такое _s после имени блока, что такое _l после поворота и разбиения? Про getvar боюсь даже спрашивать ![]() |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Ну раз
и есть мечта ![]() а также то предлагаю остановится на макролиспе. Тут несколько иной синтаксис, но разобраться несложно. Определяем нашу новую функцию: Код:
Код:
"1" - величина масштаба _R - _rotate - поворот, он пока у нас нулевой ("0") pause - это как в макросах слэш "\", то есть пауза программы, ожидание ответа пользователя Так вот. Мы вставили блок. Теперь надо его "отЪэлайнить" ![]() Код:
"" - пустой ввод, enter, правая кнопка мыши (getvar "lastpoint") - эта конструкция позволяет получить координаты последней фигурирующей точки, а мы помним, что определили ее в pause при выборе точки вставки блока. Ведь помним, да? Добавив еще пару запросов точек со своими подсказками да эксплоудик, плюс непосредственный запуск созданной нами команды, получим что-то вроде Код:
|
|||
![]() |
|
||||
Цитата:
Удалось осилить и Ваше разбиение объекта, и Ваше запоминание последней точки и последнего элемента. Звездочка в начале - для самоповтора макроса. И аж два варианта: для вставки 3D модели с ориентацией ее в пространстве вдоль ее оси, и для вставки 3D модели с ориентацией ее в пространстве вдоль произвольно указанной оси. Макрос для вставки 3D модели с нужным разворотом в пространстве с использованием метода Хмурого - через назначение UCS: Код:
2. указываем вторую точку направления (оси Z ucs), она же точка вставки, 3. уже развернутый блок сам разбивается, 4. возвращается мировая система координат. А есть способ вернуть не мировую, а ту систему координат, которая была до запуска макроса? Но для общего случая нужно все-таки ALIGN, т.к. 3D модели могут быть сделаны уже с каким-то наклоном: Код:
2. указываем точку, за которую нужно повернуть, 3. указываем точку, в которую нужно повернуть, 4. блок сам разбивается. Последний раз редактировалось АлексЮстасу, 13.06.2012 в 20:24. |
||||
![]() |
|
||||
Заблудился в трех соснах, подскажите, плз!
Нужно выбрать блок из списка, а потом вызвать align. Пишу: Код:
Что неправильно? Добавлено при проверке в 2008: этот макрос сработает в 2008 только после добавления точки с запятой перед _align! ![]() Вставка точек перед командами ничего не меняет. Если в моем русифицированном 2012 вместо _.insert в макросе написать ВСТАВИТЬ, то окно вставки блоков тоже не вызывается! Если использовать макролисп Код:
![]() Если в 2012 в макросе ничего, кроме Код:
Последний раз редактировалось АлексЮстасу, 15.06.2012 в 18:16. |
||||
![]() |
|
||||
Котло- и реакторостроение Регистрация: 25.02.2010
Барнаул
Сообщений: 824
|
Приветствую. Можно ли оформить в макрокоманду вот такую цепочку.
Например: в таблице в графе позиция, вставляю поле, поле ссылается на объект мультивыноска. Вставить поле-категория полей объекты -объект - тип объекта - выбрать объект - содержимое. Тоже самое для атрибута блока, только там всесто "содержимого", нужно выбрать "значение". Т.е. после вставки поля, нажал кнопку макроса, выбрал объект-цель. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Offtop:
![]() ![]() Это я к тому, что лучше бы чётче формулировать мысли, точнее сказать, алгоритм действий понимать и правильно объяснить. Можно и своими словами, но последовательно и обстоятельно, примерно так (жирным запросы в командной строке): Цитата:
А во-первых, по-моему, это сделать макрокомандами нельзя. Я бы посоветовал обратиться к поиску по словам, допустим, поле таблица и в какой-либо подходящей теме задать лисповедам уже ОСОЗНАННЫЙ вопрос и получить ПРАВИЛЬНУЮ помощь или узнать причину, по которой таковая невозможна ![]() Добавлено: Offtop: Только вот "объект-цель" всё же придется выбирать сначала, а уж потом ячейку, в которую вставляется поле, ссылающееся на "объект-цель". Да и целью тут, как я понял из описания задачи, является ячейка, а вовсе не мультивыноска, которая является исходным объектом (в противоположность целевому). В процессе алгоритмизации (осмысления условия задачи) важно не путать понятия, которые почти всегда идут на поводу у логики и здравого смысла. "Почти" - потому что бывают глюки, а обходные пути с логикой бывают в сомнительных отношениях Последний раз редактировалось skkkk, 27.06.2012 в 04:51. |
|||
![]() |
|
||||
Котло- и реакторостроение Регистрация: 25.02.2010
Барнаул
Сообщений: 824
|
Пишу в данной теме, так как проблема с макросом который взял отсюда.
^C^C^P_.-purge;_a;;_n;_.-purge;_a;;_n;_.-purge;_r;;_n;_.audit;_y;_.-scalelistedit;_r;_y;_e;_.-purge;_a;;_n; Вводная: Работал на Акад 2011, русский, 32 бита, вин ХР. Макрос работал, все нормально. Перешел на Акад 2012, русский, 64 бита вин 7. И макрос стал работать как то странно. Провел эксперимент. (Лог эксперимента с пометками в приложении) Открываю чистый чертеж. Делаю Аудит, все в порядке. Вставляю пару блоков с палитры инструментов, удаляю их, делаю Аудит, все в порядке. После этого сразу запускаю макрос, выдается сообщение "Обнаружены ошибки программы, рекомендуется сохранить чертеж и перезапустить программу". После этого делаю Аудит, он находит около 30 ошибок. Т.е. получается макрос наделал ошибок в чертеже. Вот и не понятно как это так. Откуда ошибки в чертеже взялись, до запуска макроса Аудит ничего не находил. УПД: В 2011 32 ХР, также после макроса появляются ошибки. Просто не выводится сообщение "Обнаружены ошибки программы, рекомендуется сохранить чертеж и перезапустить программу". Итак резюме: Если все исправить аудитом, после него будет 0 ошибок. Запускаем макрос, после него аудит, эти ошибки опять появляются, так можно до бесконечности. КРЫС помоги, я у тебя этот макрос взял. )) Последний раз редактировалось Astartes, 26.09.2012 в 13:53. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Возможности скачать и проверить файл нет, поэтому "навскидку": в блоках есть атрибуты, для которых слой в описании блока не "0"
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
И с недавних пор (последний месяц - не больше) после моего макроса в моем Акад 2012, русский, 64 бита вин 7 стало появляться такое же окно об ошибках программы. Общего в наших макросах "audit;_y". Что за засада? Радует, что Автокад при этом не падает. ![]() |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ну как я и предполагал - атрибуты лежат на слоях, отличных от "0". об этой ошибке достаточно давно Андрей Бушман где-то говорил.
Выход: отредактировать блоки так, чтобы атрибуты лежали на слое "0". Или мириться с подобными сообщениями.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Котло- и реакторостроение Регистрация: 25.02.2010
Барнаул
Сообщений: 824
|
Кулик Алексей aka kpblc, Так, а почему стандартный Аудит ничего плохого не видит в атрибуте на слое "0", а макрос видит. Т.е. выбор либо пользоваться стандартным Аудит или пользоваться макросом, но атрибуты переводить на слой "0"?.
Второе, есть блоки без атрибутов, а таже самая история. Завтра на работу приду, выложу файл. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Обрати внимание: ошибки аудит выдает сразу после _.purge. Значит, ошибка в алгоритме работы _.purge. Можно поиграться с порядком очистки: сначала, например, блоки, потом слои, а потом уже все остальное + аудит.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проведите Audit вручную, с опцией "не исправлять ошибки" и посмотрите по логу командной строки что за ошибки.
У меня было такое в автокаде 2010, при проверке чертежа выскакивала именно такое окно с ошибкой. Посмотрел по логу Audita - не нравилась переменная DIMPOST. После смены текущего размерного стиля ошибка пропала. |
||||
![]() |
|
||||
Котло- и реакторостроение Регистрация: 25.02.2010
Барнаул
Сообщений: 824
|
Do$, Вот сделал по вашему. Какаято проблема со слоями. Наверное это и есть о чем Алексей говорил. Атрибуты не на "0".
Команда: _AUDIT Исправить все обнаруженные ошибки? [Да/Нет] <Н>: Проверка заголовка Проверка таблиц Проверка объектов, проход 1 Проход 1: проверено объектов: 300 Проверка объектов, проход 2 Проход 2: проверено объектов: 200 AcDb2dVertex(2A2) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2A3) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2A4) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2A5) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2AF) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2B0) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2B1) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2B4) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2B5) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2B6) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2B7) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2C3) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2C4) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2C5) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2C6) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2D0) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2D1) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2D2) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2D5) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2D6) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2D7) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDb2dVertex(2D8) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbBlockReference(30F) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbBlockReference(30F) не восстановлен. AcDbAttribute(310) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(310) не восстановлен. AcDbAttribute(311) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(311) не восстановлен. AcDbAttribute(312) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(312) не восстановлен. AcDbAttribute(313) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(313) не восстановлен. AcDbAttribute(318) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(318) не восстановлен. AcDbSequenceEnd(31D) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbSequenceEnd(31D) не восстановлен. AcDbBlockReference(31E) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbBlockReference(31E) не восстановлен. Проход 2: проверено объектов: 300 AcDbAttribute(33D) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(33D) не восстановлен. AcDbAttribute(33E) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(33E) не восстановлен. AcDbAttribute(33F) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(33F) не восстановлен. AcDbSequenceEnd(340) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbSequenceEnd(340) не восстановлен. AcDbBlockReference(341) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbBlockReference(341) не восстановлен. AcDbAttribute(342) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(342) не восстановлен. AcDbSequenceEnd(343) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbSequenceEnd(343) не восстановлен. AcDbAttribute(34B) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(34B) не восстановлен. AcDbAttribute(34C) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(34C) не восстановлен. AcDbAttribute(34D) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(34D) не восстановлен. AcDbAttribute(34E) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(34E) не восстановлен. AcDbAttribute(353) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(353) не восстановлен. AcDbAttribute(378) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(378) не восстановлен. AcDbAttribute(379) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(379) не восстановлен. AcDbAttribute(37A) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(37A) не восстановлен. AcDbAttribute(37D) Неверный слой eWasErased $AUDIT-BAD-LAYER AcDbAttribute(37D) не восстановлен. Проверка блоков Проверено блоков: 1 Всего найдено ошибок: 46, исправлено: 0 |
|||
![]() |
|
||||
Котло- и реакторостроение Регистрация: 25.02.2010
Барнаул
Сообщений: 824
|
Приветствую. Вот http://forum.dwg.ru/showpost.php?p=397211&postcount=227 взял хороший лиспик. Удлинить/укоротить линию в две стороны одновременно. Вот только работает лисп в системе координат World. Можно ли сделать так чтобы лисп работал в любой системе координат?
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Мои динамические блоки | Shoorup | Динамические блоки | 2713 | 21.04.2011 23:34 |
Повторение выполнения макрокоманды по циклу. КАК? | Kostinok | AutoCAD | 12 | 05.12.2007 15:40 |
Мои проекты | Vova | Разное | 10 | 08.10.2007 23:18 |
Мои палитры инструментов на соседний компьютер | Pave1 | AutoCAD | 4 | 27.06.2006 09:45 |