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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > 3D Face

3D Face

Ответ
Поиск в этой теме
Непрочитано 25.02.2005, 12:09 #1
3D Face
Vasiliy
 
Строитель
 
Аксай, ЗКО
Регистрация: 21.12.2004
Сообщений: 4

Доброго время суток!!!

Может кто сталкивался. При конвертации в DWG формат из другой CAD системы. Прямоугольники (возможно что они так были заданы) отбражаются как 3D Face.
Вопрос:[/b]
Можно ли их преобразовать в обыкновенные прямоугольники без отрисовки?

З.Ы. Прямоугольников много. Причем это плоский чертеж сделан в разных плоскостях Z, но вершины каждого прямоугольника имеют одинаковую координату Z.
Просмотров: 3331
 
Непрочитано 25.02.2005, 12:27
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Можно попробовать примерно следующее:
1. Select All
2. Extrude, указать высоту
3. Explode всех
4. Снести ненужные куски (самый гиморный кусок)
5. Остаток - Explode
6. Pedit для всех с объединением (join)

Это если без программирования, быстро и незатейливо
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.02.2005, 13:28
#3
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Попробуй:
Код:
[Выделить все]
(defun demo (/ adoc coord frz lay lays lck new sel space)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        lays (vla-get-layers adoc)
        lay  (vla-get-activelayer adoc)
        sel  (vla-get-activeselectionset adoc)
  )
  (vla-clear sel)
  (pl:ent-obj-select sel "3DFACE")
  (vla-endundomark adoc)
  (vla-startundomark adoc)
  (if (= (vla-get-lock lay) :vlax-true)
    (progn (setq lck (cons lay lck)) (vla-put-lock lay :vlax-false))
  )
  (vlax-for i sel
    (setq lay   (vla-item lays (vla-get-layer i))
          space (vla-objectidtoobject adoc (vla-get-ownerid i))
          coord (apply
                  (function append)
                  (mapcar
                    (function (lambda (a) (list (car a) (cadr a))))
                    (pl:lst-to-lsts
                      (vlax-safearray->list (vlax-variant-value (vla-get-coordinates i)))
                      3
                    )
                  )
                )
    )
    (if (= (vla-get-freeze lay) :vlax-true)
      (progn (setq frz (cons lay frz)) (vla-put-freeze lay :vlax-false))
    )
    (if (= (vla-get-lock lay) :vlax-true)
      (progn (setq lck (cons lay lck)) (vla-put-lock lay :vlax-false))
    )
    (setq new (vla-addlightweightpolyline
                space
                (vlax-safearray-fill
                  (vlax-make-safearray vlax-vbdouble (cons 1 (length coord)))
                  coord
                )
              )
    )
    (vla-put-closed new :vlax-true)
    (vla-put-color new (vla-get-color i))
    (vla-put-layer new (vla-get-layer i))
    (vla-put-linetype new (vla-get-linetype i))
    (vla-put-linetypescale new (vla-get-linetypescale i))
    (vla-put-lineweight new (vla-get-lineweight i))
    (vla-put-plotstylename new (vla-get-plotstylename i))
    (vla-put-truecolor new (vla-get-truecolor i))
  )
  (vla-erase sel)
  (foreach l frz
    (if (vlax-write-enabled-p l)
      (vla-put-freeze l :vlax-true)
    )
  )
  (foreach l lck
    (if (vlax-write-enabled-p l)
      (vla-put-lock l :vlax-true)
    )
  )
  (vla-endundomark adoc)
  (princ)
)

(defun pl:ent-obj-select (sel enttype)
  (vla-select
    sel
    acselectionsetall
    nil
    nil
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))
  )
)

(defun pl:lst-to-lsts (lst modul / _pl:lst-to-lsts)
  (defun _pl:lst-to-lsts (slst i mod / tmp)
    (cond ((not slst) nil)
          ((zerop i) (cons (list (car slst)) (_pl:lst-to-lsts (cdr slst) mod mod)))
          (t
           (setq tmp (_pl:lst-to-lsts (cdr slst) (1- i) mod))
           (cons (cons (car slst) (car tmp)) (cdr tmp))
          )
    )
  )
  (_pl:lst-to-lsts lst (1- modul) (1- modul))
)
Вызов: (demo)

Это набросок - может быть неучтёнка.
Alaspher вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > 3D Face