From 64dfc0362b3058f4a2d47e7840fd7cc5c5c6b1f3 Mon Sep 17 00:00:00 2001 From: easyw Date: Tue, 14 Nov 2017 09:43:31 +0100 Subject: [PATCH] started a base for the get3Dmodels script --- action_menu_get3D_models.py | 199 ++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 action_menu_get3D_models.py diff --git a/action_menu_get3D_models.py b/action_menu_get3D_models.py new file mode 100644 index 0000000..f801910 --- /dev/null +++ b/action_menu_get3D_models.py @@ -0,0 +1,199 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# licence GPL 2 +# copyright easyw + +__version__='1.2.2' + + +import codecs +import re,os, sys + +import urllib2 +import ssl + +ctx = ssl.create_default_context() +ctx.check_hostname = False +ctx.verify_mode = ssl.CERT_NONE + + +KISYS3DMOD=ur"C:\KiCad-stable\share\kicad\modules\packages3d" +KISYS3DMOD=ur"C:\Program Files (x86)\KiCad\share\kicad\modules\packages3d1" +KISYS3DMOD=KISYS3DMOD.replace('\\','/') + +global fileOut + +fileOut=ur"log-3Dmodels.txt" +fileOut=fileOut.replace('\\','/') + +filename=ur"C:\Temp\blinky-dev.kicad_pcb" +filename=filename.replace('\\','/') + + +import argparse + +args=sys.argv +#for a in args: +# print a + + +def collect_models(fn, kv, k3d, fupd): + """collect models from GH for the present pcb""" + + global fileOut + + overwrite=False + if fupd=='/u': + overwrite=True + filename=fn + KISYS3DMOD=k3d + kicad_version=kv + + txtFile = codecs.open(filename, mode='rb', encoding='utf-8', errors='replace', buffering=1) #test maui utf-8 + content = txtFile.readlines() + content.append(" ") + txtFile.close() + data=''.join(content) + + model_list = re.findall(r'\(model\s+(.+?)\.wrl',data) + #model_list = re.findall(r'\(model\s+(.+?)\.wrl',data, re.MULTILINE|re.DOTALL) + model_list2 = re.findall(r'\(model\s+(.+?)\.WRL',data) + model_list=model_list+model_list2 + model_list2 = re.findall(r'\(model\s+(.+?)\.stp',data) + model_list=model_list+model_list2 + model_list2 = re.findall(r'\(model\s+(.+?)\.step',data) + model_list=model_list+model_list2 + model_list2 = re.findall(r'\(model\s+(.+?)\.STP',data) + model_list=model_list+model_list2 + model_list2 = re.findall(r'\(model\s+(.+?)\.STEP',data) + model_list=model_list+model_list2 + + #print model_list + + fOut=codecs.open(fileOut, mode='wb', encoding='utf-8', errors='replace', buffering=1) + + parsed=[] + fOut.write(u'parsed '+str(len(model_list))+u' model(s)'+ os.linesep) + for d in model_list: + found=False + d1=d.replace('\\','/') + #d1=d1.rstrip('/') + if 'KISYS3DMOD' in d1: + d1=d1.lstrip('${KISYS3DMOD}/') + d1=d1.lstrip('/') + d=d1 + local=False + #print d1 + if 'KIPRJMOD' in d1: + #print 'LOCAL' + #stop + local=True + d1=d1.lstrip('${KIPRJMOD}') + d1=d1.lstrip('/') + print d1 + d=d1 + if d not in parsed: + if local: + fOut.write(d+u'.wrl'+ os.linesep) + directory=d1 + prefix="" + else: + fOut.write(KISYS3DMOD+os.sep+d+u'.wrl'+ os.linesep) + directory=KISYS3DMOD+os.sep+d1 + prefix=KISYS3DMOD+os.sep + #print d1 + ##stop + #print d1.rfind('/') + #stop + if d1.rfind('/')!=-1: + d1=d1[0:d1.rindex('/')] + #else: + + #print 'd, d1, dir' + #print d + #print d1 + #print directory + #stop + if not os.path.exists(directory): + try: + os.makedirs(directory) + except: + print 'you need Administrative rights' + continue + if os.path.exists(prefix+d+u'.wrl'): + found=True + print u'exists '+d+u'.wrl' + #fOut.write(d) + #fOut.write('\n') + if not found or overwrite: + fileDest=prefix+d+u'.wrl' + d1=d.replace('\\','/') + try: + response = urllib2.urlopen(github_src+d1+u'.wrl', context=ctx) + myfile = response.read() + f_dest=codecs.open(fileDest, mode='wb', encoding='utf-8', errors='replace', buffering=1) + f_dest.write(myfile) + print fileDest + ur' written' + except: + print 'error file not found' + print github_src+d1+u'.wrl' + print 'or you may need Administrative rights' + #print myfile + + found=False + if os.path.exists(prefix+d+u'.step') or os.path.exists(prefix+d+u'.STEP') or \ + os.path.exists(prefix+d+u'.stp') or os.path.exists(prefix+d+u'.STP'): + print u'exists '+d+u'.step' + #fOut.write(d) + #fOut.write('\n') + found=True + if not found or overwrite: + fileDest=prefix+d+u'.step' + d1=d.replace('\\','/') + #print github_src+d1+u'.step' + try: + response = urllib2.urlopen(github_src+d1+u'.step', context=ctx) + myfile = response.read() + f_dest=codecs.open(fileDest, mode='wb', encoding='utf-8', errors='replace', buffering=1) + f_dest.write(myfile) + print fileDest + ur' written' + except: + print 'error file not found' + print github_src+d1+u'.step' + print 'or you may need Administrative rights' + #print myfile + #fOut.write('\n') + parsed.append(d) + + fOut.close() + #print model_list2 +## + +if len(args) >= 4: + KISYS3DMOD=args[1] + kicad_ver=args[2] + filename=args[3] + force_upd=None + if len(args) == 5: + force_upd=args[4] + print args[1],args[2],args[3] + if force_upd is not None: + print + print 'forcing download and override all 3D models' + else: + print + if kicad_ver=='4': + github_src=ur'https://github.com/KiCad/kicad-library/raw/master/modules/packages3d/' + gh_base=ur'https://github.com/KiCad/kicad-library/modules/packages3d/' + else: + github_src=ur'https://github.com/KiCad/kicad-packages3D/raw/master/' + gh_base=ur'https://github.com/KiCad/kicad-packages3D/' + print + print 'collecting packages from:' + print gh_base + print + + collect_models(filename, kicad_ver, KISYS3DMOD, force_upd) + +