| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
02.02.2009, 21:54 | #1 | |
Lisp в 3D
ООО Предприятие "Ирбис"
Екатеринбург
Регистрация: 02.02.2009
Сообщений: 45
|
||
Просмотров: 13272
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
группы 220 и 230 появляются только в DXF-формате. В ename-представлении они есть необязательно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
ООО Предприятие "Ирбис" Регистрация: 02.02.2009
Екатеринбург
Сообщений: 45
|
Группа 210 обычно имеет вид (210 0.0 0.0 1.0), то есть представляет собой единичный вектор, направленый вдоль оси z. Только с помощью этой группы можно повернуть примитив как угодно - например (210 1.0 0.0 0.0) повернет примитив вдоль оси x, хотя и с некоторыми оговорками - надо контролировать поворот примитива вокруг нормали.
Вопрос в другом. Важна наглядность, как с командой ROTATE. То есть в процессе поворота с помощью мыши примитив вращается вместе с курсором, пока щелчком не будет указан угол. Можно было бы задать цикл, в котором командой типа getangle считывался бы угол и в соответствии с этим выполнялось обновление примитива. Но: 1. getangle требует "второго" щелчка для получения угла 2. возможно существует более легкий способ обеспечения наглядности Если есть команда, которая считывала бы положение курсора с учетом привязок без клика - буду безмерно признателен Последний раз редактировалось eugen81, 03.02.2009 в 12:08. |
|||
|
||||
ООО Предприятие "Ирбис" Регистрация: 02.02.2009
Екатеринбург
Сообщений: 45
|
Чтоб легче было понять, что мне нужно, опишу то, над чем я работаю.
Необходимо изобразить в акаде ИТП (индивидуальный тепловой пункт). То есть рисую трубы, вставляю фланцы, задвижки и прочую аттрибутику. так как это приходится делать довольно часто, то ручное рисование труб и вставка блоков с арматурой быстро надоело. Задача сводится к следующему: Запускаю программу, начинаю рисование скажем с ввода теплотрассы, то есть трубы. Задаем начальное направление оси и рисуем. После того, как нарисовал трубу программа через контекстное меню предлагает вставить объект (фланец, отвод, переход и т.д.) соответствующий условному диаметру. Допустим выбрали фланец. Его я вставляю в качестве блока из файла через (VL-CMDF "INSERT"...) (каюсь, не люблю я вызывать команды акада из лиспа, но другого выхода не вижу). В файле фланец ориентирован осью по оси z. Соответственно в чертеже фланец должен быть ориентирован по оси трубы, для чего я корректирую группу 210. Затем нужно повернуть фланец вокруг оси. Причем так, чтобы я мог контролировать вращение визуально в реальном времени, а не по факту ввода значения угла. |
|||
|
||||
>eugen81
Управление вектором нормали, недостаточно для задания ориентирования объекта. Дело в том, что одну и ту же плоскость, можно задать двумя противоположными векторами. При вычислении необходимого вектора программно, не удается правильно расположить объект в пространстве, используя только вектор нормали. После поворота плоскости объекта, расположение внутренней ориентации объекта в данной плоскости меняется. Приходится еще использовать вращение в этой плоскости. Не советую пытаться расположить блок, примитив или другой объект в пространстве, используя только вектор нормали. Сразу разрабатывай программу, умеющую определять необходимый угол поворота в нужной плоскости в пространстве, относительно произвольной точки. |
||||
|
||||
ООО Предприятие "Ирбис" Регистрация: 02.02.2009
Екатеринбург
Сообщений: 45
|
Я некорректно выразил свою просьбу вектором нормали я задаю только "ось" объекта. На примере того же фланца - добиваюсь, чтобы его зеркало смотрело по оси в нужную мне сторону. А затем корректирую положение объекта вокруг этой оси путем изменения групп... эххх, справочника рядом нет... в общем нужная ориентация объекта получается без каких-то проблемм.
Вопрос-то в том, есть ли аналог команды ROTATE (или как его самому сделать), позволяющий повернуть объект с отслеживанием по указанной оси. Просто специфика работы такая, что просто вводить градусы с клавиатуры не всегда удобно, так как трубы могут идти как угодно. Я пытаюсь написать программу, которая была бы удобна не только для меня, но и для другого проектировщика. Поэтому необходима максимальная интерактивность. Последний раз редактировалось eugen81, 03.02.2009 в 15:38. |
|||
|
||||
Цитата:
Думаю, после этого, будет понятна твоя задумка и уменьшится количество вариантов, как это сделать. |
||||
|
||||
ООО Предприятие "Ирбис" Регистрация: 02.02.2009
Екатеринбург
Сообщений: 45
|
Именно так, объект вращается вслед за резиновой нитью. И поворачивать вокруг оси его нужно сразу после создания. Ось поворота - это вектор нормали блока. Все объекты в собраной мной базе ориентированы именно по нормали. При вставке блока сразу же меняется группа 210
Последний раз редактировалось eugen81, 03.02.2009 в 17:19. |
|||
|
||||
|
||||
|
||||
eugen81, перечитал тему сначала, понял.
Сейчас сделаю примерчик, программы, только выложи мне пример блока - задвижки какой нибудь, чисто для экспериментов...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 16.02.2009 в 22:26. |
||||
|
||||
Кстати, если блок сделать так, чтоб его вектор нормали и точка вставки, совпадали с осью трубы, то программа сильно упрощается - нужно просто программно вставить блок с нужным вектором нормали, а потом просто крутить его интерактивно...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 16.02.2009 в 22:26. |
||||
|
||||
расскажи с примерами, как ты смотрел высоту и где...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 16.02.2009 в 22:25. |
||||
|
||||
ООО Предприятие "Ирбис" Регистрация: 02.02.2009
Екатеринбург
Сообщений: 45
|
Простой пример:
рисую цилиндр диаметром 57мм, высотой 150мм из точки (0, 0, 0) далее: Код:
Код:
|
|||
|
||||
Цитата:
Пособие по формату файла SAT (ACIS)
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 16.02.2009 в 22:25. |
||||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Конструирование в 3D | Serz | AutoCAD | 87 | 28.10.2014 10:40 |
Lisp Как поставить диаметр отверстия на 3D solidе | P4s8x | LISP | 4 | 06.11.2008 19:31 |
Как тело построенное 3D Face превратить в 3D Solid? | Bdod | AutoCAD | 37 | 03.08.2006 11:36 |
загрузка DOS прог через LISP | Gaa | LISP | 15 | 12.08.2005 19:19 |