nitrofurano Posted August 13, 2017 Posted August 13, 2017 (edited) based on this script i improved it for creating a .ldr template from peeron.com online database we just need to enter something like sdlBrt templatefrompeeronwebsite.sdlbas 293-1 and then the script downloads the respective peeron.com webpage ( http://peeron.com/inv/sets/293-1 in this case - i'm only using peeron for now, it seems far easier for extracting information ), extracts the parts inventory information from there, creates a .ldr file, and opens LeoCad with that curl (for downloading the webpage, weirdly wget doesn’t work) and grep (for "cleaning" the html page) are needed as dependency (on Ubuntu and Debian, grep comes preinstalled, curl needs to be installed, like from "sudo apt install curl") - cat and rm are very known gnu-tools! ;) model$="210-1" '- default model used when no model is added in the command line argument if argv(2)<>"" then: model$=argv(2):end if shell("curl http://www.peeron.com/inv/sets/"+model$+" > tmp1.html") shell("cat tmp1.html | grep td | grep href | grep part > tmp2.html") shell("rm tmp1.html") finp$="tmp2.html" function lstinf$(a$,b$,c$) adra=1:adrb=1:blngt=len(b$):d$="" while adrb<=blngt if mid$ (a$,adra,1)=mid$ (b$,adrb,1) then:adrb+=1:end if adra=adra+1 end while while mid$(a$,adra,1)<>left$(c$,1) d$=d$+mid$(a$,adra,1):adra=adra+1 end while lstinf$=d$ end function fout$=model$+".ldr" open finp$ for input as #1:open fout$ for output as #2 dst=100:vamt=0 while eof(1)=0 setcaption(finp$+"line:"+str$(vamt)) file input #1,trln$ trln$="> "+trln$+" 0 0 0 " amnt$=lstinf$(trln$,"><td>","<td>") prtn$=lstinf$(trln$,"><td><td><td><a>","<a>") clrk$=lstinf$(trln$,"><td><td><td><a><a><td><td>","<td>") v2=val(amnt$) '----- this list is still way incomplete '----- old solid colours: 0..2,4,7,14..15, if lcase$(clrk$)="black" then:clrk$="0":end if if lcase$(clrk$)="blue" then:clrk$="1":end if if lcase$(clrk$)="green" then:clrk$="2":end if if lcase$(clrk$)="red" then:clrk$="4":end if if lcase$(clrk$)="grey" then:clrk$="7":end if if lcase$(clrk$)="oldgray" then:clrk$="7":end if if lcase$(clrk$)="lightgray" then:clrk$="7":end if if lcase$(clrk$)="yellow" then:clrk$="14":end if if lcase$(clrk$)="white" then:clrk$="15":end if if lcase$(clrk$)="multi" then:clrk$="15":end if '----- translucent colours: 33..47,52,54,57, if lcase$(clrk$)="transdarkblue" then:clrk$="33":end if if lcase$(clrk$)="trdkblue" then:clrk$="33":end if if lcase$(clrk$)="transgreen" then:clrk$="34":end if if lcase$(clrk$)="trgreen" then:clrk$="34":end if if lcase$(clrk$)="transbrightgreen" then:clrk$="35":end if if lcase$(clrk$)="trbtgreen" then:clrk$="35":end if if lcase$(clrk$)="transred" then:clrk$="36":end if if lcase$(clrk$)="trred" then:clrk$="36":end if if lcase$(clrk$)="transdarkpink" then:clrk$="37":end if if lcase$(clrk$)="trdkpink" then:clrk$="37":end if if lcase$(clrk$)="transneonorange" then:clrk$="38":end if if lcase$(clrk$)="trneonorange" then:clrk$="38":end if if lcase$(clrk$)="transverylightblue" then:clrk$="39":end if if lcase$(clrk$)="transblack" then:clrk$="40":end if if lcase$(clrk$)="trblack" then:clrk$="40":end if if lcase$(clrk$)="smoke" then:clrk$="40":end if if lcase$(clrk$)="transmdediumblue" then:clrk$="41":end if if lcase$(clrk$)="trmdblue" then:clrk$="41":end if if lcase$(clrk$)="transneongreen" then:clrk$="42":end if if lcase$(clrk$)="trneongreen" then:clrk$="42":end if if lcase$(clrk$)="translightblue" then:clrk$="43":end if if lcase$(clrk$)="trltblue" then:clrk$="43":end if if lcase$(clrk$)="translightpurple" then:clrk$="44":end if if lcase$(clrk$)="trltpurple" then:clrk$="44":end if if lcase$(clrk$)="transpink" then:clrk$="45":end if if lcase$(clrk$)="trpink" then:clrk$="45":end if if lcase$(clrk$)="transyellow" then:clrk$="46":end if if lcase$(clrk$)="tryellow" then:clrk$="46":end if if lcase$(clrk$)="transparent" then:clrk$="47":end if if lcase$(clrk$)="transclear" then:clrk$="47":end if if lcase$(clrk$)="trclear" then:clrk$="47":end if if lcase$(clrk$)="clear" then:clrk$="47":end if if lcase$(clrk$)="transpurple" then:clrk$="52":end if if lcase$(clrk$)="trpurple" then:clrk$="52":end if if lcase$(clrk$)="transneonyellow" then:clrk$="54":end if if lcase$(clrk$)="trneonyellow" then:clrk$="54":end if if lcase$(clrk$)="transorange" then:clrk$="57":end if if lcase$(clrk$)="trorange" then:clrk$="57":end if '----- recent solid colours: 3,5..6,8..13,16..20,22..23,25..31,92, if lcase$(clrk$)="darkturquoise" then:clrk$="3":end if if lcase$(clrk$)="dkturquoise" then:clrk$="3":end if if lcase$(clrk$)="darkpink" then:clrk$="5":end if if lcase$(clrk$)="dkpink" then:clrk$="5":end if if lcase$(clrk$)="brown" then:clrk$="6":end if if lcase$(clrk$)="darkgray" then:clrk$="8":end if if lcase$(clrk$)="dkgray" then:clrk$="8":end if if lcase$(clrk$)="lightblue" then:clrk$="9":end if if lcase$(clrk$)="ltblue" then:clrk$="9":end if if lcase$(clrk$)="brightgreen" then:clrk$="10":end if if lcase$(clrk$)="btgreen" then:clrk$="10":end if if lcase$(clrk$)="lightturquoise" then:clrk$="11":end if if lcase$(clrk$)="ltturquoise" then:clrk$="11":end if if lcase$(clrk$)="salmon" then:clrk$="12":end if if lcase$(clrk$)="pink" then:clrk$="13":end if if lcase$(clrk$)="maincolour" then:clrk$="16":end if if lcase$(clrk$)="lightgreen" then:clrk$="17":end if if lcase$(clrk$)="ltgreen" then:clrk$="17":end if if lcase$(clrk$)="lightyellow" then:clrk$="18":end if if lcase$(clrk$)="ltyellow" then:clrk$="18":end if if lcase$(clrk$)="tan" then:clrk$="19":end if if lcase$(clrk$)="lightviolet" then:clrk$="20":end if if lcase$(clrk$)="ltviolet" then:clrk$="20":end if if lcase$(clrk$)="purple" then:clrk$="22":end if if lcase$(clrk$)="darkblueviolet" then:clrk$="23":end if if lcase$(clrk$)="dkblueviolet" then:clrk$="23":end if if lcase$(clrk$)="orange" then:clrk$="25":end if if lcase$(clrk$)="magenta" then:clrk$="26":end if if lcase$(clrk$)="lime" then:clrk$="27":end if if lcase$(clrk$)="darktan" then:clrk$="28":end if if lcase$(clrk$)="dktan" then:clrk$="28":end if if lcase$(clrk$)="brightpink" then:clrk$="29":end if if lcase$(clrk$)="btpink" then:clrk$="29":end if if lcase$(clrk$)="mediumlavender" then:clrk$="30":end if if lcase$(clrk$)="mdlavender" then:clrk$="30":end if if lcase$(clrk$)="lavender" then:clrk$="31":end if '----- more recent solid colours: 68..?..92, if lcase$(clrk$)="verylightorange" then:clrk$="68":end if if lcase$(clrk$)="reddishbrown" then:clrk$="70":end if if lcase$(clrk$)="redbrown" then:clrk$="70":end if if lcase$(clrk$)="flesh" then:clrk$="92":end if '----- more recent solid colours: 100..?..503, if lcase$(clrk$)="lightsalmon" then:clrk$="100":end if if lcase$(clrk$)="ltsalmon" then:clrk$="100":end if if lcase$(clrk$)="mediumlime" then:clrk$="115":end if if lcase$(clrk$)="mdlime" then:clrk$="115":end if if lcase$(clrk$)="lightlime" then:clrk$="120":end if if lcase$(clrk$)="ltlime" then:clrk$="120":end if if lcase$(clrk$)="rust" then:clrk$="216":end if if lcase$(clrk$)="brightlightyellow" then:clrk$="226":end if if lcase$(clrk$)="btltyellow" then:clrk$="226":end if if lcase$(clrk$)="maerskblue" then:clrk$="313":end if if lcase$(clrk$)="darkorange" then:clrk$="484":end if if lcase$(clrk$)="dkorange" then:clrk$="484":end if if lcase$(clrk$)="verylightgray" then:clrk$="503":end if '----- special colours: 21,24, if lcase$(clrk$)="glowindarkopaque" then:clrk$="21":end if if lcase$(clrk$)="unknown" then:clrk$="24":end if '----- unknown if lcase$(clrk$)="mdstone" then:clrk$="24":end if '----- for l2=1 to v2 stou$="1 "+clrk$+" "+str$(vamt*dst)+" -24 "+str$((l2-1)*dst)+" 1 0 0 0 1 0 0 0 1 "+prtn$ print #2,stou$ next vamt=vamt+1 wend close #1:close #2 shell("rm tmp2.html") shell("leocad "+model$+".ldr") of course the script needs to be improved a lot! :D - but it is really a "productivity booster" for me, and all lego-cad developers are welcome on including it (or something like or far better than it! :D ) as feature or plugin, since the result is really a huge time saver! ;) Edited August 13, 2017 by nitrofurano Quote
leozide Posted August 24, 2017 Posted August 24, 2017 I've added something like that (using Rebrickable instead of Peeron), just go to File->Import->Set Inventory. A few parts aren't imported correctly since their IDs don't match, I've contacted Rebrickable and they told me they will provide a conversion table in the future. Quote
legolijntje Posted August 24, 2017 Posted August 24, 2017 27 minutes ago, leozide said: I've added something like that (using Rebrickable instead of Peeron), just go to File->Import->Set Inventory. A few parts aren't imported correctly since their IDs don't match, I've contacted Rebrickable and they told me they will provide a conversion table in the future. A conversion table? Rebrickable already has an extensive (although probably not 100% complete) mapping between Rebrickable, Bricklink and LDraw numbers. If you use the API you can get LDraw part numbers for a specific part. Quote
leozide Posted August 24, 2017 Posted August 24, 2017 3 hours ago, legolijntje said: A conversion table? Rebrickable already has an extensive (although probably not 100% complete) mapping between Rebrickable, Bricklink and LDraw numbers. If you use the API you can get LDraw part numbers for a specific part. That statement is true but the API for this is not usable in its current form to convert an entire model. To get the LDraw ID from a Rebrickable ID you need to do 1 API query per part, so we'd need to send a few hundred queries for some models, at a max rate of 2 queries per second I believe. Unless I'm missing something, the only way I found to convert a part is to use http://rebrickable.com/api/v3/lego/parts/3005/ Quote
kokkie20 Posted September 2, 2017 Posted September 2, 2017 Is it possible to create something like this for a bricklink xml file? Would be nice if that was possible to :) Quote
legolijntje Posted September 2, 2017 Posted September 2, 2017 Just now, kokkie20 said: Is it possible to create something like this for a bricklink xml file? Would be nice if that was possible to :) If you use LDCad you can also use Rebrickable to export an inventory to an LDCad partsbin file (pbg file). Quote
kokkie20 Posted September 2, 2017 Posted September 2, 2017 Just now, legolijntje said: If you use LDCad you can also use Rebrickable to export an inventory to an LDCad partsbin file (pbg file). I am using LDD, but will take a look at what you said. Need something that creates a LDR template for me for LDD from a bricklink xml file :) Quote
legolijntje Posted September 2, 2017 Posted September 2, 2017 36 minutes ago, kokkie20 said: I am using LDD, but will take a look at what you said. Need something that creates a LDR template for me for LDD from a bricklink xml file :) Well, in that case the pbg files won't be of use to you I'm afraid Quote
kokkie20 Posted September 2, 2017 Posted September 2, 2017 Hmm ill just keep hoping someone can figure it out, to sad i can't program (Nor do i understand the code above to try to adjust it) Thanks for the reply anyway! Quote
legolijntje Posted September 2, 2017 Posted September 2, 2017 1 hour ago, kokkie20 said: Hmm ill just keep hoping someone can figure it out, to sad i can't program (Nor do i understand the code above to try to adjust it) Thanks for the reply anyway! I'm 100% sure there was a program that could do it though (I used it myself in the past), I just can't remember what it's called... Quote
roland Posted September 2, 2017 Posted September 2, 2017 3 hours ago, legolijntje said: I'm 100% sure there was a program that could do it though (I used it myself in the past), I just can't remember what it's called... Maybe this one: https://sourceforge.net/projects/brickutils/ Quote
kokkie20 Posted September 3, 2017 Posted September 3, 2017 (edited) 22 hours ago, roland said: Maybe this one: https://sourceforge.net/projects/brickutils/ Ok got it working. Does anyone know if it is possible to stack items instead of placing them behind each other? Edited September 3, 2017 by kokkie20 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.