LDraw.org Discussion Forums
Generate MPD with all dependency parts - Printable Version

+- LDraw.org Discussion Forums (https://forums.ldraw.org)
+-- Forum: LDraw Programs (https://forums.ldraw.org/forum-7.html)
+--- Forum: LDraw Editors and Viewers (https://forums.ldraw.org/forum-11.html)
+--- Thread: Generate MPD with all dependency parts (/thread-24340.html)



Generate MPD with all dependency parts - Bernhard - 2020-12-20

Hi guys,

I'm totally new and very fascinated by ldraw. Smile Smile
I'm a software engineer and would like to view custom created models using this software: https://github.com/EvanBacon/Lego-Expo
Here is an online demo of the viewer: https://ldr.netlify.app/
The tools read MPD files. Example files can be found here: https://github.com/EvanBacon/Lego-Expo/tree/master/assets/ldraw/officialLibrary/models

My understanding is that the files have to contain the declaration of all parts used in the model. No external references are allowed.

As a test, I would like to use a simple baseplate and view it using Lego-Expo. I found this baseplate: https://www.ldraw.org/parts/official-part-lookup.html?folder=parts&partid=4186

Is there a way to generate an MPD file with all the referenced parts based on a DAT-file (like the parts/4186.dat) ?

I couldn't found such a tool.  Undecided
Thanks for your help!

Cheers,
Bernhard


RE: Generate MPD with all dependency parts - Philippe Hurbain - 2020-12-20

Hi Bernhard,
First welcome here!
Not a simple problem... and what doesn't help either is that the demo viewer https://ldr.netlify.app/ doesn't seem to work fine. Apart from preloaded X-wing, all files I tried (including the MPDs from github folder) stay stuck loading at 0%! Forget that, I goofed when retrieving files, it works . Still searching a method!


RE: Generate MPD with all dependency parts - Bernhard - 2020-12-20

(2020-12-20, 16:56)Philippe Hurbain Wrote: Hi Bernhard,
First welcome here!
Not a simple problem... and what doesn't help either is that the demo viewer https://ldr.netlify.app/ doesn't seem to work fine. Apart from preloaded X-wing, all files I tried (including the MPDs from github folder) stay stuck loading at 0%! Forget that, I goofed when retrieving files, it works . Still searching a method!

Hi Philippe,

I wrote now following python script (main.py).
Code:
import re
import sys
import os.path
from pathlib import Path
import requests
class DatFile:

    def __init__(self, name):
        self.name = name
        self.cacheDirectory = 'files'
        Path(self.cacheDirectory).mkdir(parents=True, exist_ok=True)

    def getDependencies(self):
        dependencies = {}
        content = self.getContent()
        matches = re.finditer(r"([^ ]*\.dat$)", content, re.MULTILINE)
        for matchNum, match in enumerate(matches, start=1):
            for groupNum in range(0, len(match.groups())):
                dependency = match.group(groupNum)
                if dependency not in dependencies:
                    dependencies[dependency] = DatFile(dependency)

        return dependencies

    def getName(self):
        return self.name

    def getContent(self):
        if not self.isCached():
            self.writeToDisc(self.downloadFile())
        return self.readFromDisc()

    def getContentAsRoot(self):
        content = self.getContent()
        return content.replace("0 !LDRAW_ORG Part", "0 !LDRAW_ORG Configuration")

    def isCached(self):
        return os.path.isfile(self.getCacheFileName())

    def getCacheFileName(self):
        return f"{self.cacheDirectory}/{self.name}"

    def readFromDisc(self):
        with open(self.getCacheFileName(), 'r') as file:
            content = file.read()
        return content

    def writeToDisc(self, content):
        with open(self.getCacheFileName(), 'w', encoding='utf-8', newline='') as file:
            file.write(content)
            file.flush()

    def downloadFile(self):
        urls= [ f"https://www.ldraw.org/library/official/p/{self.name}", f"https://www.ldraw.org/library/official/parts/{self.name}" ]
        for url in urls:
            req = requests.get(url)
            if req.status_code == 200:
                return req.text
        raise Exception(f"File not Found: {self.name}")

def startParsing(name, headefile):
    rootFile = DatFile(name)

    print(rootFile.getContentAsRoot())
    print(readHeaderFile(headefile))
    print("0")
    print("")
    visitDependencies({}, DatFile(name))

def readHeaderFile(headerfile):
    with open(headerfile, 'r') as file:
        content = file.read()
    return content

def visitDependencies(visitedFiles, datFile):
    filename = datFile.getName()
    dependencies = datFile.getDependencies()
    visitedFiles[filename] = True

    for dependencyFilename in dependencies:
        if not dependencyFilename in visitedFiles:
            dependencyFile = dependencies[dependencyFilename]

            print(f"0 FILE {dependencyFilename}")
            print(dependencyFile.getContent())
            print("0")
            print("")

            visitDependencies(visitedFiles, dependencyFile)


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    filename = sys.argv[1]
    headerfile = sys.argv[2]
    startParsing(filename, headerfile)

Under Windows, I use it (createMPD.bat):
Code:
@echo off
set PYTHON_HOME=D:\media\infrastruktur\apps\python
set FILE=%1
%PYTHON_HOME%\python main.py %FILE% header.mpd > %FILE%.mpd

The header.mpd contains the COLOUR definitions, like (header.mpd):
Code:
0 // LDraw Solid Colours
0                              // LEGOID  26 - Black
0 !COLOUR Black                                                 CODE   0   VALUE #05131D   EDGE #595959
0                              // LEGOID  23 - Bright Blue
0 !COLOUR Blue                                                  CODE   1   VALUE #0055BF   EDGE #333333
0                              // LEGOID  28 - Dark Green
0 !COLOUR Green                                                 CODE   2   VALUE #257A3E   EDGE #333333
0                              // LEGOID 107 - Bright Bluish Green
0 !COLOUR Dark_Turquoise                                        CODE   3   VALUE #00838F   EDGE #333333
0                              // LEGOID  21 - Bright Red
0 !COLOUR Red                                                   CODE   4   VALUE #C91A09   EDGE #333333
0                              // LEGOID 221 - Bright Purple
0 !COLOUR Dark_Pink                                             CODE   5   VALUE #C870A0   EDGE #333333
0                              // LEGOID 217 - Brown
0 !COLOUR Brown                                                 CODE   6   VALUE #583927   EDGE #1E1E1E
0                              // LEGOID   2 - Grey
0 !COLOUR Light_Grey                                            CODE   7   VALUE #9BA19D   EDGE #333333
0                              // LEGOID  27 - Dark Grey
0 !COLOUR Dark_Grey                                             CODE   8   VALUE #6D6E5C   EDGE #333333
0                              // LEGOID  45 - Light Blue
0 !COLOUR Light_Blue                                            CODE   9   VALUE #B4D2E3   EDGE #333333
0                              // LEGOID  37 - Bright Green
0 !COLOUR Bright_Green                                          CODE  10   VALUE #4B9F4A   EDGE #333333
0                              // LEGOID 116 - Medium Bluish Green
0 !COLOUR Light_Turquoise                                       CODE  11   VALUE #55A5AF   EDGE #333333
0                              // LEGOID   4 - Brick Red
0 !COLOUR Salmon                                                CODE  12   VALUE #F2705E   EDGE #333333
0                              // LEGOID   9 - Light Reddish Violet
0 !COLOUR Pink                                                  CODE  13   VALUE #FC97AC   EDGE #333333
0                              // LEGOID  24 - Bright Yellow
0 !COLOUR Yellow                                                CODE  14   VALUE #F2CD37   EDGE #333333
0                              // LEGOID   1 - White
0 !COLOUR White                                                 CODE  15   VALUE #FFFFFF   EDGE #333333
0                              // LEGOID   6 - Light Green
0 !COLOUR Light_Green                                           CODE  17   VALUE #C2DAB8   EDGE #333333
0                              // LEGOID   3 - Light Yellow
0 !COLOUR Light_Yellow                                          CODE  18   VALUE #FBE696   EDGE #333333
0                              // LEGOID   5 - Brick Yellow
0 !COLOUR Tan                                                   CODE  19   VALUE #E4CD9E   EDGE #333333
0                              // LEGOID  39 - Light Bluish Violet
0 !COLOUR Light_Violet                                          CODE  20   VALUE #C9CAE2   EDGE #333333
0                              // LEGOID 104 - Bright Violet
0 !COLOUR Purple                                                CODE  22   VALUE #81007B   EDGE #333333
0                              // LEGOID 196 - Dark Royal Blue
0 !COLOUR Dark_Blue_Violet                                      CODE  23   VALUE #2032B0   EDGE #1E1E1E
0                              // LEGOID 106 - Bright Orange
0 !COLOUR Orange                                                CODE  25   VALUE #FE8A18   EDGE #333333
0                              // LEGOID 124 - Bright Reddish Violet
0 !COLOUR Magenta                                               CODE  26   VALUE #923978   EDGE #333333
0                              // LEGOID 119 - Bright Yellowish Green
0 !COLOUR Lime                                                  CODE  27   VALUE #BBE90B   EDGE #333333
0                              // LEGOID 138 - Sand Yellow
0 !COLOUR Dark_Tan                                              CODE  28   VALUE #958A73   EDGE #333333
0                              // LEGOID 222 - Light Purple
0 !COLOUR Bright_Pink                                           CODE  29   VALUE #E4ADC8   EDGE #333333
0                              // LEGOID 324 - Medium Lavender
0 !COLOUR Medium_Lavender                                       CODE  30   VALUE #AC78BA   EDGE #333333
0                              // LEGOID 325 - Lavender
0 !COLOUR Lavender                                              CODE  31   VALUE #E1D5ED   EDGE #333333
0                              // LEGOID  36 - Light Yellowish Orange
0 !COLOUR Very_Light_Orange                                     CODE  68   VALUE #F3CF9B   EDGE #333333
0                              // LEGOID 198 - Bright Reddish Lilac
0 !COLOUR Bright_Reddish_Lilac                                  CODE  69   VALUE #CD6298   EDGE #333333
0                              // LEGOID 192 - Reddish Brown
0 !COLOUR Reddish_Brown                                         CODE  70   VALUE #582A12   EDGE #595959
0                              // LEGOID 194 - Medium Stone Grey
0 !COLOUR Light_Bluish_Grey                                     CODE  71   VALUE #A0A5A9   EDGE #333333
0                              // LEGOID 199 - Dark Stone Grey
0 !COLOUR Dark_Bluish_Grey                                      CODE  72   VALUE #6C6E68   EDGE #333333
0                              // LEGOID 102 - Medium Blue
0 !COLOUR Medium_Blue                                           CODE  73   VALUE #5C9DD1   EDGE #333333
0                              // LEGOID  29 - Medium Green
0 !COLOUR Medium_Green                                          CODE  74   VALUE #73DCA1   EDGE #333333
0                              // LEGOID 223 - Light Pink
0 !COLOUR Light_Pink                                            CODE  77   VALUE #FECCCF   EDGE #333333
0                              // LEGOID 283 - Light Nougat
0 !COLOUR Light_Flesh                                           CODE  78   VALUE #F6D7B3   EDGE #333333
0                              // LEGOID  38 - Dark Orange
0 !COLOUR Medium_Dark_Flesh                                     CODE  84   VALUE #CC702A   EDGE #333333
0                              // LEGOID 268 - Medium Lilac
0 !COLOUR Medium_Lilac                                          CODE  85   VALUE #3F3691   EDGE #1E1E1E
0                              // LEGOID 312 - Medium Nougat
0 !COLOUR Dark_Flesh                                            CODE  86   VALUE #7C503A   EDGE #333333
0                              // LEGOID 195 - Medium Royal Blue
0 !COLOUR Blue_Violet                                           CODE  89   VALUE #4C61DB   EDGE #333333
0                              // LEGOID  18 - Nougat
0 !COLOUR Flesh                                                 CODE  92   VALUE #D09168   EDGE #333333
0                              // LEGOID 100 - Light Red
0 !COLOUR Light_Salmon                                          CODE 100   VALUE #FEBABD   EDGE #333333
0                              // LEGOID 110 - Bright Bluish Violet
0 !COLOUR Violet                                                CODE 110   VALUE #4354A3   EDGE #333333
0                              // LEGOID 112 - Medium Bluish Violet
0 !COLOUR Medium_Violet                                         CODE 112   VALUE #6874CA   EDGE #333333
0                              // LEGOID 115 - Medium Yellowish Green
0 !COLOUR Medium_Lime                                           CODE 115   VALUE #C7D23C   EDGE #333333
0                              // LEGOID 118 - Light Bluish Green
0 !COLOUR Aqua                                                  CODE 118   VALUE #B3D7D1   EDGE #333333
0                              // LEGOID 120 - Light Yellowish Green
0 !COLOUR Light_Lime                                            CODE 120   VALUE #D9E4A7   EDGE #333333
0                              // LEGOID 125 - Light Orange
0 !COLOUR Light_Orange                                          CODE 125   VALUE #F9BA61   EDGE #333333
0                              // LEGOID 208 - Light Stone Grey
0 !COLOUR Very_Light_Bluish_Grey                                CODE 151   VALUE #E6E3E0   EDGE #333333
0                              // LEGOID 191 - Flame Yellowish Orange
0 !COLOUR Bright_Light_Orange                                   CODE 191   VALUE #F8BB3D   EDGE #333333
0                              // LEGOID 212 - Light Royal Blue
0 !COLOUR Bright_Light_Blue                                     CODE 212   VALUE #86C1E1   EDGE #333333
0                              // LEGOID 216 - Rust
0 !COLOUR Rust                                                  CODE 216   VALUE #B31004   EDGE #333333
0                              // LEGOID 226 - Cool Yellow
0 !COLOUR Bright_Light_Yellow                                   CODE 226   VALUE #FFF03A   EDGE #333333
0                              // LEGOID 232 - Dove Blue
0 !COLOUR Sky_Blue                                              CODE 232   VALUE #56BED6   EDGE #333333
0                              // LEGOID 140 - Earth Blue
0 !COLOUR Dark_Blue                                             CODE 272   VALUE #0D325B   EDGE #1E1E1E
0                              // LEGOID 141 - Earth Green
0 !COLOUR Dark_Green                                            CODE 288   VALUE #184632   EDGE #595959
0                              // LEGOID 308 - Dark Brown
0 !COLOUR Dark_Brown                                            CODE 308   VALUE #352100   EDGE #595959
0                              // LEGOID  11 - Pastel Blue
0 !COLOUR Maersk_Blue                                           CODE 313   VALUE #54A9C8   EDGE #333333
0                              // LEGOID 154 - New Dark Red
0 !COLOUR Dark_Red                                              CODE 320   VALUE #720E0F   EDGE #333333
0                              // LEGOID 321 - Dark Azur
0 !COLOUR Dark_Azure                                            CODE 321   VALUE #1498D7   EDGE #333333
0                              // LEGOID 322 - Medium Azur
0 !COLOUR Medium_Azure                                          CODE 322   VALUE #3EC2DD   EDGE #333333
0                              // LEGOID 323 - Aqua
0 !COLOUR Light_Aqua                                            CODE 323   VALUE #BDDCD8   EDGE #333333
0                              // LEGOID 326 - Spring Yellowish Green
0 !COLOUR Yellowish_Green                                       CODE 326   VALUE #DFEEA5   EDGE #333333
0                              // LEGOID 330 - Olive Green
0 !COLOUR Olive_Green                                           CODE 330   VALUE #9B9A5A   EDGE #333333
0                              // LEGOID 153 - Sand Red
0 !COLOUR Sand_Red                                              CODE 335   VALUE #D67572   EDGE #333333
0                              // LEGOID  22 - Medium Reddish Violet
0 !COLOUR Medium_Dark_Pink                                      CODE 351   VALUE #F785B1   EDGE #333333
0                              // LEGOID  25 - Earth Orange
0 !COLOUR Earth_Orange                                          CODE 366   VALUE #FA9C1C   EDGE #333333
0                              // LEGOID 136 - Sand Violet
0 !COLOUR Sand_Purple                                           CODE 373   VALUE #845E84   EDGE #333333
0                              // LEGOID 151 - Sand Green
0 !COLOUR Sand_Green                                            CODE 378   VALUE #A0BCAC   EDGE #333333
0                              // LEGOID 135 - Sand Blue
0 !COLOUR Sand_Blue                                             CODE 379   VALUE #597184   EDGE #333333
0                              // LEGOID  12 - Light Orange Brown
0 !COLOUR Fabuland_Brown                                        CODE 450   VALUE #B67B50   EDGE #333333
0                              // LEGOID 105 - Bright Yellowish Orange
0 !COLOUR Medium_Orange                                         CODE 462   VALUE #FFA70B   EDGE #333333
0                              // LEGOID  38 - Dark Orange
0 !COLOUR Dark_Orange                                           CODE 484   VALUE #A95500   EDGE #333333
0                              // LEGOID 103 - Light Grey
0 !COLOUR Very_Light_Grey                                       CODE 503   VALUE #E6E3DA   EDGE #333333
0                              // LEGOID 218 - Reddish Lilac
0 !COLOUR Reddish_Lilac                                         CODE 218   VALUE #8E5597   EDGE #333333
0                              // LEGOID 295 - Flamingo Pink
0 !COLOUR Flamingo_Pink                                         CODE 295   VALUE #FF94C2   EDGE #333333
0                              // LEGOID 219 - Lilac
0 !COLOUR Lilac                                                 CODE 219   VALUE #564E9D   EDGE #333333
0                              // LEGOID 128 - Dark Nougat
0 !COLOUR Dark_Nougat                                           CODE 128   VALUE #AD6140   EDGE #333333


0 // LDraw Transparent Colours
0                              // LEGOID  40 - Transparent
0 !COLOUR Trans_Clear                                           CODE  47   VALUE #FCFCFC   EDGE #C3C3C3   ALPHA 128
0                              // LEGOID 111 - Transparent Brown
0 !COLOUR Trans_Black                                           CODE  40   VALUE #635F52   EDGE #171316   ALPHA 128
0                              // LEGOID  41 - Transparent Red
0 !COLOUR Trans_Red                                             CODE  36   VALUE #C91A09   EDGE #880000   ALPHA 128
0                              // LEGOID  47 - Transparent Fluorescent Reddish Orange
0 !COLOUR Trans_Neon_Orange                                     CODE  38   VALUE #FF800D   EDGE #BD2400   ALPHA 128
0                              // LEGOID 182 - Trans Bright Orange
0 !COLOUR Trans_Orange                                          CODE  57   VALUE #F08F1C   EDGE #A45C28   ALPHA 128
0                              // LEGOID 157 - Transparent Fluorescent Yellow
0 !COLOUR Trans_Neon_Yellow                                     CODE  54   VALUE #DAB000   EDGE #C3BA3F   ALPHA 128
0                              // LEGOID  44 - Transparent Yellow
0 !COLOUR Trans_Yellow                                          CODE  46   VALUE #F5CD2F   EDGE #8E7400   ALPHA 128
0                              // LEGOID  49 - Transparent Fluorescent Green
0 !COLOUR Trans_Neon_Green                                      CODE  42   VALUE #C0FF00   EDGE #84C300   ALPHA 128
0                              // LEGOID 311 / 227 - Transparent Bright Green / Transparent Bright Yellowish Green
0 !COLOUR Trans_Bright_Green                                    CODE  35   VALUE #56E646   EDGE #9DA86B   ALPHA 128
0                              // LEGOID  48 - Transparent Green
0 !COLOUR Trans_Green                                           CODE  34   VALUE #237841   EDGE #1E6239   ALPHA 128
0                              // LEGOID  43 - Transparent Blue
0 !COLOUR Trans_Dark_Blue                                       CODE  33   VALUE #0020A0   EDGE #000064   ALPHA 128
0                              // LEGOID 143 - Transparent Fluorescent Blue
0 !COLOUR Trans_Medium_Blue                                     CODE  41   VALUE #559AB7   EDGE #196973   ALPHA 128
0                              // LEGOID  42 - Transparent Light Blue
0 !COLOUR Trans_Light_Blue                                      CODE  43   VALUE #AEE9EF   EDGE #72B3B0   ALPHA 128
0                              // LEGOID 229 - Transparent Light Bluish Green
0 !COLOUR Trans_Very_Light_Blue                                 CODE  39   VALUE #C1DFF0   EDGE #85A3B4   ALPHA 128
0                              // LEGOID 236 - Transparent Bright Reddish Lilac
0 !COLOUR Trans_Bright_Reddish_Lilac                            CODE  44   VALUE #96709F   EDGE #5A3463   ALPHA 128
0                              // LEGOID 126 - Transparent Bright Bluish Violet
0 !COLOUR Trans_Purple                                          CODE  52   VALUE #A5A5CB   EDGE #280025   ALPHA 128
0                              // LEGOID 113 - Transparent Medium Reddish Violet
0 !COLOUR Trans_Dark_Pink                                       CODE  37   VALUE #DF6695   EDGE #A32A59   ALPHA 128
0                              // LEGOID 230 - Transparent Bright Pink
0 !COLOUR Trans_Pink                                            CODE  45   VALUE #FC97AC   EDGE #A8718C   ALPHA 128
0                              // LEGOID 285 - Transparent Light Green
0 !COLOUR Trans_Light_Green                                     CODE  285  VALUE #7DC291   EDGE #52805F   ALPHA 128
0                              // LEGOID 234 - Transparent Fire Yellow
0 !COLOUR Trans_Fire_Yellow                                     CODE  234  VALUE #FBE890   EDGE #BAAB6A   ALPHA 128
0                              // LEGOID 293 - Transparent Light Royal Blue
0 !COLOUR Trans_Light_Blue_Violet                               CODE  293  VALUE #6BABE4   EDGE #4D7BA3   ALPHA 128
0                              // LEGOID 231 - Transparent Flame Yellowish Orange
0 !COLOUR Trans_Bright_Light_Orange                             CODE  231  VALUE #FCB76D   EDGE #BD8951   ALPHA 128
0                              // LEGOID 284 - Transparent Reddish Lilac
0 !COLOUR Trans_Reddish_Lilac                                   CODE  284  VALUE #C281A5   EDGE #82566E   ALPHA 128


0 // LDraw Chrome Colours
0                              // LEGOID 299 - Warm Gold Drum Lacq
0 !COLOUR Chrome_Gold                                           CODE 334   VALUE #BBA53D   EDGE #BBB23D                               CHROME
0                              // LEGOID 298 - Cool Silver Drum Lacq
0 !COLOUR Chrome_Silver                                         CODE 383   VALUE #E0E0E0   EDGE #A4A4A4                               CHROME
0                              // LEGOID 187 - Metallic Earth Orange
0 !COLOUR Chrome_Antique_Brass                                  CODE  60   VALUE #645A4C   EDGE #281E10                               CHROME
0 !COLOUR Chrome_Black                                          CODE  64   VALUE #1B2A34   EDGE #595959                               CHROME
0                              // LEGOID 185 - Metallic Bright Blue
0 !COLOUR Chrome_Blue                                           CODE  61   VALUE #6C96BF   EDGE #202A68                               CHROME
0                              // LEGOID 147 - Metallic Dark Green
0 !COLOUR Chrome_Green                                          CODE  62   VALUE #3CB371   EDGE #007735                               CHROME
0 !COLOUR Chrome_Pink                                           CODE  63   VALUE #AA4D8E   EDGE #6E1152                               CHROME


0 // LDraw Pearl Colours
0                              // LEGOID 183 - Metallic White
0 !COLOUR Pearl_White                                           CODE 183   VALUE #F2F3F2   EDGE #333333                               PEARLESCENT
0                              // LEGOID 150 - Metallic Light Grey
0 !COLOUR Pearl_Very_Light_Grey                                 CODE 150   VALUE #BBBDBC   EDGE #333333                               PEARLESCENT
0                              // LEGOID 179 / 296 / 131 / 315 - Silver Flip-flop / Cool Silver / Silver / Silver Metallic
0 !COLOUR Pearl_Light_Grey                                      CODE 135   VALUE #9CA3A8   EDGE #333333                               PEARLESCENT
0                              // LEGOID 131 - Silver
0 !COLOUR Flat_Silver                                           CODE 179   VALUE #898788   EDGE #333333                               PEARLESCENT
0                              // LEGOID 148 - Metallic Dark Grey
0 !COLOUR Pearl_Dark_Grey                                       CODE 148   VALUE #575857   EDGE #333333                               PEARLESCENT
0                              // LEGOID 145 - Sand Blue Metallic
0 !COLOUR Metal_Blue                                            CODE 137   VALUE #5677BA   EDGE #333333                               PEARLESCENT
0                              // LEGOID 127 - Gold
0 !COLOUR Pearl_Light_Gold                                      CODE 142   VALUE #DCBE61   EDGE #333333                               PEARLESCENT
0                              // LEGOID 297 - Warm Gold
0 !COLOUR Pearl_Gold                                            CODE 297   VALUE #CC9C2B   EDGE #333333                               PEARLESCENT
0                              // LEGOID 147 - Metallic Sand Yellow
0 !COLOUR Flat_Dark_Gold                                        CODE 178   VALUE #B4883E   EDGE #333333                               PEARLESCENT
0                              // LEGOID 139 - Copper
0 !COLOUR Copper                                                CODE 134   VALUE #964A27   EDGE #333333                               PEARLESCENT
0                              // LEGOID 189 - Reddish Gold
0 !COLOUR Reddish_Gold                                          CODE 189   VALUE #AC8247   EDGE #333333                               PEARLESCENT


0 // LDraw Metallic Colours
0                              // LEGOID 315 - Silver Metallic
0 !COLOUR Metallic_Silver                                       CODE  80   VALUE #A5A9B4   EDGE #333333                               METAL
0                              // LEGOID 200 - Lemon Metallic
0 !COLOUR Metallic_Green                                        CODE  81   VALUE #899B5F   EDGE #333333                               METAL
0                              // LEGOID 310 / 335  Metalized Gold / Gold Ink
0 !COLOUR Metallic_Gold                                         CODE  82   VALUE #DBAC34   EDGE #333333                               METAL
0                              // LEGOID 149 - Metallic Black
0 !COLOUR Metallic_Black                                        CODE  83   VALUE #1A2831   EDGE #333333                               METAL
0                              // LEGOID 309 / 336 - Metalized Silver / Silver Ink
0 !COLOUR Metallic_Dark_Grey                                    CODE  87   VALUE #6D6E5C   EDGE #333333                               METAL
0                              // LEGOID 300 / 334 - Copper Drum Lacq / Copper Ink
0 !COLOUR Metallic_Copper                                       CODE 300   VALUE #C27F53   EDGE #333333                               METAL
0                              // LEGOID 184 - Metallic Bright Red
0 !COLOUR Metallic_Bright_Red                                   CODE 184   VALUE #D60026   EDGE #333333                               METAL
0                              // LEGOID 186 - Metallic Dark Green
0 !COLOUR Metallic_Dark_Green                                   CODE 186   VALUE #008E3C   EDGE #333333                               METAL


0 // LDraw Milky Colours
0                              // LEGOID  20 - Nature
0 !COLOUR Milky_White                                           CODE  79   VALUE #FFFFFF   EDGE #C3C3C3   ALPHA 240
0                              // LEGOID 294 - Phosphorescent Green
0 !COLOUR Glow_In_Dark_Opaque                                   CODE  21   VALUE #E0FFB0   EDGE #A4C374   ALPHA 240   LUMINANCE 15
0                              // LEGOID  50 - Phosphorescent White
0 !COLOUR Glow_In_Dark_Trans                                    CODE 294   VALUE #BDC6AD   EDGE #818A71   ALPHA 240   LUMINANCE 15
0                              // LEGOID 329 - White Glow
0 !COLOUR Glow_In_Dark_White                                    CODE 329   VALUE #F5F3D7   EDGE #B5B49F   ALPHA 240   LUMINANCE 15


0 // LDraw Glitter Colours
0                              // LEGOID 114 - Tr. Medium Reddish-Violet w. Glitter 2%
0 !COLOUR Glitter_Trans_Dark_Pink                               CODE 114   VALUE #DF6695   EDGE #9A2A66   ALPHA 128                   MATERIAL GLITTER VALUE #923978 FRACTION 0.17 VFRACTION 0.2 SIZE 1
0                              // LEGOID 117 - Transparent Glitter
0 !COLOUR Glitter_Trans_Clear                                   CODE 117   VALUE #FFFFFF   EDGE #C3C3C3   ALPHA 128                   MATERIAL GLITTER VALUE #FFFFFF FRACTION 0.08 VFRACTION 0.1 SIZE 1
0                              // LEGOID 129 - Tr. Bright Bluish Violet w. Glitter 2%
0 !COLOUR Glitter_Trans_Purple                                  CODE 129   VALUE #640061   EDGE #280025   ALPHA 128                   MATERIAL GLITTER VALUE #8C00FF FRACTION 0.3 VFRACTION 0.4 SIZE 1
0                              // LEGOID 302  Tr. Light Blue with Glitter 2%
0 !COLOUR Glitter_Trans_Light_Blue                              CODE 302   VALUE #AEE9EF   EDGE #72B3B0   ALPHA 128                   MATERIAL GLITTER VALUE #923978 FRACTION 0.17 VFRACTION 0.2 SIZE 1
0                              // LEGOID 339  Tr Fluorescent Green with Glitter 2%
0 !COLOUR Glitter_Trans_Neon_Green                              CODE 339   VALUE #C0FF00   EDGE #84C300   ALPHA 128                   MATERIAL GLITTER VALUE #923978 FRACTION 0.17 VFRACTION 0.2 SIZE 1


0 // LDraw Speckle Colours
0 !COLOUR Speckle_Black_Silver                                  CODE 132   VALUE #000000   EDGE #898788                               MATERIAL SPECKLE VALUE #898788 FRACTION 0.4 MINSIZE 1 MAXSIZE 3
0                              // LEGOID 132 - Black Glitter
0 !COLOUR Speckle_Black_Gold                                    CODE 133   VALUE #000000   EDGE #DBAC34                               MATERIAL SPECKLE VALUE #DBAC34 FRACTION 0.4 MINSIZE 1 MAXSIZE 3
0 !COLOUR Speckle_Black_Copper                                  CODE  75   VALUE #000000   EDGE #AB6038                               MATERIAL SPECKLE VALUE #AB6038 FRACTION 0.4 MINSIZE 1 MAXSIZE 3
0 !COLOUR Speckle_Dark_Bluish_Grey_Silver                       CODE  76   VALUE #635F61   EDGE #898788                               MATERIAL SPECKLE VALUE #898788 FRACTION 0.4 MINSIZE 1 MAXSIZE 3


0 // LDraw Rubber Colours
0 !COLOUR Rubber_Yellow                                         CODE  65   VALUE #F5CD2F   EDGE #333333                               RUBBER
0 !COLOUR Rubber_Trans_Yellow                                   CODE  66   VALUE #CAB000   EDGE #8E7400   ALPHA 128                   RUBBER
0 !COLOUR Rubber_Trans_Clear                                    CODE  67   VALUE #FFFFFF   EDGE #C3C3C3   ALPHA 128                   RUBBER
0 !COLOUR Rubber_Black                                          CODE 256   VALUE #212121   EDGE #595959                               RUBBER
0 !COLOUR Rubber_Blue                                           CODE 273   VALUE #0033B2   EDGE #333333                               RUBBER
0 !COLOUR Rubber_Red                                            CODE 324   VALUE #C40026   EDGE #333333                               RUBBER
0 !COLOUR Rubber_Orange                                         CODE 350   VALUE #D06610   EDGE #333333                               RUBBER
0 !COLOUR Rubber_Light_Grey                                     CODE 375   VALUE #C1C2C1   EDGE #333333                               RUBBER
0 !COLOUR Rubber_Dark_Blue                                      CODE 406   VALUE #001D68   EDGE #595959                               RUBBER
0 !COLOUR Rubber_Purple                                         CODE 449   VALUE #81007B   EDGE #333333                               RUBBER
0 !COLOUR Rubber_Lime                                           CODE 490   VALUE #D7F000   EDGE #333333                               RUBBER
0 !COLOUR Rubber_Light_Bluish_Grey                              CODE 496   VALUE #A3A2A4   EDGE #333333                               RUBBER
0 !COLOUR Rubber_Flat_Silver                                    CODE 504   VALUE #898788   EDGE #333333                               RUBBER
0 !COLOUR Rubber_White                                          CODE 511   VALUE #FAFAFA   EDGE #333333                               RUBBER


0 // LDraw Internal Common Material Colours
0 !COLOUR Main_Colour                                           CODE  16   VALUE #FFFF80   EDGE #333333
0 !COLOUR Edge_Colour                                           CODE  24   VALUE #7F7F7F   EDGE #333333
0                              // LEGOID 109 - Black IR
0 !COLOUR Trans_Black_IR_Lens                                   CODE  32   VALUE #000000   EDGE #333333   ALPHA 210
0 !COLOUR Magnet                                                CODE 493   VALUE #656761   EDGE #595959                               METAL
0 !COLOUR Electric_Contact_Alloy                                CODE 494   VALUE #D0D0D0   EDGE #333333                               METAL
0 !COLOUR Electric_Contact_Copper                               CODE 495   VALUE #AE7A59   EDGE #333333                               METAL
0

I tested the script with the 4186.dat and it works fine. The result can be viewed in https://ldr.netlify.app/

That was a funny sunday afternoon task :-)


RE: Generate MPD with all dependency parts - Philippe Hurbain - 2020-12-20

Great you found a solution!
Now I need to install a Windows Python (I only use the Spike Prime and PyBricks versions...)


RE: Generate MPD with all dependency parts - Bernhard - 2020-12-20

(2020-12-20, 17:22)Philippe Hurbain Wrote: Great you found a solution!
Now I need to install a Windows Python (I only use the Spike Prime and PyBricks versions...)

The script is very buggy right now. I did a few corrections.
But the viewer has problems with file references like "s\10s01.dat".
I had to replace the backslash with __ for example. 
Now a few other files works. But most files don't.  

Is there a mpd file verifier script so that I can check if the generated file is correct?

Cheers,
Bernhard


use MPDCenter - Steffen - 2020-12-21

I think this could be achieved by using MPDCenter (contained inside the All-in-one-installer).
Simply configure in its options that the "official" files setting points to an empty folder,
and let the "unofficial parts" folder point to the LDRAW folder.


RE: use MPDCenter - Philippe Hurbain - 2020-12-21

(2020-12-21, 2:33)Steffen Wrote: I think this could be achieved by using MPDCenter (contained inside the All-in-one-installer).
Simply configure in its options that the "official" files setting points to an empty folder,
and let the "unofficial parts" folder point to the LDRAW folder.
That's whet I tried first, but it doesn't seem to work...


RE: Generate MPD with all dependency parts - Michael Heidemann - 2020-12-22

(2020-12-20, 12:57)Bernhard Wrote: Hi guys,

I'm totally new and very fascinated by ldraw. Smile Smile
I'm a software engineer and would like to view custom created models using this software: https://github.com/EvanBacon/Lego-Expo
Here is an online demo of the viewer: https://ldr.netlify.app/
The tools read MPD files. Example files can be found here: https://github.com/EvanBacon/Lego-Expo/tree/master/assets/ldraw/officialLibrary/models

My understanding is that the files have to contain the declaration of all parts used in the model. No external references are allowed.

As a test, I would like to use a simple baseplate and view it using Lego-Expo. I found this baseplate: https://www.ldraw.org/parts/official-part-lookup.html?folder=parts&partid=4186

Is there a way to generate an MPD file with all the referenced parts based on a DAT-file (like the parts/4186.dat) ?

I couldn't found such a tool.  Undecided
Thanks for your help!

Cheers,
Bernhard

Hi Bernhard,
you should try my program MPDCenter for your purpose.
cu
Mikeheide


RE: Generate MPD with all dependency parts - Stefan Frenz - 2020-12-30

(2020-12-20, 12:57)Bernhard Wrote: Is there a way to generate an MPD file with all the referenced parts based on a DAT-file (like the parts/4186.dat) ?
Hi Bernhard,

I'm late, but if you would like to give LDInspector (very beta) a chance, you can point to your mpd-file ("File" from the top menu), then select "Edit" pane and therein "Inline Parts" - "All used". Back on the "Item" pane click "Save item as new file" to have a mpd-file without external reference (hopefully).

Best regards
Stefan


RE: Generate MPD with all dependency parts - Philippe Hurbain - 2020-12-31

(2020-12-30, 22:48)Stefan Frenz Wrote: Hi Bernhard,

I'm late, but if you would like to give LDInspector (very beta) a chance, you can point to your mpd-file ("File" from the top menu), then select "Edit" pane and therein "Inline Parts" - "All used". Back on the "Item" pane click "Save item as new file" to have a mpd-file without external reference (hopefully).

Best regards
Stefan
Can prove useful! Thanks for the tip!!!