Imagen dentro del fichero dxf

Oct 23, 2014 at 6:21 AM
Buenas!

En primer lugar, felicitarte por el trabajo realizado.

Estoy probando tu librería para intentar exportar un mapa a dxf. Este mapa contiene simbología que estoy intentando introducir como imagen, he conseguido insertarlo en el model, pero he visto que se necesita se incluye la ruta completa para que se visualice, el problema que tengo si las imágenes no están físicamente en el ordenador estas no se verán en el dxf. He probado a asociarlas mediante http y funciona también. ¿Se podrán incluir en el fichero en bytes y que no haga falta incluir ningún tipo de Path?

Muchas Gracias!
Coordinator
Oct 23, 2014 at 5:40 PM
Con las entidades Image no es posible incrustar un mapa de bits en un archivo dxf, supongo que mediante objetos OLE debería ser posible pero en estos momentos no están disponibles en la librería.

Daniel
Oct 24, 2014 at 12:54 PM
Hola Daniel,

Gracias por tu respuesta.

He realizado la exportación a dxf y el resultado no fue de mi agrado, la imagen del símbolo salía bastante distorsionada... :( Asi que me lo he planteado de otra manera. lo que he hecho es vectorizar cada simbolo y generarlo como DXF (De esta manera ya tengo "traducida" la imagen a DXF) Ahora solo falta integrarla dentro del DXF final, te pongo un ejemplo:
DxfDocument dxf = new DxfDocument();

            foreach (LayerDefinition geo in listLayerDefinition)
            {
                switch (geo.GeometryType)
                {
                    case "POLYGON":
                    case "MULTIPOLYGON":
                        dxf.AddEntity(DrawLwPolyLine(geo));
                        break;
                    case "POINT":
                        //dxf.AddEntity(DrawImage(geo));
                        dxf.AddEntity(DrawSymbol(geo));
                        //dxf.AddEntity(DrawCircle(geo));
                        break;
                    case "LINESTRING":
                        dxf.AddEntity(DrawLineString(geo));
                        break;
                    default: Response.Write("Tipo desconocido");
                        break; 
                }
            }
            dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2004;
            dxf.Save("c:/Mapa.dxf",false);
Esta sería la manera que voy incluyendo cada entidad dentro del dxf final. Como ves hay una que es drawSymbol, en ella intento cargar el símbolo e incluir la entidad insert.
            string path = Server.MapPath(@"..\simbolos");
            FileInfo fileInfo = new FileInfo(path + @"\SEDS_BSESN.dxf");
            if (fileInfo.Exists)
            {
                DxfDocument dxfSymbol = DxfDocument.Load(fileInfo.FullName);

                if (dxfSymbol != null)
                 {
                     List<CoordenadasXY> listCoordenadas = ArrayPoints(feature.GeometryWkt);

                     Block nestedBlock = new Block("Nested block");

                     foreach (Line line in dxfSymbol.Lines)
                     {
                        nestedBlock.Entities.Add(line);
                     }


                     Insert nestedInsert = new Insert(nestedBlock, new Vector3(listCoordenadas[0].X, listCoordenadas[0].Y, 0));

                    return nestedInsert; 
                 }
            }
En este caso cuando "nestedBlock.Entities.Add(line);" no me agrega nada...

Gracias por adelantado.
Coordinator
Oct 24, 2014 at 7:07 PM
Necesitas realizar una copia de la línea antes de añadirla a la lista de entidades del bloque con:
nestedBlock.Entities.Add((EntityObject)line.Clone())
Para evitar problemas siempre es recomendable realizar copias de los objetos que se pasan de un documento a otro.

Pero si lo que pretendes es crear un bloque con el contenido de un dxf puedes simplemente utilizar el método de la clase Block;
public static Block Load(string file, string name = null)
Daniel
Marked as answer by aldelafu on 10/28/2014 at 2:07 AM
Oct 28, 2014 at 9:06 AM
Me ha funcionado correctamente.

Muchas Gracias Daniel!