[v8i MDL] How can I export the DGN default model to an image file without open the DGN?

Hi,

I'm programming with pure MDL (it's a huge application not migrated yet to C++) over MicroStation and Bentley Map SS4.

I need to create programmatically an image file (JPEG, BMP or similar) from the default model of a DGN, but without open the DGN with mdlSystem_newDesignFile.

I know how to to do it when the DGN is open (capturing the screen, printing to JPEG plot driver, etc), but now I need to do ii in that way.

It doesn't matter if the file image is small in size or the quality is not optimal, because I need the image to embed it in a sheet model for plotting.

I've tried the following (via thumbnail) and I can get the JPEG file, but the contents of this file is incorrect (see image below).

 

                   int estat;
                    char fileName[MAXFILELENGTH], fJpg[MAXFILELENGTH];
                    byte *imageBufferP=NULL;
                    int imageSize;
                    byte redPalette[256], grnPalette[256], bluPalette[256];
                    int paletteSize, colorMode;
                    Point2d size;

                    strcpy (fileName, "C:\\dgn\\MapIndex.dgn");
                    strcpy (fJpg, "C:\\dgn\\MapIndex.jpg");
 
                    // Open the thumbnail of the selected dgn.
                    estat = mdlSystem_openFileThumbnail (NULL, NULL, NULL, NULL, fileName, &imageBufferP, &imageSize);

                    if (estat == SUCCESS)

                    {
                      //
                      mdlImage_getExportSupport (&colorMode, NULL, NULL, NULL, NULL, NULL, IMAGEFILE_JPEG);

                      mdlImage_getScreenPalette (redPalette, grnPalette, bluPalette, &paletteSize, statedata.current.screenNumber);

                      size.x = 300;
                      size.y = 300;

                      mdlImage_createFileFromBuffer (fJpg, IMAGEFILE_JPEG, colorMode, &size, imageBufferP, IMAGEFORMAT_BitMap, NULL, NULL, NULL, paletteSize, 0, NULL);
 
                     // Clear buffer.
                     if (imageBufferP)
                     {
                        mdlSystem_freeFileThumbnail (&imageBufferP);
                     }

                  }

 

Please, any hint to solve this question?

Thanks a lot for your help.

Toni

Parents
  • Hi Hola,

    You can try the following code, and I hope it will help you.

    using BMI = Bentley.MicroStation.InteropServices;
    using BIMDgn = Bentley.Interop.MicroStationDGN;

    BIMDgn.Application app = BMI.Utilities.ComApp;
    BIMDgn.Point3d Origin = default(BIMDgn.Point3d);
    Origin.X = (Origin.Y = (Origin.Z = 0.0));
    BIMDgn.Point3d Scale = default(BIMDgn.Point3d);
    Scale.X = (Scale.Y = (Scale.Z = 1.0));
    app.AttachCellLibrary(cellLibraryPath,  BIMDgn.MsdConversionMode.Prompt); // cellLibraryPath is DGN FileName

    Matrix3d matrix3d = app.Matrix3dIdentity(); // you can change  matrix3d to change image display
    BIMDgn.CellElement cellElement = app.CreateCellElement2(cellName, ref Origin, ref Scale, false, ref matrix3d); // cellName is Default Model Name
    if (cellElement != null)
    {
    cellElement.DrawToFile("C:\\image.jpg", 100, 100, false);
    }

Reply
  • Hi Hola,

    You can try the following code, and I hope it will help you.

    using BMI = Bentley.MicroStation.InteropServices;
    using BIMDgn = Bentley.Interop.MicroStationDGN;

    BIMDgn.Application app = BMI.Utilities.ComApp;
    BIMDgn.Point3d Origin = default(BIMDgn.Point3d);
    Origin.X = (Origin.Y = (Origin.Z = 0.0));
    BIMDgn.Point3d Scale = default(BIMDgn.Point3d);
    Scale.X = (Scale.Y = (Scale.Z = 1.0));
    app.AttachCellLibrary(cellLibraryPath,  BIMDgn.MsdConversionMode.Prompt); // cellLibraryPath is DGN FileName

    Matrix3d matrix3d = app.Matrix3dIdentity(); // you can change  matrix3d to change image display
    BIMDgn.CellElement cellElement = app.CreateCellElement2(cellName, ref Origin, ref Scale, false, ref matrix3d); // cellName is Default Model Name
    if (cellElement != null)
    {
    cellElement.DrawToFile("C:\\image.jpg", 100, 100, false);
    }

Children
No Data