XML to LDR


XML to LDR
#1
Hi at all,

Does anyone know if it possible to convert a XML file generated by pictobrick to a LDR file ?
pictobrick's XML shows the bricks (plates) in any row as a sequence of parts, row for row.
Such a conversion must be easy but browsing around for hours I couldn't finding such a tool.

Thanks for any help,

Arthur Sigg
-----
I know I am part of a story that starts long before I can remember and continues long beyond when anyone will remember me [Long Now: Danny Hillis, Desinger of the 10'000 Year Clock]
Reply
Re: XML to LDR
#2
Hi Arthur,

I'm not aware of any such thing. I guess any tool would have to come with standardised configuration files too.

Tim
Reply
Re: XML to LDR
#3
Hey Arthur,

yes, generally it is possible. I wrote a small test application that converts a XML file generated by pictobrick ("LEGO side view") into a LDraw File. But currently the application is not in a shareable state.

Rolf
Reply
Re: XML to LDR
#4
I did not yet installed that application. So I went to the homepage and found the following screenshot:[Image: screenshot_29.jpg]

So there seems to be no information about part number and also the colors are different from ours. If we have a table to match those entries to our numbers it should be possible to quickly code such a tool.

Edit:
Ok, now I have downloaded that application and did a quick test. The output for our parts are better Smile.
Sample:
Code:
<unit>
    <element>
        Plate_1x1_(3024)
    </element>
    <color>
        01_White
    </color>
</unit>
<unit>
    <element>
        Plate_1x1_(3024)
    </element>
    <color>
        99_Very_Light_Bluish_Gray
    </color>
</unit>
So the part information is given (3024.dat). But from where are the color numbers?
Also I need to figure out where to place the parts, as no information is given about that.
Reply
Re: XML to LDR
#5
Hey Michael,

all predefined colors can be found in the source files, which are free available:
DataManagement.java Wrote:legoTop.setColor("11_Black",0,0,0);
legoTop.setColor("85_Dark_Bluish_Gray",73,88,101);
legoTop.setColor("86_Light_Bluish_Gray",161,171,178);
legoTop.setColor("99_Very_Light_Bluish_Gray",198,205,209);
legoTop.setColor("01_White",255,255,255);
legoTop.setColor("03_Yellow",255,214,0);
legoTop.setColor("33_Light_Yellow",255,233,143);
legoTop.setColor("69_Dark_Tan",144,144,105);
legoTop.setColor("02_Tan",214,191,145);
legoTop.setColor("88_Reddish_Brown",104,46,47);
legoTop.setColor("04_Orange",244,123,32);
legoTop.setColor("31_Medium_Orange",248,155,28);
legoTop.setColor("59_Dark_Red",247,4,55);
legoTop.setColor("05_Red",238,46,36);
legoTop.setColor("25_Salmon",246,150,124);
legoTop.setColor("26_Light_Salmon",250,188,174);
legoTop.setColor("47_Dark_Pink",205,127,181);
legoTop.setColor("23_Pink",247,179,204);
legoTop.setColor("89_Dark_Purple",70,42,135);
legoTop.setColor("24_Purple",127,63,152);
legoTop.setColor("93_Light_Purple",142,49,146);
legoTop.setColor("71_Magenta",171,29,137);
legoTop.setColor("63_Dark_Blue",0,54,96);
legoTop.setColor("07_Blue",0,87,164);
legoTop.setColor("42_Medium_Blue",94,174,224);
legoTop.setColor("62_Light_Blue",193,224,244);
legoTop.setColor("39_Dark_Turquoise",0,146,121);
legoTop.setColor("40_Light_Turquoise",0,179,176);
legoTop.setColor("41_Aqua",162,218,222);
legoTop.setColor("80_Dark_Green",0,65,37);
legoTop.setColor("06_Green",0,148,74);
legoTop.setColor("37_Medium_Green",151,211,184);
legoTop.setColor("38_Light_Green",186,225,209);
legoTop.setColor("34_Lime",181,206,47);
legoTop.setColor("76_Medium_Lime",193,216,55);
legoTop.setColor("35_Light_Lime",197,225,170);
But you can define colors yourself!

The xml-file contains the data "row by row top down and from the left to the right". The xml-file represents one huge matrix. If you only use LEGO plates 1x1 each entry (tag) in the matrix (the xml-file) would be filled. If you use bigger parts, only the upper left most matrix entry for each part is filled. All overlayed matrix entries will appear as an empty tag.

Here is a pseudo code to convert the xml-file to LDraw:
Code:
read xmlFile
foreach row in xmlFile
    x = 0 // each row starts at the left
    foreach unit in row
        if unit is not empty
            color = translateColor
            part = translateElement
            offest = calculateOffset(part) // the origin of the ldraw parts is not the upper left most stud
            write ldrFile "1 color x+offset y 0 1 0 0 0 1 0 0 0 1 part.dat"
        x += 20 // for each horizontal entry (unit) in the matrix, we have to shift right
    y += 8 // for each vertical entry (row) in the matrix, we have to go down

You would have to translate the given color and the given element. For this you can implement some kind of dictionary. But also parts can be defined by yourself! This means: if you work with the predefined colors and elements a conversion is possible. But once there is a userdefined element, an "always working" conversion would become impossible.

Currently I have not detected any difference between the xml-files for "LEGO in top view" and "LEGO in side view". Only some entries might give a hint (e.g. LEGO plate 4x4 would not appear in side view).

Rolf
Reply
Re: XML to LDR
#6
"Top View" and "Side View" needs at least another value in the following line:
Code:
y += 8 // for each vertical entry (row) in the matrix, we have to go down
Thank you for the moment for the detailed information. I am sure I will have some more questions when I have some code already Smile.

Edit:
Hmmm. I can not see any information in the xml file from that I can decide top-view or side-view. As long as only base elements are used (1 x 1) it only will distort the picture in the height.
It is getting more complicated than on the first view I would expect.
Reply
Re: XML to LDR
#7
The information about the actual selected view (and other informations) can be found in: configuration.html
As an alternative to the XML file pictoprick also generates a TEXT file: buildingsinstructions.html
All to find in the working directory folder under "data" if related outputdata has been selected in pictobrick

Perhaps it helps a little bit ...
-----
I know I am part of a story that starts long before I can remember and continues long beyond when anyone will remember me [Long Now: Danny Hillis, Desinger of the 10'000 Year Clock]
Reply
Re: XML to LDR
#8
Hey Arthur,

the mentioned test application has grown to a small console application. It is implemented in .Net 3.5 C# and compiled for windows. You can download it at www.digital-bricks.de/download/PicToBrick2LDraw.zip.

This application is not very intelligent. If you use it you will have to define whether your mosaic.xml file contains data for “LEGO in top view” or “LEGO in side view”. And it knows only the predefined colors and parts.

Usage:
Code:
PicToBrick2LDraw.exe inputFile [-top|-side]
-top : The content of the inputFile is 'LEGO in top view'.
-side : The content of the inputFile is 'LEGO in side view'. This is default.

For example:
Code:
PicToBrick2LDraw.exe Y:\gimli_002\data\mosaic.xml –top
You would get a file Y:\gimli_002\data\<projectName>.ldr

I hope this works for you.

Rolf
Reply
Re: XML to LDR
#9
Hi Rolf,

Great, it works fine ! Thank you very much !
It's so easy now to modify the pattern and colors :-)

Best regards,
Arthur
-----
I know I am part of a story that starts long before I can remember and continues long beyond when anyone will remember me [Long Now: Danny Hillis, Desinger of the 10'000 Year Clock]
Reply
Re: XML to LDR
#10
Hey Arthur,

since the PicToBrick application works with color quantization, the results should become better the more colors you define. But the colors that are predefined in PicToBrick are no LDraw colors. So, recoloring might still result in a distorted image. You would get the best LDraw results, if you use a PicToBrick configuration that includes all known LDraw colors.

I created such a configutation file: PicToBrick_LDraw_Top_View.cfg. Just copy it in your PicToBrick working directory. It contains all the solid colors from the LDConfig.ldr (UPDATE 2012-09-13).

With a new version of the converter you can migrate the new mosaics, too.

Rolf
Reply
Re: XML to LDR
#11
Hey, thanks for working on that Smile

As far as I have seen PickToBrick is Open Source, so we could adopt it to use by standard the LDraw colors.

But as it is not coded in the language I understand a little I am out of the race at this point.
Reply
Re: XML to LDR
#12
Hey Michael,

yes, you are right. That is almost what I did. I downloaded the source, implemented a new contigunration and saved it as a derived user configuration (that one that I shared). I think it would also be possible to add a new "output document" (as LDraw file) to the application.

The biggest problem would be the orientation of the parts in "Top View". And the usability for the inexperienced user. Currently he can define what he likes (e.g. colors, shapes). If the result should become a working LDraw file, he has to play by the LDraw rules.

Rolf
Reply
Re: XML to LDR
#13
Again, I thank you Rolf for the "extended help" ! I will use the new converter and CFG asap.

Please let me place a suggestion (command line options) for "side view" mosaics (plates stacked):
- it would be nice to have a "Step" command at the end of each row of plates
- due to the usual "BottomUp" building process reverse order of the rows of plates would be helpful too

Arthur
-----
I know I am part of a story that starts long before I can remember and continues long beyond when anyone will remember me [Long Now: Danny Hillis, Desinger of the 10'000 Year Clock]
Reply
Re: XML to LDR
#14
Hey Arthur,

Arthur Sigg Wrote:Please let me place a suggestion (command line options) for "side view" mosaics (plates stacked):
- it would be nice to have a "Step" command at the end of each row of plates
- due to the usual "BottomUp" building process reverse order of the rows of plates would be helpful too

both of your suggestions have been included in the program (without command line option). I also created the "side view" configuration file with the solid ldraw colors: PicToBrick_LDraw_Side_View.cfg.

You can download the new version of the converter here, again.

Rolf
Reply
Re: XML to LDR
#15
I agree with you.
Reply
RE: XML to LDR
#16
Hi,

Resurrecting this thread with one side question not quite related to what have been discussed here...

As far as I've seen from here, the RGB values for PicToBrick predefined colors, are nothing like what I would expect them to be (Not LEGO RGB neither LDraw RGB values).
This makes me thinking about two questions, which I hope you can help me with.

- Where these RGB values came from?
- Which RGB values to use for newer LEGO colors which are not included in PicToBrick predefined colors, so that they are coherent with the RGB values for these? 



Thanks,
Fernando
Reply
« Next Oldest | Next Newest »



Forum Jump:


Users browsing this thread: 8 Guest(s)