Данные для раскроя (Мебель, и не только)
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Отраслевые разделы > Прочее. Отраслевые разделы > Данные для раскроя (Мебель, и не только)

Данные для раскроя (Мебель, и не только)

Ответ
Поиск в этой теме
Непрочитано 21.05.2004, 22:08 #1
Данные для раскроя (Мебель, и не только)
Don Pedro
 
Designer
 
Кишинев
Регистрация: 21.05.2004
Сообщений: 24

Я (и не только я) использую АвтоКад для 3-х мерного моделирования мебели, применяя для этого солиды.
Само собой, весь ламинат (постоянная толщина - 18мм) находиться на отведенном для него слою.
Задача такова: получить размеры (X,Y) каждой ламинатной детали и записать эти размеры в внешний текстовой файл. Дальше эти данные обрабатываються спецпрограммами для раскроя листового материала (у меня Cutting2).
Сам я эту задачу никогда не решу. Просто не могу понять, как получить размеры детали у которой одна кромка - сплайн (см. пример)
Если бы все детали были прямоугольными тогда задача упростилась бы.

Реально ли сделать лисп для этих целей? Уверен что многим он бы пригодился. А может уже есть что-то готовое?
[ATTACH]1085162980.gif[/ATTACH]
__________________
Via est vita!
Просмотров: 25377
 
Непрочитано 21.05.2004, 22:35
#2
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


В свое время пытался сделать нечто аналогичное для 3d solid'ов, но увяз в расшифровке этого замудреного описания. Простые детали (типа кубика или аналогичные) еще как то можно "измерить", а на сплайновых контурах... В общем, ручками померить оказалось проще чем сделать 100% рабочую программу.

Сейчас думаю на Инвентор перейти с подобного рода вещами. Там это проще реализуется. Да и сама софтина куда более интеллектуальна.

Если же речь идет о плоской полилинии - контуре детали - то все значительно проще. Хотя, это мне показалось совсем не интересно, так как либо пропадает возможность анализа твердых тел на предмет пересечения и т.п., либо требуются дополнительные манипуляции для получения этой самой полилинии-контура и синхронизации с телом. А ведь кромка может быть срезана и под углом - это еще усложняет задачу :cry:
vk вне форума  
 
Непрочитано 23.05.2004, 00:49 Re: Данные для раскроя (Мебель, и не только)
#3
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


Цитата:
Сообщение от Don Pedro
Реально ли сделать лисп для этих целей? Уверен что многим он бы пригодился. А может уже есть что-то готовое?
Практически нереально (на lisp). Голый AutoCAD вообще мало пригоден для 3-х мерки. MDT или Inventor позволяют получать спецификации. Или использовать коммерческие приложения. Под AutoCAD очень неплохая программа есть 3D-Constructor.
www.elecran.com.ua

P.S. В известных мне приложениях под AutoCAD позволяющих решить такого рода задачи, солиды создаются и редактируются !только! самим приложением. Вручную ни-ни. Т.к. приложение пишет в солид свои данные, которые потом анализируются.
BigBrother вне форума  
 
Непрочитано 23.05.2004, 05:00
#4
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
В известных мне приложениях под AutoCAD позволяющих решить такого рода задачи.....
Вот с этого места поподробнее, если можно. Кроме упомянутого 3D-Constructor, какие еще приложения могут решать такого рода задачи. Интересует функциональность и гибкость моделирования и естественно автоматизация вывода данных в спецификацию или текстовый файл. Хотя у голого АКАДа моделирование не на высоте, тем не менее до сих пор практически хватало его возможностей (о геморое не говорю).
vk вне форума  
 
Непрочитано 23.05.2004, 20:35
#5
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


Цитата:
Сообщение от vk
Вот с этого места поподробнее, если можно..
К сожалению поподробнее не получится, давно это было. :?
Винт на котором демки и эта инфа была приказал долго жить. :cry:
В памяти осталось только, что 2 софтины были от французов и одна от испанцев. Ну и цена соответствующая от 2 до 6 K$. Причем приемлемую функциональность обеспечивала только самая дорогая.

Ну а для себе писал в свое время приложение. Прямоугольные и некоторые часто используемые фигурные детали отрисовывал программно и писал в X-Data нужную инфу. Плюс инструмент для ручного редактирования\внесения этих данных.
BigBrother вне форума  
 
Непрочитано 24.05.2004, 01:34
#6
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>BigBrother
Мдя... писать все в X-Data - дело хорошее. Только тут уж не до функционала.... Впрочем, для шкафчиков-тумбочек, где детали относительно простые и стандартные, это может быть вполне реальным решением. У меня к сожалению стандартных конфигураций немного
vk вне форума  
 
Непрочитано 24.05.2004, 19:45
#7
BOZ


 
Сообщений: n/a


Если деталь ориентирована так, что направление ее осей совпадает с направлением осей X и Y мировой системы координат, то для определения габаритов параллелепипеда в который можно вписать Solid можно применить метод GetBoundingBox.
Для такого случая это и будет решением задачи.
 
 
Непрочитано 24.05.2004, 19:50
#8
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


>vk У меня к сожалению стандартных конфигураций немного

Советую в этом случае внимательнее присмотреться к 3D-Constructor.
Функциональность обеспечивается сплошной параметризацией сверху вниз. Практически MDT для мебельщика. Можно и для клиента "сделать красиво" и всю КД получить.
И самый главный плюс для меня то, что это привычный AutoCAD.
BigBrother вне форума  
 
Непрочитано 24.05.2004, 21:48
#9
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>BOZ
Верно. А если не совпадает - то можно и установить ПСК по объекту. Только далеко не всегда она ставится так как хотелось бы. В этом главный минус такого метода.

>BigBrother
Спасибо за совет. Демку скачал еще вчера. Приятно удивлен объемом сопроводительной документации - свыше 300 страниц Еще не просмотрел все. Посмотрим что за зверь....
Но больно уж привык к тем методам, которыми пользуюсь. Например, паз в детали получать путем вычитания объекта, полученного в результате анализа пересечений деталей; для обрезки - SLICE по трем точкам или плоскости и точке; смещение грани для корректировки зазора и т.п.
vk вне форума  
 
Автор темы   Непрочитано 24.05.2004, 22:07
#10
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


А если попытаться определить плоскость с наибольшей площадью?
Сделать копию файла, найти все солиды с значением по одной из осей = 18mm (проверять надо по всем осям XYZ), взорвать первую деталь, получить габариты региона с наибольшей площадью (возможно ли? по принципу bounding box или, вернее, rectangle?), значения записать в внешний текстовый файл. Взорвать следующую деталь и.т.д.

Ну как? Реально?
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 24.05.2004, 22:47
#11
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Лучше один эксперимент, чем куча рвссуждений. Сделайте в плоскости XY мировой ПСК например плоскую прямоугольную панель и отрежте солидный кусок с одного угла. Можно еще и кромку какую нить сделать не 90° а к примеру 45°....
Определите координаты через GetBoundingBox. Все получается ровненько...
Теперь покрутите эту панель по разным осям на разный угол, каждый раз проверяя координаты... и каждый раз получая новые значения.
Попробуйте установить ПСК по объекту, но не указывая мышкой ребро, а передавая указатель на объект, полученный например (entlast). Это поытка задействовать (trans) для пересчета координат. Увы, не всегда ПСК ставится так чтоб хотя бы одна из осей была вдоль какой то "базовой" стороны. Впрочем, такая же ерунда получается и с регионами после взрыва.
Воти выходит, что если требуется замерить размеры детали типа "кирпич", что лежит на полу в углу - то проблем практически нет, а если деталь сложная, да сориентирована в пространстве "от фонаря" - тут уж не до автоматизации (ИМХО).
vk вне форума  
 
Автор темы   Непрочитано 25.05.2004, 22:36
#12
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Цитата:
Лучше один эксперимент, чем куча рассуждений.
Согласен на все 100%. Только в програмировании я полный ноль. Дайте плиз хотя-бы начальный пинок в виде скрипта который бы работал с GetBoundingBox. Я так понимаю, что GetBoundingBox можно применить и к региону? И он (GetBoundingBox) на выходе дает две точки (на примере a,b)? Ну, тогда мне кажется что достаточно вычислить расстояние между этими двумя точками, и не имеет значение под каким углом расположен регион относительно WCS. Ведь искомое число есть габариты плиты - длина и ширина при известной толщине. По теореме Пифагора очень просто можно вычислить длины катетов. Ч.т.д.
Так просто что даже не вериться. Значит, я где-то ошибаюсь.
Может кто-то сделать действующую программу?

На примере:
слева - регион лежащий в одной плоскостью с WCS
справа - тот же регион, но повернутый на произвольный угол
[ATTACH]1085510186.gif[/ATTACH]
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 26.05.2004, 00:07
#13
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Код:
[Выделить все]
(vl-load-com); загрузка ActiveX
(setq vlaObject(vlax-ename->vla-object Object));преобразование любого примитива в VLA-объект
(vla-getboundingbox vlaObject 'minpoint 'maxpoint); применение самого метода. Но результаты в виде типа данных Variant и нужно их преобразовать в списки из координат точек.
(setq minPT(vlax-safearray->list minpoint))
(setq maxPT(vlax-safearray->list maxpoint))
; как результат получаем координаты нижней левой и верхней правой точек.
Естественно это точки прямоугольного бокса ограничивающего объект, но ни как не не нижняя левая и верхняя правая точки его реальной геометрии. Т. е. если деталь не прямоугольная и не лежит параллельно осям то надо учитывать кучу факторов для вычисления ее реальных габаритов. Если же все в упрощенном варианте, то вы действительно получите габариты.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 26.05.2004, 13:34
#14
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Ээээ, а куда скрипт впихнуть, чтоб запустить? Извините за ламерский вопрос, но с англицким и с програмированием очень туго.
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 26.05.2004, 16:16
#15
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


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

- вы сами заботитесь о том чтобы детали на момент начала программы были паралельны осям

- затем поочередно щелкаете по деталям, либо выбираете их рамкой и вся информация о размерах пишется в текстовый файл.

-перед окончанием работы, очевидно необходимо каким то методом пометить детали с которых были сделаны измерения (например временно изменить цвет) и выдать репортаж в текстовый экран для проверки.

-дополнительно можно предусмотреть переключение видов.

Так?

Интересует внутренний формат файла, расширение если оно критично или отличается от *.txt а также другие замечания по этому поводу.

На серьезную прогу расчитывать не надо, немогу уделить столько времени, но вполне приличный инструмент помогающий в работе соорудить можем.
{Smirnoff} вне форума  
 
Непрочитано 26.05.2004, 16:58
#16
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
- вы сами заботитесь о том чтобы детали на момент начала программы были паралельны осям
Это самое геморойное занятие - выравнивать объекты.... Можно попробовать копировать объект в другой файл, причем, перед копированием в текущем файле предложить установить ПСК по объекту в интерактивном режиме. В новом файле после вставки объект будет выровнен по осям (тут уже присутствует "пожелание" пользователя)
vk вне форума  
 
Непрочитано 26.05.2004, 17:31
#17
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Логично. Надо над этим поразмыслить... На ум приходит еще вариант сделать интерактивное выравнивание по указанию двух точек. Т. е. прога запрашивает две точки, щелкаем на крайних точках нужной грани и все выравнивается по определенной заранее оси.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 26.05.2004, 20:00
#18
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Цитата:
- вы сами заботитесь о том чтобы детали на момент начала программы были паралельны осям

- затем поочередно щелкаете по деталям, либо выбираете их рамкой и вся информация о размерах пишется в текстовый файл.

-перед окончанием работы, очевидно необходимо каким то методом пометить детали с которых были сделаны измерения (например временно изменить цвет) и выдать репортаж в текстовый экран для проверки.

-дополнительно можно предусмотреть переключение видов.

Так?
В принципе меня так устраивает. Еще бы нумерацию деталей сделать на фронтальном виде. Но это потом.
Еще можно вычислять объекты у которых по одной из осей нет толщины ламината (чаще всего 18мм) и помечать их красным. а потом, опционально, применять только к ним интерактивное выравнивание по указанию двух точек.
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 26.05.2004, 21:04
#19
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Желательно мне скинуть на asmirnov@inbox.lv (8 Mb) или Aleksandrs.Smirnovs@parex.lv (50 Mb):
1) пример текстового файла
2) каких нибудь реальных чертежей

Будем по тихоньку думать...
{Smirnoff} вне форума  
 
Непрочитано 26.05.2004, 22:02
#20
ASRW


 
Сообщений: n/a


Может и не к месту, но поставленную задачу выполняет bCAD.
Немного не привычно после AutoCAD но приноровится можно.
И размеры и раскрой и отходы материала учитываются, плюс вывод на печать карт раскроя и рабочих чертежей каждой детали.
Только желательно использовать лицензионный так как он позволяет работать с личными базами материалов.
Взолманный к сожалению не попадался.
 
 
Непрочитано 27.05.2004, 13:13
#21
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от Don Pedro
Цитата:
- вы сами заботитесь о том чтобы детали на момент начала программы были паралельны осям

................
Так?
В принципе меня так устраивает. ......
Ну если так действительно устраивает - то вот лиспик для определения габарита. Достал из прошлогодних набросков.... Конечно, алгоритм туповатый и требует значительной доработки, хотя в принципе почти что рабочий.
Уточнение - базовые поверхности должны быть параллельны плоскостям МСК.
Код:
[Выделить все]
;;; функция вычисления габаритов 3DSOLID'а,
;;; базовая плоскость которого параллельна плоскости WCS
(defun c:gabarit (/ d minmax solid ss1 ss2 ssd elt typ par endpar maxx maxy maxz minx miny minz)
  (setq d 0.01) ;_ шаг сканирования кривых (для ARC - радианы, для SPLINE и ELLIPSE - единицы ACAD'а)

  ;; функция корректировки переменных, содержащих максимальныне
  ;; и минимальные значения координат в соответствии 
  ;; с координатами точки pt
  (defun minmax (pt /)
    (setq maxx (max maxx (car pt))
          maxy (max maxy (cadr pt))
          maxz (max maxz (caddr pt))
          minx (min minx (car pt))
          miny (min miny (cadr pt))
          minz (min minz (caddr pt))
    ) ;_  setq
  ) ;_  defun

  ;; инициализация переменных
  (setq maxx (setq maxy (setq maxz -1e99)))
  (setq minx (setq miny (setq minz 1e99)))
  (setq solid (car (entsel))) ;_ выбор примитива
  (if (= (cdr (assoc 0 (entget solid))) "3DSOLID") ;_ проверка выбранного примитива
    (progn ;_ если это 3DSOLID
      (setq solid (vlax-vla-object->ename (vla-copy (vlax-ename->vla-object solid)))) ;_ копируем этот 3DSOLID
      (command "_.explode" solid "") ;_ взрываем его
      (setq ss1 (ssget "P")) ;_ собираем "осколки" - плоскости в набор
      (setq ssd (ssadd)) ;_ инициализация набора для хранения конечных примитивов
      ;; цикл дробления "осколков" - плоскостей
      (while (> (sslength ss1) 0)
        (setq elt (ssname ss1 0)) ;_ очередной "осколок" - плоскость
        (ssdel elt ss1) ;_ удаление его из набора
        (command "_.explode" elt) ;_ взрываем его
        (setq ss2 (ssget "P")) ;_ полученные после второго взрыва примитивы собираем в набор
        ;; и в этом цикле перегоняем примитивы в набор ssd
        (while (> (sslength ss2) 0)
          (setq elt (ssname ss2 0))
          (ssdel elt ss2)
          (ssadd elt ssd)
        ) ;_  while
      ) ;_  while

      ;; Теперь набор ssd содержит все примитивы, которые остались после
      ;; двух взрывов.... Конечно, среди них имеются дубликаты, 
      :: которые желательно удалить перед анализом, 
      :: чтоб не анализировать один и тот же примитив дважды....

      ;; непосредственно цикл анализа примитивов
      (while (> (sslength ssd) 0)
        (setq elt (ssname ssd 0)) ;_ анализируемый примитив
        (ssdel elt ssd) ;_ удаление его из набора
        (setq vla:elt (vlax-ename->vla-object elt)) ;_ указатель на vla-object - анализируемый примитив
        (setq delt (entget elt)) ;_ список данных примитива
        (setq typ (cdr (assoc 0 delt))) ;_ тип примитива
        (cond
          ((= typ "LINE") ;_ если это отрезок
           (minmax (cdr (assoc 10 delt))) ;_ анализ начальной
           (minmax (cdr (assoc 11 delt))) ;_ и конечной точек отрезка
          )
          ((member typ '("SPLINE" "ELLIPSE" "ARC")) ;_ сплайн, эллипс или дуга
           (setq endpar (vlax-curve-getendparam vla:elt)) ;_ конечный параметр примитива
           (setq par (vlax-curve-getstartparam vla:elt)) ;_ текущий параметр (в начале цикла равен начальному параметру)
           (while (< (+ par d) endpar) ;_ пока не добрались до конца...
             (setq par (+ par d)) ;_  добавляем шаг - переходим к следующей точке
             ;; вычисление координаты очередной точки, лежащей на примитиве и ее анализ
             (minmax (vlax-curve-getpointatparam vla:elt par)) 
           ) ;_  while
          )
          (t (princ (strcat "\nОбнаруженный примитив " typ " проигнорирован!"))) ;_ сюда попадают например окружности (отверстия, которые лежат заведомо внутри детали)
        ) ;_  cond
        (vla-erase vla:elt) ;_ удаление проанализированного примитива из чертежа
      ) ;_  while
      ;; печать результатов
      (princ (strcat "\nX=" (rtos (- maxx minx) 2 2)))
      (princ (strcat "\nY=" (rtos (- maxy miny) 2 2)))
      (princ (strcat "\nZ=" (rtos (- maxz minz) 2 2)))
    ) ;_  progn
    (princ "Это не 3DSOLID!")
  ) ;_  if
  (princ)
) ;_  defun
(vl-load-com) ;_ подгрузка функций VisualLisp (на всякий случай)
;;;(c:gabarit) ;_ автозапуск
vk вне форума  
 
Автор темы   Непрочитано 27.05.2004, 18:10
#22
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


2 vk

Работает!
Сколько же вы времение потратили на создание такого скрипта? Попытался разобраться в коде - ничего не получаеться. Штудирую help.
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 27.05.2004, 19:26
#23
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>Don Pedro
Работать то работает.... Только вот для того чтоб работало нормально, надо ручками выравнивать примитив... Или устанавливать ПСК по нему (в этом случае код надо немного поправить). А это уже сводит на нет эффективность проги :cry:
Времени на создание проги потратил немного, только пользы от нее в общем то нет. Потому и алгоритм не стал доводить до ума. Чтоб понять принцип работы - добавил комментарии...

Учите Лисп, если есть желание понять до конца ))
vk вне форума  
 
Непрочитано 27.05.2004, 22:49
#24
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>VK
Нерасшифрованная группа 1 DXF солида:
Код:
[Выделить все]
(1 . ":;8: {rn rn {rn {li roqj {jn oqj {ll {go 90-(>-; _h 
*1410(1 |") (1 . ":;8: {rn rn {rn {lh roqj {jo oqj {lk {gn 90-(>-; _h *1410(1 
|") (1 . "/061+ {rn rn {rn kkhqohiohnflmnhkhl khjqljmihijloimloi n |") (1 . 
"/061+ {rn rn {rn kkhqohiohnflmnhkhl kgnqljmihijloimloi n |") (1 . 
"/3>1:r,*-9><: {rn rn {rn kkhqohiohnflmnhkhl khgqljmihijloimloi oqj rn o o o o 
n 90-(>-;@) V V V V |") (1 . "<0:;8: {rn rn {rn {kk {km {ki {hn -:):-,:; {mn 
{rn |") (1 . ":;8: {rn rn {rn {jh roqj {hl oqj {ji {gm 90-(>-; _h *1410(1 |") 
(1 . "):-+:' {rn rn {rn {hn {gl |") (1 . ",+->687+r<*-): {rn rn {rn 
kljqohiohnflmnhkhl khjqljmihijloimloi oqj o o rn V V |") (1 . ":;8: {rn rn {rn 
{if rl {hl l {ih {gk 90-(>-; _h *1410(1 |") (1 . ",+->687+r<*-): {rn rn {rn 
kknqohiohnflmnhkhl khjqljmihijloimloi o rn o o V V |") (1 . "):-+:' {rn rn {rn 
{kf {gj |") (1 . ",+->687+r<*-): {rn rn {rn kknqohiohnflmnhkhl 
kgnqljmihijloimloi o n o o V V |") (1 . "/061+ {rn rn {rn kkhqohiohnflmnhkhl 
kgnqljmihijloimloi o |") (1 . "/061+ {rn rn {rn kkhqohiohnflmnhkhl 
khjqljmihijloimloi o |") (1 . ",+->687+r<*-): {rn rn {rn kljqohiohnflmnhkhl 
khgqljmihijloimloi n o rn o V V |") (1 . "/061+ {rn rn {rn kljqohiohnflmnhkhl 
kgnqljmihijloimloi n |") (1 . "/061+ {rn rn {rn kljqohiohnflmnhkhl 
khjqljmihijloimloi n |") (1 . ",+->687+r<*-): {rn rn {rn kkhqohiohnflmnhkhl 
khjqljmihijloimloi oqj o o rn V V |") (1 . ",+->687+r<*-): {rn rn {rn 
kkhqohiohnflmnhkhl kgnqljmihijloimloi oqj o o rn V V |") (1 . ",+->687+r<*-): 
{rn rn {rn kljqohiohnflmnhkhl kgnqljmihijloimloi oqj o o rn V V |") (1 . "/061+ 
{rn rn {rn kljqohiohnflmnhkhl khjqljmihijloimloi o |") (1 . ",+->687+r<*-): {rn 
rn {rn kljqohiohnflmnhkhl khgqljmihijloimloi o o n o V V |") (1 . "/061+ {rn rn 
{rn kljqohiohnflmnhkhl kgnqljmihijloimloi o |")){rn {kl {ln {kk {kj 90-(>-; {nl 
{rn |") (1 . "<0:;8: {rn rn {rn {ki {nj {kl {kh 90-(>-; {f {rn |") (1 . "<0:;8: 
{rn rn {rn {nj {ki {kg {kf 90-(>-; {f {rn |") (1 . "<0:;8: {rn rn {rn {lk {ll 
{nj {mh -:):-,:; {lj {rn |") (1 . ":;8: {rn rn {rn {jo rl {jn l {mi {jm 90-(>-; 
_h *1410(1 |") (1 . "<0:;8: {rn rn {rn {nh {ni {jl {jk 90-(>-; {i {rn |") (1 . 
"<0:;8: {rn rn {rn {jj {ji {ni {lo -:):-,:; {ko {rn |") (1 . ":;8: {rn rn {rn 
{lh ri {jh i {mf {jg 90-(>-; _h *1410(1 |") (1 . "<0:;8: {rn rn {rn {ml {jf {nh 
{lm -:):-,:; {nl {rn |") (1 . ":;8: {rn rn {rn {io ri {li i {ln {in 90-(>-; _h 
*1410(1 |") (1 . "<0:;8: {rn rn {rn {mi {ng {jf {im 90-(>-; {lj {rn |") (1 . 
"<0:;8: {rn rn {rn {ng {mi {jj {il -:):-,:; {lj {rn |") (1 . "300/ {rn rn {rn 
{rn {ll {lf |") (1 . "):-+:' {rn rn {rn {nf {ik |") (1 . "):-+:' {rn rn {rn {nf 
{ij |") (1 . ",+->687+r<*-): {rn rn {rn kkhqohiohnflmnhkhl khgqljmihijloimloi n 
o n o V V |") (1 . "9><: {rn rn {rn {rn {lj {l {rn {ii -:):-,:; ,6183: |") (1 . 
"300/ {rn rn {rn {rn {jj {mo |") (1 . "/3>1:r,*-9><: {rn rn {rn 
kknqohiohnflmnhkhl kgnqljmihijloimloi oqj o rn o o o rn 90-(>-;@) V V V V |") 
(1 . "<0:;8: {rn rn {rn {ih {jl {ji {ig 90-(>-; {mn {rn |") (1 . "<0:;8: {rn rn 
{rn {jf {ml {mk {kh -:):-,:; {nl {rn |") (1 . "<0:;8: {rn rn {rn {jl {ih {ml 
{kj -:):-,:; {mn {rn |") (1 . ":;8: {rn rn {rn {io roqj {if oqj {kk {ho 90-(>-; 
_h *1410(1 |") (1 . "<0:;8: {rn rn {rn {mj {mk {ih {hn 90-(>-; {f {rn |") (1 . 
":;8: {rn rn {rn {jn ri {if i {kl {hm 90-(>-; _h *1410(1 |") (1 . "<0:;8: {rn 
rn {rn {ji {jj {mj {kf -:):-,:; {ko {rn |") (1 . ":;8: {rn rn {rn {hl ri {jo i 
{kg {hk 90-(>-; _h *1410(1 |") (1 . "):-+:' {rn rn {rn {mh {hj |") (1 . "):-+:' 
{rn rn {rn {im {hi |") (1 . ",+->687+r<*-): {rn rn {rn kkhqohiohnflmnhkhl 
khgqljmihijloimloi o o rn o V V |") (1 . "<0:;8: {rn rn {rn {km {kk {mg {jk 
-:):-,:; {mn {rn |") (1 . ":;8: {rn rn {rn {jh rl {io l {jl {hh 90-(>-; _h 
*1410(1 |") (1 . "<0:;8: {rn rn {rn {kg {mf {lk {il 90-(>-; {ko {rn |") (1 . 
"<0:;8: {rn rn {rn {mf {kg {km {ig -:):-,:; {ko {rn |") (1 . "):-+:' {rn rn {rn 
{lo {hg |") (1 . ",+->687+r<*-): {rn rn {rn kknqohiohnflmnhkhl 
kgnqljmihijloimloi n rn o o V V |") (1 . "<0:;8: {rn rn {rn {ln {kl {ll {im 
-:):-,:; {nl {rn |") (1 . "):-+:' {rn rn {rn {jk {hf |") (1 . ",+->687+r<*-): 
{rn rn {rn kknqohiohnflmnhkhl khjqljmihijloimloi
Подготовленная к расшифровке таже группа 1:
Код:
[Выделить все]
oint $-1 -1 $-1 447.07607193217473 475.35267653062306 0 #straight-curve $-1 -1 
$-1 435.07607193217473 478.35267653062306 1 0 -1 0 I I #point $-1 -1 $-1 
435.07607193217473 481.35267653062306 1 #point $-1 -1 $-1 435.07607193217473 
475.35267653062306 1 #straight-curve $-1 -1 $-1 447.07607193217473 
475.35267653062306 0.5 0 0 -1 I I #straight-curve $-1 -1 $-1 447.07607193217473 
481.35267653062306 0.5 0 0 -1 I I #straight-curve $-1 -1 $-1 435.07607193217473 
481.35267653062306 0.5 0 0 -1 I I #point $-1 -1 $-1 435.07607193217473 
475.35267653062306 0 #straight-curve $-1 -1 $-1 435.07607193217473 
478.35267653062306 0 0 1 0 I I #point $-1 -1 $-1 435.07607193217473 
481.35267653062306 0 #"point $-1 -1 $-1 435.07607193217473 481.35267653062306 0 
#"17473 475.35267653062306 0.5 0 1 0 0 0 1 forwardv I I I I #coedge $-1 -1 $-1 
$24 $25 $26 $27 forward $9 $-1 #coedge $-1 -1 $-1 $28 $11 $29 $30 forward $6 
$-1 #coedge $-1 -1 $-1 $11 $28 $31 $32 forward $6 $-1 #coedge $-1 -1 $-1 $33 
$34 $11 $19 reversed $35 $-1 #edge $-1 -1 $-1 $36 -3 $37 3 $18 $38 forward 7 
unknown #face $-1 -1 $-1 $39 $40 $3 $-1 $41 reversed single #loop $-1 -1 $-1 
$-1 $42 $12 #plane-surface $-1 -1 $-1 435.07607193217473 478.35267653062306 0.5 
1 0 0 0 0 -1 forwardv I I I I #coedge $-1 -1 $-1 $43 $31 $44 $45 forward $13 
$-1 #coedge $-1 -1 $-1 $46 $15 $43 $47 forward $9 $-1 #coedge $-1 -1 $-1 $15 
$46 $48 $49 forward $9 $-1 #coedge $-1 -1 $-1 $34 $33 $15 $27 reversed $35 $-1 
#edge $-1 -1 $-1 $50 -3 $51 3 $26 $52 forward 7 unknown #coedge $-1 -1 $-1 $17 
$16 $53 $54 forward $6 $-1 #coedge $-1 -1 $-1 $55 $56 $16 $30 reversed $40 $-1 
#edge $-1 -1 $-1 $37 -6 $57 6 $29 $58 forward 7 unknown #coedge $-1 -1 $-1 $23 
$59 $17 $32 reversed $13 $-1 #edge $-1 -1 $-1 $60 -6 $36 6 $31 $61 forward 7 
unknown #coedge $-1 -1 $-1 $26 $18 $59 $62 forward $35 $-1 #coedge $-1 -1 $-1 
$18 $26 $55 $63 reversed $35 $-1 #loop $-1 -1 $-1 $-1 $33 $39 #vertex $-1 -1 
$-1 $19 $64 #vertex $-1 -1 $-1 $19 $65 #straight-curve $-1 -1 $-1 
447.07607193217473 478.35267653062306 1 0 1 0 I I #face $-1 -1 $-1 $-1 $35 $3 
$-1 $66 reversed single #loop $-1 -1 $-1 $-1 $55 $20 #plane-surface $-1 -1 $-1 
441.07607193217473 481.35267653062306 0.5 0 -1 0 0 0 -1 forwardv I I I I 
#coedge $-1 -1 $-1 $67 $53 $56 $68 forward $21 $-1 #coedge $-1 -1 $-1 $59 $23 
$24 $47 reversed $13 $-1 #coedge $-1 -1 $-1 $53 $67 $23 $45 reversed $21 $-1 
#edge $-1 -1 $-1 $60 -0.5 $69 0.5 $44 $70 forward 7 unknown #coedge $-1 -1 $-1 
$25 $24 $67 $71 forward $9 $-1 #edge $-1 -1 $-1 $51 -6 $69 6 $43 $72 forward 7 
unknown #coedge $-1 -1 $-1 $56 $55 $25 $49 reversed $40 $-1 #edge $-1 -1 $-1 
$73 -6 $50 6 $48 $74 forward 7 unknown #vertex $-1 -1 $-1 $27 $75 #vertex $-1 
-1 $-1 $62 $76 #straight-curve $-1 -1 $-1 447.07607193217473 478.35267653062306 
0 0 -1 0 I I #coedge $-1 -1 $-1 $42 $44 $28 $54 reversed $21 $-1 #edge $-1 -1 
$-1 $57 -3 $60 3 $53 $77 forward 7 unknown #coedge $-1 -1 $-1 $48 $29 $34 $63 
forward $40 $-1 #coedge $-1 -1 $-1 $29 $48 $42 $68 reversed $40 $-1 #vertex $-1 
-1 $-1 $30 $78 #straight-curve $-1 -1 $-1 441.07607193217473 481.35267653062306 
1 -1 0 0 I I #coedge $-1 -1 $-1 $31 $43 $33 $62 reversed $13 $-1 #vertex $-1 -1 
$-1 $54 $79 #straight-curve $-1 -1 $-1 441.07607193217473 475.35267653062306 1 
1 0 0 I I #edge $-1 -1 $-1 $36 -0.5 $51 0.5 $33 $80 forward 7 unknown #edge $-1 
-1 $-1 $37 -0.5 $50 0.5 $34 $81 forward 7 unknown #point $-1 -1 $-1 
447.07607193217473 475.35267653062306 1 #point $-1 -1 $-1 447.07607193217473 
481.35267653062306 1 #plane-surface $-1 -1 $-1 447.07607193217473 
478.35267653062306 0.5 -1 0 0 0 0 1 forwardv I I I I #coedge $-1 -1 $-1 $44 
$42 $46 $71 reversed $21 $-1 #edge $-1 -1 $-1 $57 -0.5 $73 0.5 $56 $82 forward 
7 unknown #vertex $-1 -1 $-1 $71 $83 #straight-curve $-1 -1 $-1 
435.07607193217473 475.35267653062306 0.5 0 0 -1 I I #edge $-1 -1 $-1 $69 -3 
$73 3 $67 $84 forward 7 unknown #straight-curve $-1 -1 $-1 441.07607193217473 
475.35267653062306 0 -1 0 0 I I #vertex $-1 -1 $-1 $49 $85 #straight-curve $-1 
-1 $-1 441.07607193217473 481.35267653062306 0 1 0 0 I I #point $-1 -1 $-1 
447.07607193217473 481.35267653062306 0 #p
Вся брошурка по расшифровке и функция которая сделала предыдущий листинг у меня у меня. Виртуальное пиво будет?
8)
{Smirnoff} вне форума  
 
Непрочитано 27.05.2004, 22:59
#25
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>Fantomas
Все это мы проходили.... И группы расшифровали... и даже кой чего из них вытянули Ну и что дальше :?:
Расшифровывать связи между поверхностями? Фигня полная... получается, что надо делать свою модель солида.... Тоже не то... Выковыривать образующие? Можно, но сложно.... Два взрыва - самое простое, но далеко не для всех тел. Для фанеры - ламината годится а попробуй че нить сферическое или более фильдиперсовое.... Облом (
vk вне форума  
 
Непрочитано 27.05.2004, 23:07
#26
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Ну ладно, ладно... Я тоже дошел до двух эксплодов, как раз думал насчет дуг и сплайнов, как увидел в представленном листинге как считать их точки с некоторым шагом. У меня другая идея есть, только времени ни так много, халтурка привалила...

Брошурку кину в Download, в свое время кажется Apelsinov очень интересовался регионами, может и еще кому сгодится...
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 28.05.2004, 12:50
#27
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


2 Fantomas - С меня бочка виртуального вина

В принципе лисп vk правильно отображает координаты. Для корпусной мебели других расчетов не надо, там почти все перпендикулярно или паралельно друг другу. Для других деталей (непаралельных осям) можно применить следующее действие: выравнивание ПСК по фэйсам солида пока один из размеров X,Y,Z не совпадет с толщиной материала (к примеру ламинат 18мм, или стекло 4мм, фанера 4мм). Проверку засунуть в цикл с количеством проходов равный количеству фэйсов. Если условие не удовлетворено, тогда солид перемещаеться на другой слой помеченный красным цветом и пропускается. Отдельно придеться сделать лисп для обработки именно таких солидов - то есть способом описанный выше Fantomas-oм
Цитата:
... На ум приходит еще вариант сделать интерактивное выравнивание по указанию двух точек. Т. е. прога запрашивает две точки, щелкаем на крайних точках нужной грани и все выравнивается по определенной заранее оси.
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 28.05.2004, 15:05 Данные для раскроя (Мебель, и не только)
#28
Sonar


 
Сообщений: n/a


Всем привет!!!

Я как раз работаю над такой программой (на VBA).
Она в основном закончена и успешно эксплуатируется. Работает по
принципам, описанным на этом форуме, т.е. разбивает 3D-Solid на
регионы, находит самый большой по площади, берет BoundingBox и т.д.
Но пока автоматически берет только детали, лежащие в одной из
основных плоскостей WCS.

Работа с ней выглядит примерно так:

- по запросу выделяешь мышкой изделие (например, шкаф)

- программа вычитает из всех деталей крепежные элементы (евровинты,
шканты, полкодержатели, предварительно вставленные другой моей
програмкой), для получения отверстий.

- создает новый файл "Название_исходного ДЕТАЛИРОВКА.dwg", куда
вставляет все детали 3D-модели, разворачивая их в плоскость
чертежа.

- после соотв. запроса, проставляет на деталях ВСЕ размеры, включая
крепежные отверстия и обозначения (подо что отверстие). Если
отверстие с обратной стороны детали, это тоже будет отмечено.

- Заносит детали в спецификацию (EXCEL) c автоматизированным
обсчетом стоимости.

Кстати, есть и нумерация деталей как на чертеже, так и на 3D-модели
с удобным назначением деталям названий. Возможна нумерация в
автоматическом режиме.

Также есть отдельные програмки для:

- заполнения указанного объема
выдвижными ящиками или полками

- создания и обсчета каркасных конструкций из алюминиевого профиля
или хромированных труб

- быстрой отправки на печать деталировки

- еще кое-что по мелочи



Могу предложить этот набор программ, но за деньги...
Демоверсии нет, но есть более подробное описание.
Есть еще деморолик, только здоровый.

Если кого заинтересовало, пишите, договоримся. (sonator@yandex.ru)
 
 
Автор темы   Непрочитано 28.05.2004, 16:11
#29
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


2 Sonar
Это конечно здорово, что ты сделал такую программу. Раз один сделал, значит и другие смогут. Во всяком случае я так надеюсь.
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 28.05.2004, 17:35
#30
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Не знаю, как насчет автоматизации установки ПСК - пока не нарыл 100% рабочего алгоритма. К тому же совсем не факт, что поверхность с максимальной площадью должна быть базовой (как автоматически сориентировать поворот осей X и Y - это вобще отдельный вопрос). Уж слишком много тонкостей, по крайней мере в моих конфигурациях. Кроме того делать привязку к 18mm.... вряд ли это разумно. Насколько я знаю, ламинат бывает разной толщины.

В общем, пока решил остановиться на ручной установке ПСК. По крайней мере, так все под контролем. Хотя и добавляется лишние клики.... Информация пишется в примитив.
Код:
[Выделить все]
;;; функция вычисления габаритов детали, запроса позиции
;;; и записи информации в расширенные данные 3dsolid'а
(defun c:gabarit (/ *error* d minmax solid csolid ss1 ss2 ssd elt typ pt par endpar maxx maxy maxz minx miny minz name)

  ;; функция обработки ошибок
  (defun *error* (msg /)
    (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
    (vl-cmdf "_.u")
    (princ)
  ) ;_  defun

  ;; функция корректировки минимальных и максимальных значений координат
  ;; в соответствии с координатами точки pt по осям с учетом текущей ПСК
  (defun minmax (pt /)
    (setq pt   (trans pt 0 1)
          maxx (max maxx (car pt))
          maxy (max maxy (cadr pt))
          maxz (max maxz (caddr pt))
          minx (min minx (car pt))
          miny (min miny (cadr pt))
          minz (min minz (caddr pt))
    ) ;_  setq
  ) ;_  defun

  (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) ;_ метка группы UNDO

  ;; выбор ПСК
  (princ "\nУстановите ПСК по грани параллельной базовой поверхности.\n")
  (command "_.ucs" "_fa")
  (while (= (getvar "cmdactive") 1) (command pause))

  ;; инициализация переменных
  (setq d 0.01) ;_ шаг сканирования кривых (для ARC и CIRCLE - радианы, для SPLINE и ELLIPSE - единицы ACAD'а)
  (setq maxx (setq maxy (setq maxz -1e99)))
  (setq minx (setq miny (setq minz 1e99)))
  
  (setq solid (car (entsel "\nУкажите 3DSOLID >")))
  (if (= (cdr (assoc 0 (entget solid))) "3DSOLID")
    (progn
      (setvar "cmdecho" 0) ;_ отключение эхо-вывода команд
      (setq csolid (vlax-vla-object->ename (vla-copy (vlax-ename->vla-object solid))))
      (command "_.explode" csolid) ;_ разделение тела на поверхности
      (setq ss1 (ssget "P"))
      (setq ssd (ssadd))
      (while (> (sslength ss1) 0)
        (setq elt (ssname ss1 0))
        (ssdel elt ss1)
        (command "_.explode" elt) ;_ разделение поверхности на простейшие примитивы
        (setq ss2 (ssget "P"))
        (while (> (sslength ss2) 0)
          (setq elt (ssname ss2 0))
          (ssdel elt ss2)
          (ssadd elt ssd)
        ) ;_  while
      ) ;_  while

      ;; в наборе ssd теперь содержатся все простейшие примитивы после двух взрывов 3DSOLID'а

      (while (> (sslength ssd) 0)
        (setq elt (ssname ssd 0))
        (ssdel elt ssd)
        (setq vla:elt (vlax-ename->vla-object elt))
        (setq delt (entget elt))
        (setq typ (cdr (assoc 0 delt)))
        (cond
          ((= typ "LINE")
           (minmax (cdr (assoc 10 delt)))
           (minmax (cdr (assoc 11 delt)))
          )
          ((member typ '("SPLINE" "ELLIPSE" "ARC" "CIRCLE"))
           (setq endpar (vlax-curve-getendparam vla:elt))
           (setq par (vlax-curve-getstartparam vla:elt))
           (while (< (+ par d) endpar)
             (setq par (+ par d))
             (minmax (vlax-curve-getpointatparam vla:elt par))
           ) ;_  while
          )
          (t (princ (strcat "\nОбнаруженный примитив " typ " проигнорирован!")))
        ) ;_  cond
        (vla-erase vla:elt)
      ) ;_  while

      ;; печать результатов
      (princ (strcat "\nX=" (rtos (- maxx minx) 2 2)))
      (princ (strcat "\nY=" (rtos (- maxy miny) 2 2)))
      (princ (strcat "\nZ=" (rtos (- maxz minz) 2 2)))

      ;; запрос пользовательского имени примитива 3DSOLID'а
      (setq name (getstring t "\nВведите позицию (название детали) для дальнейшей идентификации: "))

      ;; запись результатов в расширенные данные примитива
      (regapp "gabarit") ;_ регистрация приложения
      (entmod (append (entget solid)
                      (list (list -3
                                  (list "gabarit"
                                        (cons 1000 name) ;_ пользовательское имя примитива
                                        (cons 1010 (list (- maxx minx) (- maxy miny) (- maxz minz))) ;_ размеры
                                  ) ;_  list
                            ) ;_  list
                      ) ;_  list
              ) ;_  append
      ) ;_  entmod

      (vl-cmdf "_.ucs" "_p") ;_ восстановление ПСК
      (setvar "cmdecho" 1) ;_ включение эхо-вывода команд
    ) ;_  progn
    (princ "Это не 3DSOLID!")
  ) ;_  if
  (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) ;_ метка группы UNDO
  (princ)
) ;_  defun
(vl-load-com)
И вторая функция для вывода данных пока только в текстовый файл
Код:
[Выделить все]
;;; функция извлечения информации о позиции и габаритах детали из расширенных данных 3dsolid'а
;;; и записи их в текстовый файл
(defun c:gab2text (/ ss lst elt ff fname)
  (princ "\nВыберите объекты для экспорта информации в файл >")
  (if (setq ss (ssget '((0 . "3DSOLID"))))
    (progn
      (while (> (sslength ss) 0)
        (setq elt (ssname ss 0))
        (ssdel elt ss)
        (setq lst (cons (cadr (assoc -3 (entget elt '("gabarit")))) lst))
      ) ;_  while

      ;; формирование имени текстового файла с расширением .gab в той же папке что и чертеж
      (setq fname (strcat (getvar "dwgprefix") (vl-string-right-trim "dwg" (getvar "dwgname")) "gab"))

      ;; открытие файла для записи
      (if (findfile fname)
        (progn
          (alert (strcat "\nФайл " fname " существует. Данные будут добавлены в конец файла."))
          (setq ff (open fname "a"))
        ) ;_  progn
        (progn
          (alert (strcat "\nДанные будут записаны в файл " fname))
          (setq ff (open fname "w"))
        ) ;_  progn
      ) ;_  if

      ;; запись в файл
      (write-line "----------------" ff)
      (mapcar '(lambda (x)
                 (write-line
                   (if (car x)
                     (vl-string-trim "()" (vl-princ-to-string x))
                     "нет данных"
                   ) ;_  if
                   ff
                 ) ;_  write-line
               ) ;_  lambda
              (mapcar '(lambda (x) (cons (cdadr x) (cdaddr x))) (reverse lst)) ;_ выборка из расширенных данных имени и размеров
      ) ;_  mapcar
      (write-line "----------------" ff)

      (close ff) ;_ закрытие файла
    ) ;_  progn
    (princ "\nНичего не выбрано...")
  ) ;_  if
  (princ)
) ;_  defun
(vl-load-com)
Тут пиво кончилось, а мысли о продолжении остались такие....
- нормальный вывод в Эксель
- автоматизированная отрисовка позиций в виде
- редактор РД
.... может быть что то и получится...
vk вне форума  
 
Непрочитано 28.05.2004, 19:25
#31
BOZ


 
Сообщений: n/a


Если уж на то пошло, то подход к программе должен быть другой
Надо написать функцию которая будет рисовать Solid, пусть даже прямоугольный, запросив габарит и тут же записать в расширенные данные габарит, позицию и все что угодно.
А дальше эти данные в любой момент элементарно вытаскиваются.
Над этим солидом можно будет проводить и различные операции (скругления, фаски, вычесть что-то). При этом, если его габарит не изменится, то в расширенных данных останется правильная информация.
И не надо заботиться о ПСК и углах наклона.
 
 
Непрочитано 28.05.2004, 19:40
#32
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от BOZ
Если уж на то пошло, то подход к программе должен быть другой
.....
Над этим солидом можно будет проводить и различные операции (скругления, фаски, вычесть что-то). При этом, если его габарит не изменится, то в расширенных данных останется правильная информация...
Угу... А если габарит изменится, а меняется он практически всегда (ох уж это волшебное слово "изменения" ) то сохраненная информация уже не будет представлять ценности... Частным случаем таких изменений может служить разработка конструкции на основе какой то существующей. Рисовать заново??? Спасибо, в другой раз....
Вот потому то и присматриваюсь к Инвентору, хотя там тож не все прозрачно.
vk вне форума  
 
Непрочитано 28.05.2004, 19:50 Re: Данные для раскроя (Мебель, и не только)
#33
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от Sonar
Я как раз работаю над такой программой (на VBA).
Она в основном закончена и успешно эксплуатируется. Работает по
принципам, описанным на этом форуме, т.е. разбивает 3D-Solid на
регионы, находит самый большой по площади, берет BoundingBox и т.д.
Серьезно сомневаюсь насчет применения BoundingBox к телам, имеющим сплайн по одной из сторон. Дело в том, что BoundingBox определит габарит, но не совсем правильно... Похоже, что он проверяет у сплайна координаты управляющих точек. А управляющие точки могут лежать далеко за пределами детали - тут все зависит от конфигурации кривой. Увы, это годится только для простых деталей (как минимум без сплайнов).
vk вне форума  
 
Непрочитано 29.05.2004, 13:46
#34
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Простенький редактор расширенных данных. Непосредственно Лисп-программа.
Код:
[Выделить все]
;;; функция редактирования расширенных данных примитива
(defun c:gabedit (/ *error* dcl_id solid lst ok n x y z)

  ;; функция обработки ошибок
  (defun *error* (a)
    (if dcl_id
      (unload_dialog dcl_id)
    ) ;_  if
  ) ;_  defun

  ;; загрузка диалога
  (if (< (setq dcl_id (load_dialog "gabarit.dcl")) 0)
    (progn
      (princ
        "\nФайл диалога gabarit.dcl не найден! Проверьте наличие файла и пути поиска файлов поддержки."
      ) ;_  princ
      (exit)
    ) ;_  progn
  ) ;_  if

  (setq solid (car (entsel "\nУкажите 3DSOLID >")))
  (if (= (cdr (assoc 0 (entget solid))) "3DSOLID")
    (progn
      (setq lst (cdadr (assoc -3 (entget solid '("gabarit")))))
      (setq n (cdr (assoc 1000 lst)))
      (setq x (cadr (assoc 1010 lst)))
      (setq y (caddr (assoc 1010 lst)))
      (setq z (cadddr (assoc 1010 lst)))
      (new_dialog "gabedit" dcl_id)
      (set_tile "name"
                (if n
                  n
                  "нет данных"
                ) ;_  if
      ) ;_  set_tile
      (set_tile "x"
                (if x
                  (rtos x)
                  "нет данных"
                ) ;_  if
      ) ;_  set_tile
      (set_tile "y"
                (if y
                  (rtos y)
                  "нет данных"
                ) ;_  if
      ) ;_  set_tile
      (set_tile "z"
                (if z
                  (rtos z)
                  "нет данных"
                ) ;_  if
      ) ;_  set_tile
      (action_tile "accept" "(done_dialog 1)")
      (action_tile "name" "(setq n $value)")
      (action_tile "x" "(setq x (distof $value 2))")
      (action_tile "y" "(setq y (distof $value 2))")
      (action_tile "z" "(setq z (distof $value 2))")
      (setq ok (start_dialog))
      (unload_dialog dcl_id)
      (if (= ok 1)
        (if (and n x y z)
          (entmod
            (append (entget solid) (list (list -3 (list "gabarit" (cons 1000 n) (cons 1010 (list x y z))))))
          ) ;_  entmod
          (alert "Данные ошибочны.\nИзменения НЕ сохранены.")
        ) ;_  if
      ) ;_  if
    ) ;_  progn
    (princ "\nЭто не 3DSOLID!")
  ) ;_  if
  (princ)
) ;_  defun
Файл диалога gabarit.dcl
Код:
[Выделить все]
gabedit : dialog {
  label = "Редактирование данных";
    : column {
      : edit_box {
      	label = "Позиция";
      	key = "name";
      	edit_width =30;
      }//edit_box
      : edit_box {
      	label = "X";
      	key = "x";
      	edit_width =30;
      }//edit_box
      : edit_box {
      	label = "Y";
      	key = "y";
      	edit_width =30;
      }//edit_box
      : edit_box {
      	label = "Z";
      	key = "z";
      	edit_width =30;
      }//edit_box
      : row {
        : button {
  	  label = "Ok";
  	  key = "accept";
  	  is_default = true;
     	  width = 15;
    	  fixed_width = true;
  	}//button
  	: button {
  	  label = "Cancel";
  	  key = "exit";
  	  is_cancel = true;
     	  width = 15;
    	  fixed_width = true;
  	}//button
      }//row
    }//column
  }//dialog
Путь к папке в которой лежит gabarit.dcl должен быть указан в списке поиска путей файлов поддержки.
vk вне форума  
 
Непрочитано 31.05.2004, 08:50 Re: Данные для раскроя (Мебель, и не только)
#35
Sonar


 
Сообщений: n/a


[/quote]Серьезно сомневаюсь насчет применения BoundingBox к телам, имеющим сплайн по одной из сторон. Дело в том, что BoundingBox определит габарит, но не совсем правильно... Похоже, что он проверяет у сплайна координаты управляющих точек. А управляющие точки могут лежать далеко за пределами детали - тут все зависит от конфигурации кривой. Увы, это годится только для простых деталей (как минимум без сплайнов).[/quote]

Серьезно сомневаюсь насчет целесообразности применения сплайнов в проектировании мебели. На них и размеры не поставишь. Практически все можно дугами нарисовать. Ну а если такая деталь все-таки попадется, можно в EXCEL'е и вручную размер подправить.
Привязки к толщине материала у меня нет.
Ручное указание ориентации можно добавить опционально - для сложных случаев, а в простых, моя программа успешно работает...
 
 
Автор темы   Непрочитано 31.05.2004, 13:17
#36
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Цитата:
Серьезно сомневаюсь насчет целесообразности применения сплайнов в проектировании мебели. На них и размеры не поставишь. Практически все можно дугами нарисовать. Ну а если такая деталь все-таки попадется, можно в EXCEL'е и вручную размер подправить.
Привязки к толщине материала у меня нет.
Ручное указание ориентации можно добавить опционально - для сложных случаев, а в простых, моя программа успешно работает...
Sonar совершенно прав. Для листовых материалов большего не надо.
Сплайн я пользую только для быстрого рисования выкрутасов, когда клиенту надо через 15 минут показать трехмерку. Потом сплайн сверху перерисовываеться дугами и делаеться новый солид, для проставления размеров.
В мебельном производстве необходимость произвольно вертеть деталь возникает только при построении угловых элементов кухонь, шкафов и.т.д. Чаще всего это дверцы и некоторые цоколи. Но таких деталей так мало (1-10 шт. в одной сборке) что для них и стоит применить ручной способ установки ПСК. Пометить их красным или скинуть на другой слой а там уже обрабатывать вручную и скидывать обратно.
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 31.05.2004, 14:44
#37
BOZ


 
Сообщений: n/a


Цитата:
Сообщение от vk
Угу... А если габарит изменится, а меняется он практически всегда (ох уж это волшебное слово "изменения" ) то сохраненная информация уже не будет представлять ценности... Частным случаем таких изменений может служить разработка конструкции на основе какой то существующей. Рисовать заново??? Спасибо, в другой раз....
Вот потому то и присматриваюсь к Инвентору, хотя там тож не все прозрачно.
Как раз для мебельных форм габарит меняется очень редко не говоря уже о том, что 95% деталей вообще прямоугольные.
А разрабатывать конструкцию состоящую из солидов на основе существующей - в Автокаде вообще нереально. Проще перестроить солид с нуля, чем его редактировать. Не стречировать же ты его будешь?
Зачем присматриваться к Инвентору и тратить время на адаптацию? Если проектирование мебели - постоянная работа, то есть несколько отечественных САПР. В частности, если говорить про Автокад, то уже упомянутое приложение 3D-Constructor - перекроет все эти проблемы элементарно.
 
 
Непрочитано 31.05.2004, 15:11
#38
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Вижу что тут уже написали прогу. Но пока не решена проблемма нахождения площади заготовок при положениии детали не параллельно осям. Чем я и занимаюсь. К сожелению сейчас со временем полный цейтнот, но успел написать для частного случая когда детели прямоугольные, допишу до выходных. Вот заготовочка для прямоугольных деталей, можно "покормить" точками лежашими на одной плоскости (т. е. после второго взрыва наибольшего региона), прошу прошения переменные пока все глобальные. Конец связи...
Код:
[Выделить все]
 (defun minDimensions (pointList /)
   (vl-load-com)
   (setq oCount 0
	 maxDist 0.0)
   (repeat(length pointList)
     (setq curPoint(nth oCount pointList)
	   iCount 0); end setq
     (repeat(length pointList)
       (setq curDist(distance curPoint(nth iCount pointList)))
       (if(>= curDist maxDist)
	 (progn
	 (setq maxPt1 curPoint
	       maxPt2 (nth iCount pointList)
	       maxDist curDist); end setq
	 );end progn
	 ); end if
       (setq iCount(1+ iCount))
       ); end repeat
     (setq oCount(1+ oCount))
     ); end repeat
   
   (if(<=(car maxPt2)(car maxPt1))
     (setq cPoint(list(+(car maxPt1)(/(-(car maxPt2)(car maxPt1))2))
		      (+(cadr maxPt1)(/(-(cadr maxPt2)(cadr maxPt1))2))
		      (+(nth 2 maxPt1)(/(-(nth 2 maxPt2)(nth 2 maxPt1))2))
		      ); end list
	   ); end setq
     (setq cPoint(list(-(car maxPt1)(/(-(car maxPt2)(car maxPt1))2))
		      (-(cadr maxPt1)(/(-(cadr maxPt2)(cadr maxPt1))2))
		      (-(nth 2 maxPt1)(/(-(nth 2 maxPt2)(nth 2 maxPt1))2))
		      ); end list
	   ); end setq
     ); end if
   (setq sphRadius(/ maxDist 2))
   (setq pCount 0
	 pList '()
	 ); end setq
   (repeat(length pointList)
     (setq curPoint(nth pCount pointList))
     (if(equal(* sphRadius sphRadius)
	      (+(*(-(car cPoint)(car curPoint))(-(car cPoint)(car curPoint)))
		(*(-(cadr cPoint)(cadr curPoint))(-(cadr cPoint)(cadr curPoint)))
		(*(-(nth 2 cPoint)(nth 2 curPoint))(-(nth 2 cPoint)(nth 2 curPoint)))
		); +
	      1); end equal
	 (setq pList(append pList(list curPoint)))
       ); end if
     (setq pCount(1+ pCount))
     ); end repeat
   
   (if(>=(length pList)3)
     (progn
          (setq dCount 0
		distList '()
		); end setq
   (repeat(length pList)
     (setq curPoint(nth dCount pList)
	   iCount 0); end setq
     (repeat(length pointList)
       (setq curDist(distance curPoint(nth iCount pointList)))
       (if(not(member curDist distList))
	 (progn
        (setq distList(append distList(list curDist))
	      distList(vl-sort distList(function(lambda(a b)(> a b))))
	      ); end setq
	); end progn
	 ); end if
       (setq iCount(1+ iCount))
       ); end repeat
     (setq dCount(1+ dCount))
     ); end repeat
       ); end progn
     );end if
              	(if(= 3(length distList))
	      (setq dimList(list(cadr distList)(cadr distList)))
              (setq dimList(list(cadr distList)(nth 2 distList)))
	      ); end if
   ); end minDimensions
Р. S. Понятно что для любой задачи уже существуют какие либо решения, однако развлекакмся мы таким способом. И потом чем больше реализаций тем лучше. 8)
{Smirnoff} вне форума  
 
Непрочитано 31.05.2004, 22:55
#39
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от Sonar
Серьезно сомневаюсь насчет целесообразности применения сплайнов в проектировании мебели. На них и размеры не поставишь.
Применять или нет - личное дело каждого разработчика и используемых технологий.
Во вторых, перечитайте первый пост данного топика. Там вопрос стоял именно о сплайнах. Конечно, можно перерисовать сплайн дугами и отрезками, но в большинстве случаев это не нужно, да и время отнимает... В каких то случаях может понадобиться эллипс... Его тоже дугами аппроксимировать?
И последнее, размеры на сплайн ставятся элементарно - пара координат XY точки с привязкой _nea например (как вариант - программно получить таблицу координат).
Даже не знаю, что проще разметить на реальном листе: десяток дуг/отрезков (30-40 координат) и хорошо, если центр дуги не окажется где то далеко или построить плавную кривую по 15-20 точкам (такое же к-во координат) с достаточной точностью, хотя бы даже и "от руки". Поделитесь соображениями на этот счет.

А вот с опциональным выбором ПСК - полностью согласен. Нельзя навязывать это как в моей проге (обещаю подправить ) но и не желательно лишать пользователя этой возможности, заставляя применять дополнительную пару команд.
Цитата:
Сообщение от BOZ
А разрабатывать конструкцию состоящую из солидов на основе существующей - в Автокаде вообще нереально. Проще перестроить солид с нуля, чем его редактировать.
Каждому свое.... Недавний пример: два внешне похожих друг на друга изделия, только на одном имеется съемная крышка, а на другом в этом месте глухая стенка. Соответственно - различные способы стыковки деталей. Боковина имеет кучу отверстий различной формы но на обоих изделиях их расположение идентично. И что все это перерисовывать вместо того чтоб поправить одну кромку?
Другой случай: Была сделана модель, где заложена толщина материала 15мм. Закупили 18мм (зачем - не ко мне вопрос). Какие то размеры критичны, какие то нет. Надо по быстрому подкорректировать геометрию. Все свелось к перемещению нескольких граней в каждой детали. Но габарит некоторых деталей уже изменился.
Потому еще раз повторю - "в другой раз". И без меня.
Цитата:
Зачем присматриваться к Инвентору и тратить время на адаптацию?
Чтоб из двух (трех, пяти, двадцати) выбрать то что лучше всего подходит для решения задачи.
vk вне форума  
 
Непрочитано 01.06.2004, 11:13
#40
Sonar


 
Сообщений: n/a


На счет простановки размеров на сплайны я конечно погорячился :?
(ну не люблю я сплайны!). Просто я лет 5 проектирую мебель и за это время мне, может быть, пару раз приходилось использовать эллипс... А вообще, прекрасно обхожусь дугами, хотя vk прав, это конечно дело хозяйское.

BOZ :
А разрабатывать конструкцию состоящую из солидов на основе существующей - в Автокаде вообще нереально. Проще перестроить солид с нуля, чем его редактировать.


Постоянно так делаю! Удлиннить/укоротить шкафчик (если детали прямые) - минутное дело. В XDATA у меня номер и название детали - они при редактировании сохраняются.
 
 
Автор темы   Непрочитано 01.06.2004, 15:31
#41
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Цитата:
Во вторых, перечитайте первый пост данного топика. Там вопрос стоял именно о сплайнах.
Сплайны я использую только для предварительного моделирования, когда клиенту надо быстро дать трехмерную раскраску. Быстро хочеться давать и приблизительную цену (т.е. нужен метраж). Вот для чего я спрашивал насчет сплайнов. Легко могу от них отказаться.

Цитата:
И последнее, размеры на сплайн ставятся элементарно - пара координат XY точки с привязкой _nea например (как вариант - программно получить таблицу координат).
Для чертежа использую дуги - наши мастера не переваривают координатные привязки, только габаритные. Когда у дуги большущий радиус то даю ее хорду (отрезок соединяющий начало и конец дуги) и расстояние между серединами.

С Боз-ом не согласен. Чаще всего меняю существующий солид
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 01.06.2004, 16:21
#42
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от Don Pedro
Быстро хочеться давать и приблизительную цену (т.е. нужен метраж). Вот для чего я спрашивал насчет сплайнов. Легко могу от них отказаться.
Тогда быстро вряд ли получится, придется потратить время на рисование нескольких примитивов :roll: А впрочем, BoundingBox выдаст несколько завышенное значение А много - не мало Если управляющая точка сплайна улетит не слишком далеко за габарит - мож никто и не заметит :wink:

Цитата:
.... наши мастера не переваривают координатные привязки, только габаритные.
Наши тоже не переваривают Иногда просто делаю бумажный шаблон 1:1. Ну это скорее по настроению

>all
Чтоб не засорять форум килобайтами кода, код с обещаными (и не только) исправлениями выложил по адресу hhttp://bazarov.net/~vkle/gabarit.zip (3,5 кб)
vk вне форума  
 
Автор темы   Непрочитано 02.06.2004, 13:43
#43
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Прекрасная работа!
Я даже боюсь начальству показывать, слишком жирно будет!

Пожелания:
1. Сделать опциональное выделение рамкой. Чтобы можно было быстро получить метраж;
2. Выделение цветом солидов у которых присутствуют координаты записанные в расширенные данные;
3. Выделение цветом солидов у которых есть позиция (название детали);
4. Быстрое обнуление всех расширенных данных, а также выборочное обнуление. Или отдельную функцию проверки на соответствие данных с реальными координатами которая запускается перед экспортом в текстовку. (пригодиться когда надо делать изменения в конструкцию)
5. Проверка данных на обязательное наличие одинаковой толщины (толщину запрашивать у пользователя). Солиды у которых нет обозначенной толщины (к примеру 18мм ламинат) помечать цветом для идентификации для дальнейшей ручной установки ПСК.
6. Запись данных в обычный текстовый файл но с расширением .xls
Формат данных:
Координата Х <табулятор> Координата Y <табулятор> Координата Z <табулятор> Позиция

Надеюсь, я не слишком напрягаю.
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 02.06.2004, 18:24
#44
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Ну это еще не самое то... Всего лишь наброски, хотя и практически рабочие.

Вижу, моя прога пригодилась не только мне... По поводу пожеланий:
1) На какой стадии? Если при вычислении габарита - то необходимо исключить то что не стыкуется с текущей ПСК. Тоесть, выбрать нужно только детали лежащие в плоскостях, параллельных плану текущей ПСК и соответствующим образом ориентированных. Пока не знаю, как это решить программно чтоб получилось надежно. ИМХО это самое "интеллектуальное" место.
2 и 3) Сделаю... А каким цветом? :wink: У меня цвет детали как правило ByLayer ("ПоСлою"), а слоям назначаю разные цвета, чтоб в хитросплетениях линий можно было ориентироваться....
Впрочем может быть удобнее скрывать детали у которых есть расширенные данные либо путем замораживания/выключения слоя детали или лучше управлять видимостью (в последнем случае потребуется еще одна малюсенькая функция-команда для восстановления видимости)
4) У меня была аналогичная мысль о проверке на соответствие, но... "см. п.1" Удаление данных (только габаритных) сделаю.
5) Может проще это сделать (во всяком случае увидеть) непосредственно в Экселе (см. п.6)? Хотя, можно попробовать и программно... ИМХО это вопрос не первой срочности...
6) Добавил функцию прямого экспорта в Эксель (OfficeXP), только формат немножко другой (делал под свои нужды). Перед употреблением рекомендуется прочитать комментарии перед программой GAB2EX (в конце Лисп-файла). Адрес прежний http://bazarov.net/~vkle/gabarit.zip (7,3 кб) Не гарантирую что все работает идеально... Времени на всестороннее тестирование почти нет :cry:

Кроме того, у меня есть еще и свое пожелание, которое надеюсь воплотить в... код. Копирование детали из сборки в отдельный файл на этапе вычисления габарита (ПСК то установлена правильно!!!). И соответственно, в Экселевском файле создание гиперссылки на этот файл детали (по определенным правилам). Не знаю, нужно ли это кому кроме меня... Если не нужно, то для себя сделаю отдельные функции.
vk вне форума  
 
Непрочитано 03.06.2004, 14:29
#45
BOZ


 
Сообщений: n/a


Цитата:
Сообщение от vk
Тоесть, выбрать нужно только детали лежащие в плоскостях, параллельных плану текущей ПСК и соответствующим образом ориентированных. Пока не знаю, как это решить программно чтоб получилось надежно. ИМХО это самое "интеллектуальное" место.
Предлагаю. Первоначальный box создать отдельной командой и записать в его расширенные данный в код 1013 значение (0 0 1) - вектор направления выдавливания в МСК.
Если объект будет повернут в пространстве, то это значение изменится. Плоскопараллельный перенос и поворты вокруг Z данное значение не изменят. Будет Вам признак.
 
 
Непрочитано 03.06.2004, 16:25
#46
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>BOZ
Интересная мысль! Только нужна ориентация детали, полученная после всех преобразований.... Тут еще есть над чем подумать.

>Don Pedro
Забирайте http://bazarov.net/~vkle/gabarit.zip (8,7 кб)
vk вне форума  
 
Автор темы   Непрочитано 03.06.2004, 16:35
#47
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


1. Быстрое вычисление габаритов происходит выборочно при запуске команды gabarit:
Код:
[Выделить все]
Укажите 3DSOLID или [Ucs, Window]  >
Цитата:
Пока не знаю, как это решить программно чтоб получилось надежно. ИМХО это самое "интеллектуальное" место.
Решаеться изучением плоскостей солида.
Вариант 1: Самый большой регион (после взрыва) и есть оптимальная плоскость для ПСК;
Вариант 2: Перебор фэйсов для ПСК. Если в данных GetBoundingBox отсутствует толщина материала (ранее заданная пользователем) то для ПСК применяеться другой фэйс (не знаю если программно так возможно но, имхо, должно работать железно);

Цитата:
2 и 3) Сделаю... А каким цветом? У меня цвет детали как правило ByLayer ("ПоСлою")
У меня точно так же. Для экспорта данных, думаю, надо будет слой изолировать от других (остальные заморожены и скрыты). У меня, к примеру, слой с ламинатом имеет цвет White, а когда текстур больше то применяю оттенки желтого. Думаю эти параметры каждый пользователь должен сам и указать (один раз в жизни ). То есть, самому редактировать лисп. Меня устроит зеленый и темно-зеленый.
Цитата:
Впрочем может быть удобнее скрывать детали у которых есть расширенные данные либо путем замораживания/выключения слоя детали или лучше управлять видимостью (в последнем случае потребуется еще одна малюсенькая функция-команда для восстановления видимости)
Надо оставлять видимыми только те детали у которых в данных нет заданной толщины материала. Если нет толщины - значит деталь криво стоит, значит надо ручками ставить ПСК. ИМХО, проверка на толщину - универсальное решение для листовых материалов. В принципе, в этом весь смысл пункта 5.

6. У меня Офис 2003. Не хочет загружаться.
Код:
[Выделить все]
Command: gab2ex
; error: An error has occurred inside the *error* functionbad argument type: 
VLA-OBJECT nil
Думаю, то что я предлагал выше будет более универсальным решением, такой файл открываеться ЛЮБЫМ Экселем.
Цитата:
6. Запись данных в обычный текстовый файл но с расширением .xls
Формат данных:
Координата Х <табулятор> Координата Y <табулятор> Координата Z <табулятор> Позиция
Цитата:
Копирование детали из сборки в отдельный файл на этапе вычисления габарита
Мне нужно. И по отдельности каждую копировать и все детали копировать и разворачивать в план WCS. Желательно только регионы, а в центре региона текстом вывести позицию детали и габариты.
__________________
Via est vita!
Don Pedro вне форума  
 
Автор темы   Непрочитано 03.06.2004, 16:47
#48
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Цитата:
>Don Pedro
Забирайте http://vkle.bazarov.net/gabarit.zip (8,7 кб)
Пока писал ответ, вы уже переделали... Респект!
Потестил, хорошо работает!
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 03.06.2004, 17:13
#49


 
Сообщений: n/a


Цитата:
Сообщение от vk
>BOZ
Интересная мысль! Только нужна ориентация детали, полученная после всех преобразований.... Тут еще есть над чем подумать.
Описанный мной вектор как раз всегда и будет всегда указывать на ось Z детали. Припиши еще вектора (1 0 0) и (0 1 0) - будуешь знать и направление осей X и Y.
А если приписать нулевую точку и три точки на габаритах (не помню, кажется в код 1011) то всегда можно будет вычислить и плоскость и габариты (если не было операций).
 
 
Непрочитано 03.06.2004, 17:19
#50
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
У меня Офис 2003. Не хочет загружаться
Возможно... в "Excel.Application.10" надо убрать ".10" - в этом случае будет запускаться первый попавшийся в системе Excel.
vk вне форума  
 
Автор темы   Непрочитано 03.06.2004, 18:10
#51
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Цитата:
Возможно... в "Excel.Application.10" надо убрать ".10" - в этом случае будет запускаться первый попавшийся в системе Excel.
Работает. Спасибо!
Штудирую...

ЗЫ: У данных XYZ четыре лишних нуля.
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 03.06.2004, 18:38
#52
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
У данных XYZ четыре лишних нуля
Вобще то я так и делал: передавал в Excel число с несколько завышенной точностью. Разрядность отображения чисел установлена в файле шаблона .xlt и для XYZ в моем варианте установлен один знак после запятой. Почему может отображаться 4 знака... Возможно, дело в настройках Excel'я Сервис -> Параметры -> Международные -> Числа -> там должна быть выбрана запятая (,) или системные настройки, если в них запятая установлена....
Можно в принципе автоматически настраивать Excel, но эта настройка хранится кажись в системе а не в файле и будет распространяться на другие файлы.
Вроде бы у нас принята запятая в качестве разделителя, а в Лиспе используется точка. Поэтому в проге сделана замена точки на запятую
Код:
[Выделить все]
          xyz  (mapcar '(lambda (x) (vl-string-subst "," "." (rtos x 2 4))) ;_ здесь задана завышенная точность размеров
                       (cdr (assoc 1010 (cdadr (assoc -3 delt))))
               ) ;_  mapcar
В принципе, если надо оставить точку - можно слегка подсократить
Код:
[Выделить все]
          xyz  (mapcar '(lambda (x) (rtos x 2 4)) ;_ здесь задана завышенная точность размеров
                       (cdr (assoc 1010 (cdadr (assoc -3 delt))))
               ) ;_  mapcar
Количество знаков после запятой для экспорта определено 4 в третьем аргументе rtos
vk вне форума  
 
Автор темы   Непрочитано 03.06.2004, 19:21
#53
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Лишние нули находяться до запятой, а не после.
То есть речь о точности не идет.
Код:
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 03.06.2004, 19:40
#54
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Только что перепроверил... Все верно работает.... Как на "круглых" размерах, так и на дробных....
Может это проблема 2003 офиса или каких то региональных настроек?
vk вне форума  
 
Непрочитано 03.06.2004, 23:01
#55
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Запись данных в обычный текстовый файл но с расширением .xls
Формат данных:
Координата Х <табулятор> Координата Y <табулятор> Координата Z <табулятор> Позиция
Сделал, тока расширение оставил прежним. Все ж натуральный Excel хочу оставить основным, а текстовый формат - это так.... "постольку поскольку".... или "на всякий случай".
vk вне форума  
 
Непрочитано 04.06.2004, 10:03
#56
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Большое спасибо BOZ за подсказку по 1011 группе DXF!!! Кажется должно получиться!

>Don Pedro
Добавил групповой выбор. Для чего мигалка - надеюсь понятно. А пищалка мне пригодицца . Некоторые примитивы обсчитываются долго. То ли комп слабоват, то ли наворочены они слишком.... :roll: Попробовал для ускорения выцепить функцию из OVERKILL (из Экспрессов-2002). Не знаю как на других версиях... Если не пойдет - выкиньте тот (if c:-overkill.....
vk вне форума  
 
Автор темы   Непрочитано 04.06.2004, 17:49
#57
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Мигалка - хорошая идея! Только работает после ввода позиции, что сводит ее практическое применение к нулю. Надо чтоб мигало перед вводом позиции, или чтоб окрашивалось в другой цвет, задаваемый пользователем вручную в лиспе.

Ключ Select. После выделения рамкой, цифры записанные в расширенные данные не соответствуют реальным измерениям
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 04.06.2004, 19:30
#58
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Увлекся ПСК - позабыл про все на свете... И про цифирь тоже...

Мигалку не подумавши в последний момент переткнул, типа чтоб не мигала при одиночном выборе.... Изначально ее место было немного повыше

Исправил и то и это.
vk вне форума  
 
Непрочитано 05.06.2004, 05:17
#59
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


>vk Большое спасибо BOZ за подсказку по 1011 группе DXF!!! Кажется должно получиться!

В развитие этой темы: если примитивы создавать программно и не редактировать их с изменением габаритов, то можно анализируя XDATA создавать полки, фасады, ящики, расставлять крепеж своими командами.
Что однозначно быстрее средств Автокада, но тут есть одно НО!
Обеспечить редактирование программно - очень большой головняк.
А ведь всем нам хорошо знакомо это волшебное слово "согласование".
:evil:
Именно поэтому перешел на МДТ, а потом на 3D-Constructor.

2vk Если интересуют исходники, тулзовина такая написана, но заброшена еще в 2001г. :roll: Может пригодится?
BigBrother вне форума  
 
Непрочитано 05.06.2004, 17:42
#60
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>BigBrother
Спасибо за предложение, однако, мне в ближайшее время точно не пригодится. По тем же самым "волшебным" причинам. В том то и дело, что сейчас проще ручками поправить проблемные места в модели, а если все будет построено на программной правке - головняка не избежать

Чем привлекает Инвентор - так это асоциативность деталей. Стоит изменить один размер - и все что с ним связано тоже автоматом подстраивается, меняется.... Конечно если все зависимости сделаны правильно . Вплоть до размерного текста в чертеже детали! Впрочем, это не исключает необходимость применения мозгов :!: только освобождает от рутинной работы... Останавливает только пока еще скромный его функционал. По крайней мере в 7 версии, с которой знаком. Впрочем, надеюсь что сия софтина будет развиваться...

>Don Pedro
Копирование деталей из сборки в отдельные файлы - сделал свою версию. Если деталь имеет позицию и сохраненную ПСК (а сохраняется они с деталью при вычислении габарита) - то она будет скопирована в отдельный файл в указанную папку (папки должны быть созданы заранее, имена папок не должны содержать пробелов). Ориентация и расположение детали в конечном файле определяется ПСК, которая сохранена в момент вычисления габарита. Позже постараюсь добавить еще и прописывание гиперссылок на эти файлы в экселевский файл.
Кстати, что все таки с лишними нулями? И откуда точка взялась? Должна вроде быть запятая... К сожалению нет под руками 2003 Офиса чтоб проверить подробно...
vk вне форума  
 
Автор темы   Непрочитано 05.06.2004, 20:16
#61
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Цитата:
Кстати, что все таки с лишними нулями? И откуда точка взялась? Должна вроде быть запятая... К сожалению нет под руками 2003 Офиса чтоб проверить подробно...
Решаеться заменой разделителя на точку.
Start/Settings/Control Panel/Regional Options/Numbers/Decimal symbol

Или переходом на русскую локаль. Я так и сделал.

Думаю Офис 2003 тут не при чем, все дело в региональных настройках.
__________________
Via est vita!
Don Pedro вне форума  
 
Автор темы   Непрочитано 05.06.2004, 20:25
#62
Don Pedro

Designer
 
Регистрация: 21.05.2004
Кишинев
Сообщений: 24
<phrase 1=


Функция Dwrite:
Код:
[Выделить все]
Select objects: Specify opposite corner: 4 found
Select objects: 1 found, 5 total
Select objects: 1 found, 6 total
Select objects: 1 found, 7 total
Select objects:
Coincident with first point
Дальнейшие действия отменены....
Specify point on positive portion of X-axis <1.0000,0.0000,0.0000>:
Specify point on positive-Y portion of the UCS XY plane <0.0000,1.0000,0.0000>:
Видимо, из-за того что у меня не был сохранена ПСК вместе с деталью.
Реально ли сделать установку ПСК по наибольшему региону?
__________________
Via est vita!
Don Pedro вне форума  
 
Непрочитано 07.06.2004, 17:47
#63
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Видимо, из-за того что у меня не был сохранена ПСК вместе с деталью.
Угу.
Цитата:
Реально ли сделать установку ПСК по наибольшему региону?
В принципе - да, однако, это не дает 100% надежного определения.... Наброски у меня есть, попробую что нибудь придумать...

Надежно было бы ставить ПСК непосредственно по региону, однако, ACIS-объекты (3dsolid и region), как выражается АутоЛисп, "не имеет системы координат" Примерчик... Все работает для всех типов объектов если с комстроки набрать
Command: _.ucs _n _ob <указать объект>
А вот если то же самое на Лиспе
(command "_.ucs" "_n" "_ob" (car (entsel)))
для регионов не прокатывает, хотя простые примитивы (дуга, отрезок и т.п. хавает) Потому придется цепляться к какому то простому примитиву, полученному после второго взрыва. Вопрос - к какому? Наверно к тому у которого длина больше других... Если только он не "по диагонали".... Пока считаю что ручной выбор надежнее.

Еще фильтр добавил для поиска примитивов по имени. И диалог редактирования очеловечил немного.....
vk вне форума  
 
Непрочитано 07.06.2004, 17:56
#64
BOZ


 
Сообщений: n/a


Цитата:
Сообщение от vk
Чем привлекает Инвентор - так это асоциативность деталей. Стоит изменить один размер - и все что с ним связано тоже автоматом подстраивается, меняется.... Конечно если все зависимости сделаны правильно . Вплоть до размерного текста в чертеже детали!
В 3D-Constructor - аналогично, кроме размерного текста.
 
 
Непрочитано 08.06.2004, 15:41
#65
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Цитата:
Видимо, из-за того что у меня не был сохранена ПСК вместе с деталью.
Угу.
Гм... Скорее всего ошибался... Исправил.
vk вне форума  
 
Непрочитано 12.06.2004, 13:29
#66
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Добавил гиперссылки на DWG файлы во вторую колонку листа Excel только из команды DWRITE. Ну и еще кой чего по мелочи поправил.... Правда, на рабочем проекте пока не тестировал.
Адрес http://bazarov.net/~vkle/gabarit.zip (15 кб). Подробности в файле Readme.txt и конечно, комментарии по тексту программ. Вроде бы сделал почти все что хотел, правда не все так как хотелось бы .
По автоматическому определению ПСК пока нет идей, как сделать чтоб было надежно.
vk вне форума  
Ответ
Вернуться   Форум DWG.RU > Отраслевые разделы > Прочее. Отраслевые разделы > Данные для раскроя (Мебель, и не только)