|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Длина 3д тела как атрибут блока
Регистрация: 01.12.2009
Сообщений: 62
|
||
Просмотров: 7933
|
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
в поле Description изначально ввести данные измерений 3D объекта в виде (1000 500 200) вместе со скобками затем читать данные через (vla-get-description ...) и умножать размер на соответствующий коэффициент масштаба по соответствующей оси Затем менять значение атрибута Пример в виде чертежа не помешал бы тоже ~'J'~ |
|||
![]() |
|
||||
Регистрация: 01.12.2009
Сообщений: 62
|
Это конечно хорошо, но только чем этот метод отличается от ручного? Данные измерения 3д объекта можно и сразу забить в атрибуты, правда ведь? Задача состоит именно в автоматическом режиме определения габаритов и передаче их в атрибут. То-есть я хочу просто выделить объект и получить данные о его длине.
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Андрей Будзинский, что есть "длина" для абстрактного 3D-тела? Шара, например. Потому и нет там такого свойства. Более того, свойства "длина" нет даже у некоторых "линейных" объектов.
Штатные примитивы Автокада, изображают реальные объекты, в том числе с помощью 3D-тел и их сочетаний. Что именно изображает это тело и где у него измерять "длину", Автокад не знает. Знать может, например, прикладная программа, которая из 3D-тел моделирует трубопровод или прокатный профиль. Вот такая программа, в момент создания тела, может определить его длину и привязать эту информацию к объектам. При этом атрибуты - худшее место для хранения длины - их можно изменить, а фактическая длина останется прежней. Возможно также создание с помощью ObjectARX специальных Custom-объектов, которых нет в Автокаде. Вот у таких объектов могут быть дополнительные свойства, в том числе и "длина". |
|||
![]() |
|
||||
Я, для себя, решил эту задачу так:
Мне надо было измерять длинну цилиндрических объектов типа 3Dсолид. Эти объекты могут быть разных типов, но независимо от этого длинна их может быть вычислена. Так же может быть вчислена длинна профиля, если у него есть радиусы в сечении. http://forum.dwg.ru/showthread.php?t=44068 Код:
p.s. Спасибо огромное Евгению Елпанову за материал по 3Dсолидам. |
||||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
3d тело в блоке (ежели это 3d solid) - объект, в общем-то, неизменяемый с помощью динамических операций/параметров (по крайней мере, он не "растягивается"). То есть "длина" солида (что бы под ней ни подразумевалось, - габариты или длина траектории выдавливания) будет неизменной до момента переопределения блока. Поэтому какой смысл в полях, - отредактировал блок (изменив солид), - отредактируй атрибут. Можно этот процесс программно автоматизировать, если знать - чего конкретно надо (файл с образцом блока и атрибутом приложить неплохо было б).
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Цитата:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 06.04.2009
Сообщений: 702
|
Не до конца понятно что вы хотите получить в конечном итоге. Я полагаю, что длина это путь по готорому выдавливалось какое-то сечение тела. В одной из граней нарисовать линию, а на неё поставить поле в атрибуте длина. (или вы хотите растягивать единичный блок?)
__________________
КазнитьØнельзяØпомиловать:eek: |
|||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
Цитата:
![]() Вобщем, да, ежели солид - некий "ящик" или цилиндр, то возможно, такие манипуляции имеют смысл...
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! Последний раз редактировалось AlexV, 17.12.2009 в 13:30. |
|||
![]() |
|
||||
Регистрация: 01.12.2009
Сообщений: 62
|
ShaggyDoc, под длиной я полагаю самый большой размер. Понятное дело, что формы тел бывают очень сложные. С помощью massprop можно получить значения Bounding box. Потом вычесть из вторых значений первые, и попарно сравнить. Самое большое и будет длиной. Понятно, что это будет давать неправильный результат для 3д объектов ось которых повёрнута к осям под каким-либо углом. Но лично мне сейчас этого не надо.
AlexV, я с Вами полностью согласен, но мне не надо сделать это через поле, а просто забить в атрибут. Supermax, подскажите пожалуйста подробно, что с этим кодом делать. Просто я совсем в програмировании не бум-бум. Заранее спасибо! |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Если твой 3д объект является неким профилем с выдавливанием на различную длину, например цилиндр, угольник, швелер. То все не так уж плохо...
Берем профиль и выдавливаем на 1 мм. Закидываем профиль в блок с точкой вставки, лежащей на плоскости выдавливания и направлением выдавливания, совпадающим с любой из осей - удобно с осью Х или Z - проще поэксперементировать. Далее, вставляем этот блок в нужное место, задавая ему масштаб по оси выдавливания на нужную длину. Получаем полную имитацию твердого тела и масштаб как измерение длины.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
Цитата:
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
Ну да, возможно, так лучше.. _flatshot все равно не плющит ни 3dface, ни отмасштабированный по одной оси в блоке 3dsolid (если вдруг такая возможность нужна - для оформления 2d чертежей по 3d модели). А вот интересно, в А2010 появился новый примитив - 3-мерная сеть (3dface, чтоль..) Он обрабатывается командами _flatshot и _sectionplane, так же, как и солиды. А Stretch в динамических блоках их растягивает?
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
К сожалению, любой прокат запихивать в блоки - неправильное решение.
Дырок не вырежешь, не подрезать наискось, не согнуть. Лучше оставить 3Dсолиды. Все 3Dсолиды одной категории материала надо класть в свой слой ("Швеллер N16П") и в этот же слой класть динамический блок-бирку, в котором и атрибуты есть и свойства, и который легко настроить на данный слой. А вот дальше ..., дальше надо все-таки анализировать графику 3Dсолида и высчитывать его габариты, не взирая на дырки, пазы и пр. Если учесть, что для того, чтобы сделать швеллер подрезанным, нужен кусок целого швеллера - вычисление длинны самой длинной грани очень актуальный вопрос. Дай бог, я с этой задачей как-нибудь справлюсь. Есть, правда, и другой, более простой способ, это сделать лисп, заменяющий традиционные команды _slice и _solidedit, в частности _extrude та, которая для _face. Они убивают описание истории в 3Dсолиде, а там есть первоначальная длинна. Надо прежеде чем резать, сохранять историю и редактировать ее, а после помещать на место, где раньше была. Если резать (точнее укорачивать) объект вычитанием или сверлить в нем дырки, история не уничтожается. Есть еще проще способ. Заменить _slice лиспом, который автоматом строит по трем точкам огромный (1х1м.) куб и ориентирует его в нужном направлении, а потом вычитает из проката этот куб. Все равно в ГОСТах нет такого огромного проката. А вычитание не портит историю. Там по прежнему - длинна первоначального отрезка проката. Последний раз редактировалось Supermax, 18.12.2009 в 12:17. |
||||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
Ну да, тем более разного рода программ для построения 3d проката солидами немало есть - от Кондрата, от Mikka и т.д...
На самом деле, автору темы может и не нужны все эти профили, он пока толком не объяснил/не показал, чего хочет..
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
Supermax, ты же читал описание формата...
Зачем такие сложности, если в солиде хранятся центры всех граней, вектор нормали грани, последовательные сегменты (как в полилинии) для каждой грани, ссылки для каждого сегмента грани, на соседнюю грань и ее сегмент, ссылку на предыдущий сегмент грани и следующий... Куда уж больше информации? Достаточно взять все точки грани и найти самый длинный сегмент. Пробежавшись по всем граням, мы получим списки самых длинных сегментов периметров граней и их вершины. Сразу будет понятна не только длинна примитива но и направление выдавливания и много еще чего...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Евгений, беда в том, что там 300 с гаком страниц на английском. Я в нем, как баран. Да, я могу через автоматический переводчик что-то переводить, многое и переводить мне не надо, и так понятно, но в целом -чтобы лекго все пошло, нужен нормальный перевод.
Лучше всего этот материал сразу в справочный файл запихивать. Вот тут я могу поработать. Материал просто шикарный, но один только 5-ый раздел - 87 страниц. Одним типом описания - не обойдешся. все читать надо. Ты вроде, слышал, что-то уже перевел, так поделись, а я еще пару страниц переведу, да и народ может пособит. Мы патриоты или нет? Всем ведь будет польза. К стати, есть пара-тройка предложений, ты свою почту часто смотришь? Мне туда писать? |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | Kryaker | Разное | 554 | 14.11.2023 11:59 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
Как изменять, добавлять атрибуты у блока | Алексей К. | AutoCAD | 2 | 29.01.2007 10:59 |
Как программно узнать точку пересеч. линии с подприм. блока? | kp+ | AutoCAD | 3 | 21.10.2005 10:46 |
Как из блока програмно вычленить текст | Flint | Программирование | 5 | 17.02.2004 11:03 |