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

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

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

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

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

Реально ли сделать лисп для этих целей? Уверен что многим он бы пригодился. А может уже есть что-то готовое?
[ATTACH]1085162980.gif[/ATTACH]
__________________
Via est vita!
Просмотров: 24665
 
Непрочитано 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-модели
с удобным назначением деталям названий. Возможна нумерация в
автоматическом режиме.

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

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

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

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

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



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

Если кого заинтересовало, пишите, договоримся. ([email protected])
 
 
Автор темы   Непрочитано 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 у меня номер и название детали - они при редактировании сохраняются.
 
Ответ
Вернуться   Форум DWG.RU > Отраслевые разделы > Прочее. Отраслевые разделы > Данные для раскроя (Мебель, и не только)

Размещение рекламы