Newsgroup: it.comp.software.cad
Titolo: Mesh poliedrica in mesh poligonale

Ciao a tutti/e,
Ho creato un terreno, da curve di livello, tramite la plugin di 3DStudio
Viz, ho compresso lo stack dei modificatori per renderlo mesh modificabile,
e infine l'ho esportato in AutoCAD.
In AutoCAD (più di 29000 vertici) viene visto, naturalmente, come mesh
poliedrica. Volevo trasformare la mesh in solido con la routine in Lisp
Mesh2solid, ma vuole una mesh poligonale.
Qualcuno ha una routine, o sa dove trovarla, per convertire una mesh da
poliedrica a poligonale (o che faccia lo stesso lavoro di Mesh2solid, però
con mesh poliedriche)?
Grazie sin da ora!
pMB
www.proghettolab.it

con mesh poliedriche)?
Tempo addietro modificai la routine per farla funzionare con le
3Dface, per cui se riesci ad ottenere le 3Dface, puoi utilizzare
quella.
Saluti, Aniello
-- 
Aniello Annunziata
Content Director Manager
www.cadlandia.com
aniello.a...@cadlandia.com
Per rispondermi in privato, togli NOGARBAGE dall'indirizzo

 quella.
Io ho una mesh poliedrica di 29.965 vertici. L'ho esplosa ed ho ottenuto
59.781 facce 3d.
Non ho ancora dimestichezza col lisp, quindi ti chiedo gentilmente
d'inviarmi la routine che hai modificato.
Secondo, come ho detto prima ho 59.781 facce 3d. Con la tua routine posso
selezionarle tutte in un colpo? (altrimenti non mi passa piů!)
Grazie!
pMB
www.proghettolab.it

d'inviarmi la routine che hai modificato.
;
----------------------------------------------------------------------
;                   (Converte 3D Face in 3D Solidi)
;            Copyright (C) 2002 CADLandia, Tutti i diritti riservati
;                      Website: 
www.cadlandia.com
;
----------------------------------------------------------------------
; DISCLAIMER:  CADLandia non si assume nessuna responsabilità sui
danni
; possibili dall'utilizzo proprio od improprio di questa routine.
; CADLandia non da nessuna garanzia, ne implicita ne esplicita, dello
; utilizzo di questa routine in scopi particolari. Tutto il materiale
; è da considerare "così com'è", e l'uso di questo software è da
; considerare a PROPRIO PERSONALE RISCHIO.
;
----------------------------------------------------------------------
(defun c:3dfto3ds ()
  (setq cmdecho (getvar "CMDECHO"))
  (setq oldosnap (getvar "OSMODE"))
  ; salva le impostazioni vecchie
  (setvar "CMDECHO" 0)
  (setvar "OSMODE" 0)
  ; disabilita l'eco dei comandi e l'OSNAP
  (command "_UNDO" "_G")
  ; imposta un punto di undo, per fare l'undo di tutto il macrocomando
  (setq sset (ssget '((0 . "3DFACE"))))
  ; inizializzo una variabile che conterrà un selectionset con tutto
il solido
  ; e che mis ervirà alla fine
  (setq ssrow (ssadd))
  ; ottiene le 3dmesh da processare
  (setq bottom (getint "Quota della base del prisma: "))
  ; ottiene la quota base del prisma
  (if sset
    ; se il set di selezione non è vuoto
    (progn
      ; fai quanto segue
      (setq itm 0 num (sslength sset))
      ; impopsta itm a 0 e num al numero di elementi del set di
selezione
      (while (< itm num)
	; fino a quando il contatore è minore di num
        (setq hnd (ssname sset itm))
	; leggi l'entità
        (setq ent (entget hnd))
	; leggi i dati dell'entità
        (setq pt1 (cdr (assoc 10 ent)))
	; trova il primo punto della mesh
        (setq pt2 (cdr (assoc 11 ent)))
	;trova il secondo punto della mesh
        (setq pt3 (cdr (assoc 12 ent)))
	;trova il terzo punto della mesh
	(setq pt1b (list (car pt1) (cadr pt1) bottom))
	(setq pt2b (list (car pt2) (cadr pt2) bottom))
	(setq pt3b (list (car pt3) (cadr pt3) bottom))
	; trova i punti sulla base del prisma
        (entdel hnd)
	; cancella la 3dface
        (command "_.area" pt1b pt2b pt3b "")
	; controlla se almeno due punti sono coincidenti
	; nel qual caso non fa l'estrusione
	(if (not (equal (getvar "area") 0.0 0.00000001))
	  (progn
	    (command "_.pline" pt1b pt2b pt3b "_c")
	    ; disegna una polilinea (top)
	    (setq highest (max (caddr pt1) (caddr pt2) (caddr pt3)))
	    ; trova il vertice più alto della polilinea top
	    (setq extr (+ (- highest bottom) 1))
	    ; trova l'altezza d'estrusione
	    (command "_.extrude" (entlast) "" extr 0.0)
	    ; opera l'estrusione
	    (command "_.slice" (entlast) "" "_3points" pt1 pt2 pt3
pt1b)
	    ; taglia l'elementino per ottenere il cap giusto
	    (setq e1 (entlast))
	    ; seleziona l'ultima entità ottenuta
	    (ssadd e1 ssrow)
	    ; la aggiunge ad un set di selezione
	    );progn
	  );if
	; crea il prisma tra la faccia ed il piano xy desiderato
        (setq itm (1+ itm))
	; incrementa il contatore
      ); fine while
      (command "_UNION" ssrow "")
      ; unisce i solidi
      (princ "Fatto.")
    ); fine if
  )
  (setq sset nil)
  ; cancella il set di selezione
  (command "_UNDO" "_E")
  ; segna il marcatore di fine undo
  (setvar "CMDECHO" cmdecho)
  (setvar "OSMODE" oldosnap)
  ; ripristina l'eco dei comandi e l'osnap
  (princ)
)
(princ "Caricato 3DFTO3DS.LSP. Digitare 3DFTO3DS per eseguire il
comando.")
(princ)
