PDA

Ver versión completa : Construir sólidos a partir de otras entidades



donjuanfe
15/12/2006, 18:34
Hola, me gustaría saber si alguien conoce la manera de convertir las envolventes de un cuerpo creado con 3dcaras o con otras superficies en un sólido. He tratado de hacerlo transformando las caras en regiones, en polilíneas cerradas... pero nada.
Muchas gracias de antemano
juanfe

Juanki
16/12/2006, 01:04
Eso en que programa es? autocad?

donjuanfe
16/12/2006, 11:56
Perdona Juanki, sí se trata de Autocad, tengo el problema de que no sé cómo convertir un cuerpo de cualquier forma que está definido por superficies (como un envoltorio) en un sólido.
Muchas gracias por tu interés.
juanfe

Juanki
16/12/2006, 19:36
Y estos planos o lineas estan en la misma capa y son el mismo objeto?

donjuanfe
16/12/2006, 20:40
Si Juanki, son de la misma capa y las superficies son independientes unas de otras, por ejemplo si tengo un cubo formado por 6 3dcaras, con lo que está hueco y no puedo hacer operaciones booleanas, y lo quisiera convertir en un cubo sólido, no sé como hacerlo. (el cubo es lo mas simple pero por ejemplo un terreno en 3d en el que quiero que la superficie se transforme en un sólido sería algo muy útil).
saludos.
juanfe

Juanki
16/12/2006, 21:43
A mi me suena que no se podian convertir caras en solidos, pero como hace mucho que no uso autocad no se si ahora añadieron esa opcion.

berobreo
16/12/2006, 21:47
No la añadieron, sino que de hecho la sacaron en el cambio de r12 a r13 al cambiar no sé que de la geometría de sólidos.
Tal vez puedas sacar algo de las tripas de este otro hilo:
http://www.soloarquitectura.com/foros/showthread.php?t=8886

donjuanfe
19/12/2006, 00:26
Gracias Berobreo, la rutina funciona muy bien pero sólo pasa de una malla a sólido, no de otras superficies a sólidos. Yo tenía un terreno hecho solevando las líneas de cotas y al ser una malla me permitió hacer un sólido con la rutina lisp M2S (mesh to solid). El único fallo es la cantidad de líneas que genera, aunque al renderizar no salen. ok muchas gracias y un saludo.
juanfe

agonz46
19/12/2006, 11:02
donjuanfe si te enteras de alguna aplicación para autocad que convierta mallas a sólidos y que sea gratuita dímelo plis.

donjuanfe
19/12/2006, 12:23
A mi si me convierte las mallas (mesh) a sólidos pero míra en la ayuda del autocad para entender lo de mallas abiertas y cerradas ( busca "Crear mallas" o "Create Meshes" si lo tienes en inglés). Una malla no es una superficie, ni una 3dcara, ni una región, ni una poliface... yo todavía estoy tratando de entender cómo va esto. En fin aquí te pongo la rutina para que lo intentes.
;; M2S (Mesh-to-Solid)
;; Creates an ACIS solid from an open 3d polygon mesh.
;;
;; Take 4 - Updated 5/15/2006
;; - Works with AutoCAD 2007 as well as all previous releases.
;; Thanks to Gilles Chanteau for R2007 suggestions and
;; international syntax fixes.
;; - Works with REVSURF'd meshes that touch or cross axis of revolution.
;; - Works even if solid being constructed is not fully visible on screen.
;; - Works with all open meshes created with REVSURF, RULESURF,
;; EDGESURF, TABSURF, AI_MESH, and 3DMESH. Most of the stock 3D
;; surfaces will work if you use DDMODIFY to open them in the M
;; and N directions.
;; - Does not work with polyface entities.
;; - _. prefix added to commands for compatibility with CSG editor and
;; international users
;;
;; (c) Copyright 1998,2006 by Bill Gilliss.
;; All rights reserved... such as they are.
;;
;; bill.gilliss@aya.yale.edu gilliss@iglou.com
;;
;; I wrote this to create sculptable ACIS terrain models
;; for architectural site renderings. It can also be used
;; to create thin shells from meshes, by subtracting a moved
;; copy of the solid from the original solid, but AutoCAD's native
;; Solids Editing > Shell now does a much better job of this.
;;
;; The solid is created by projecting each mesh facet "down"
;; the *current* z-axis to a plane a user-specified distance below
;; the lowest vertex. To assure that all parts of the mesh are
;; generated as solids, this distance can not be zero, but the
;; solid can be SLICEd later if need be.
;;
;; The solid will match the displayed mesh: if the mesh has
;; been smoothed and SPLFRAME is set to 0, the solid will be
;; smoothed. Otherwise, it will not be. The mesh itself is not
;; changed at all.
;;

(defun c:m2s (/ ent ename entlst M N MN SN SM ST smooth oldecho vtx d1
low vtxcnt vtxmax bot bottom p1 p2 p3 p4 c1 c2 c3 c4
b1 b2 b3 b4 soldepth ssall ssrow)
(setq oldecho (getvar "cmdecho"))
(setq oldsnap (getvar "osmode"))
(setq oldblip (getvar "blipmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setvar "blipmode" 0)
(if (< 16 (atoi (substr (getvar "acadver") 1 2))) (setq R17 T))
(if R17 (setq oldsolidhist (getvar "solidhist")))
(command "_.undo" "_begin")
;;select the mesh
(setq ent (entsel "Select a polygon mesh to solidify: "))
(setq ename (car ent))
(setq entlst (entget ename))
(if (not (= (cdr (assoc 0 entlst)) "POLYLINE"))
(progn
(alert "That is not a polygon mesh.")
(exit)
(princ)
);progn
);endif
(if
(not
(or
(= (cdr (assoc 70 entlst)) 16) ;open 3d polygon mesh
(= (cdr (assoc 70 entlst)) 20) ;open mesh w/ spline-fit vertices
);or
);not
(progn
(alert "That is not an *open* polygon mesh.")
(exit)
(princ)
);progn
);endif
;; decide whether to use smoothed or unsmoothed vertices
(setq M (cdr (assoc 71 entlst))) ;M vertices
(setq N (cdr (assoc 72 entlst))) ;N vertices
(setq SM (cdr (assoc 73 entlst))) ;smoothed M vertices
(setq SN (cdr (assoc 74 entlst))) ;smoothed N vertices
(setq ST (cdr (assoc 75 entlst))) ;surface type
(if
(or
(= (getvar "splframe") 1) ;use MxN vertices when splframe = 1
(= ST 0) ;or mesh has not been smoothed
)
(setq smooth 0
MN (* M N))
(setq smooth 1 ;use SMxSN vertices when mesh is smoothed
MN (* SM SN) ;and SPLFRAME = 0
M SM
N SN)
);if
;; determine lowest vertex
(grtext -2 "Examining the mesh...")
(setq vtx ename)
(setq vtx (entnext vtx))
(setq d1 (entget vtx))
(setq bottom (caddr (trans (cdr (assoc 10 d1)) 0 1)))

(repeat (1- MN) ;compare with each vertex's z coord
(setq vtx (entnext vtx))
(setq d1 (entget vtx))
(setq low (caddr (trans (cdr (assoc 10 d1)) 0 1)))
(setq bottom (min bottom low))
);repeat
;; get desired thickness of solid
(setq soldepth 0)
(while
(zerop soldepth)
(progn
(setq soldepth
(getdist "\nEnter desired thickness of solid below lowest vertex <1>: "))
(if (not soldepth) (setq soldepth 1.0))
(if (zerop soldepth)
(princ "\nThickness can be small, but not zero. (Slice it later, if need be.)"))
);progn
);while
(setq bot (- bottom (abs soldepth)))

(setq p1 ename)
(if (= smooth 1)
(setq p1 (entnext p1))) ;skip 1st vtx of smoothed mesh - not true vtx
(setq ssrow (ssadd)) ;initialize set of extruded segments to be unioned as a row
(setq ssall (ssadd)) ;initialize set of rows to be unioned into the whole
(grtext -2 "Creating row...")
(setq vtxmax (- MN N))
(setq vtxcnt 1)
;;create row of solid segments
(while (< vtxcnt vtxmax)
(if (= 0 (rem vtxcnt N)) ;at end of each row...
(progn
(setq rowmsg (strcat "Unioning row "
(itoa (/ vtxcnt N)) " of "
(itoa (1- M)) "... "))
(grtext -2 rowmsg)
(command "_.union" ssrow "")
(setq row (entlast))
(ssadd row ssall)
(setq ssrow (ssadd))
(setq p1 (entnext p1) ;skip to the next vertex
vtxcnt (1+ vtxcnt))
);progn
);if

(grtext -2 "Creating row...")
(setq p1 (entnext p1) ;first vertex of mesh square
p2 (entnext p1) ;second vertex
p3 p2)
(repeat (1- n) (setq p3 (entnext p3))) ;walk along to 3rd (p1 + N) vertex
(setq p4 (entnext p3)) ;4th vertex of mesh square
(setq c1 (trans (cdr (assoc 10 (entget p1))) 0 1) ;top coordinates
c2 (trans (cdr (assoc 10 (entget p2))) 0 1)
c3 (trans (cdr (assoc 10 (entget p3))) 0 1)
c4 (trans (cdr (assoc 10 (entget p4))) 0 1)
b1 (list (car c1) (cadr c1) bot) ;bottom coordinates
b2 (list (car c2) (cadr c2) bot)
b3 (list (car c3) (cadr c3) bot)
b4 (list (car c4) (cadr c4) bot))
(LOFT c1 c2 c3 b1 b2 b3)
(LOFT c2 c3 c4 b2 b3 b4)
(setq vtxcnt (1+ vtxcnt))
);while
(grtext -2 "Unioning last row...")
(command "_.union" ssrow "")
(setq row (entlast))
(ssadd row ssall)
(if (> M 2) ;bypass final union for N x 1 meshes (i.e., RULESURF)
(progn
(grtext -2 "Unioning all rows...")
(command "_.union" ssall "")
);progn
);if
;;cleanup
(command "_.undo" "_end")
(setvar "cmdecho" oldecho)
(setvar "osmode" oldsnap)
(setvar "blipmode" oldblip)
(if R17 (setvar "solidhist" oldsolidhist))
(setq ssall nil ssrow nil)
(princ)
);defun
;;============== SUBROUTINES ====================
(defun LOFT (r1 r2 r3 s1 s2 s3 / e1 extr highest)
(command "_.area" s1 s2 s3 "")
(if (not (equal (getvar "area") 0.0 0.00000001))
(progn
(command "_.pline" s1 s2 s3 "c")
(setq highest (max (caddr r1) (caddr r2) (caddr r3)))
(setq extr (- highest bot))
(if
R17
(command "_.extrude" (entlast) "" extr) ;;2007 and higher
(command "_.extrude" (entlast) "" extr 0.0) ;;2006 and below
);endif
(command "_.slice" (entlast) "" "_3points" r1 r2 r3 s1)
(setq e1 (entlast))
(ssadd e1 ssrow)
);progn
);if
);defun
(princ "Mesh-to-Solid 2007 loaded. Type M2S to run the program.")

agonz46
19/12/2006, 20:31
Gracias donjuanfe probaré a ver que tal funciona, creo que esta ya la tenía pero no entendía muy bien como funcionaba, bueno.. más bien no entiendo:confused:

Condiciones de uso | Publicidad | Acerca de | FacebookUnirse a Sólo Arquitectura en Facebook | TwitterSeguir a @SArquitectura en Twitter

Prohibida la reproducción total o parcial sin la autorización previa y por escrito del editor.