From d2ea4eba1a4de1e367063bfb837022e2da3ca1fd Mon Sep 17 00:00:00 2001 From: Brendan Haines Date: Thu, 1 Jul 2021 23:47:02 -0600 Subject: [PATCH] clean up output generation plugin --- .../plugins/OutputGeneration/AsyOutputs.py | 16 ----- .../plugins/OutputGeneration/FabOutputs.py | 62 +++++++++++------- .../plugins/OutputGeneration/__init__.py | 5 +- .../__pycache__/AsyOutputs.cpython-36.pyc | Bin 0 -> 853 bytes .../__pycache__/FabOutputs.cpython-36.pyc | Bin 0 -> 4698 bytes .../__pycache__/FabOutputs.cpython-38.pyc | Bin 4366 -> 4762 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 222 bytes scripting/plugins/OutputGeneration/icon.jpeg | Bin 0 -> 27288 bytes scripting/plugins/OutputGeneration/icon.png | Bin 0 -> 1650 bytes .../TestPlugin/TestPlugin_action.py | 17 ----- .../plugins/TestPlugin/TestPlugin/__init__.py | 3 - .../TestPlugin_action.cpython-38.pyc | Bin 791 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 268 -> 0 bytes .../plugins/TestPlugin/TestPlugin/icon.png | Bin 761 -> 0 bytes scripting/plugins/TestPlugin/__init__.py | 1 - .../__pycache__/__init__.cpython-38.pyc | Bin 210 -> 0 bytes 16 files changed, 39 insertions(+), 65 deletions(-) delete mode 100644 scripting/plugins/OutputGeneration/AsyOutputs.py create mode 100644 scripting/plugins/OutputGeneration/__pycache__/AsyOutputs.cpython-36.pyc create mode 100644 scripting/plugins/OutputGeneration/__pycache__/FabOutputs.cpython-36.pyc create mode 100644 scripting/plugins/OutputGeneration/__pycache__/__init__.cpython-36.pyc create mode 100644 scripting/plugins/OutputGeneration/icon.jpeg create mode 100644 scripting/plugins/OutputGeneration/icon.png delete mode 100644 scripting/plugins/TestPlugin/TestPlugin/TestPlugin_action.py delete mode 100644 scripting/plugins/TestPlugin/TestPlugin/__init__.py delete mode 100644 scripting/plugins/TestPlugin/TestPlugin/__pycache__/TestPlugin_action.cpython-38.pyc delete mode 100644 scripting/plugins/TestPlugin/TestPlugin/__pycache__/__init__.cpython-38.pyc delete mode 100644 scripting/plugins/TestPlugin/TestPlugin/icon.png delete mode 100644 scripting/plugins/TestPlugin/__init__.py delete mode 100644 scripting/plugins/TestPlugin/__pycache__/__init__.cpython-38.pyc diff --git a/scripting/plugins/OutputGeneration/AsyOutputs.py b/scripting/plugins/OutputGeneration/AsyOutputs.py deleted file mode 100644 index 87db33a..0000000 --- a/scripting/plugins/OutputGeneration/AsyOutputs.py +++ /dev/null @@ -1,16 +0,0 @@ -import pcbnew - -__all__ = ["AsyOutputs"] - -class AsyOutputs(pcbnew.ActionPlugin): - def defaults(self): - self.name = "Generate Assembly Outputs" - self.category = "Output Generation" - self.description = "Generate CSV BOM, Drawings, and add to pdf" - - self.pcbnew_icon_support = hasattr(self, "show_toolbar_button") - self.show_toolbar_button = True - - def Run(self): - # The entry function of the plugin that is executed on user action - print("Hello World - AsyOutputs") \ No newline at end of file diff --git a/scripting/plugins/OutputGeneration/FabOutputs.py b/scripting/plugins/OutputGeneration/FabOutputs.py index 9ce02c5..4dd9aeb 100644 --- a/scripting/plugins/OutputGeneration/FabOutputs.py +++ b/scripting/plugins/OutputGeneration/FabOutputs.py @@ -13,8 +13,8 @@ class FabOutputs(pcbnew.ActionPlugin): self.category = "Output Generation" self.description = "Generate Gerbers, BOM, Drawings, etc and add to pdf/zip" - self.pcbnew_icon_support = hasattr(self, "show_toolbar_button") self.show_toolbar_button = True + self.icon_file_name = os.path.join(os.path.dirname(__file__), "icon.png") def Run(self): # ================ @@ -84,38 +84,45 @@ class FabOutputs(pcbnew.ActionPlugin): "soldermask defined": None, # TODO: how do I want to determine this? } + dir_fab.mkdir(parents=True, exist_ok=True) + dir_asy.mkdir(parents=True, exist_ok=True) + files_fab = [] files_asy = [] # ================ # Gerbers # ================ + #### SETTINGS + tent_vias = True + trim_silkscreen = False plot_controller = pcbnew.PLOT_CONTROLLER(pcb) plot_options = plot_controller.GetPlotOptions() # Set General Options: + # plot_options.Format() plot_options.SetOutputDirectory(dir_fab) plot_options.SetPlotFrameRef(False) plot_options.SetPlotValue(False) plot_options.SetPlotReference(True) plot_options.SetPlotInvisibleText(False) - plot_options.SetPlotViaOnMaskLayer(False) + plot_options.SetPlotViaOnMaskLayer(not tent_vias) plot_options.SetExcludeEdgeLayer(True) plot_options.SetUseAuxOrigin(False) plot_options.SetMirror(False) plot_options.SetNegative(False) - #plot_options.SetDrillMarksType(PLOT_DRILL_MARKS_TYPE) - #plot_options.SetScale(PLOT_SCALE) - plot_options.SetAutoScale(True) + plot_options.SetScale(1) + # plot_options.SetAutoScale(True) #plot_options.SetPlotMode(PLOT_MODE) #plot_options.SetLineWidth(pcbnew.FromMM(PLOT_LINE_WIDTH)) plot_options.SetUseGerberAttributes(True) plot_options.SetUseGerberProtelExtensions(False) plot_options.SetCreateGerberJobFile(False) - plot_options.SetSubtractMaskFromSilk(True) plot_options.SetIncludeGerberNetlistInfo(False) - + plot_options.SetUseGerberX2format(True) + # plot_options.SetDrillMarksType() + plot_options.SetSubtractMaskFromSilk(trim_silkscreen) plot_plan = [ # ( layer ID, file extension, description) @@ -169,32 +176,39 @@ class FabOutputs(pcbnew.ActionPlugin): files_fab.append(fname) # ================ - # Pick and Place - # ================s - + # Drawing + # ================ # TODO # ================ - # Fab Drawing + # BOM + # ================ + # TODO + + # ================ + # Pick and Place + # ================ + # TODO + + # ================ + # Fab Notes # ================ - fname = f"README_FABRICATION{suffix}.TXT" - with open(dir_fab / fname, "w") as f: - f.write(f"{project_name}-REV{rev}\n") - f.write(f"Layer Order\n") - # for layer in plot_plan: - - files_fab.append(fname) + # fname = f"README_FABRICATION{suffix}.TXT" + # with open(dir_fab / fname, "w") as f: + # f.write(f"{project_name}-REV{rev}\n") + # f.write(f"Layer Order\n") + # # for layer in plot_plan: + # files_fab.append(fname) # ================ - # Assembly Drawing + # Assembly Notes # ================ - with open(dir_asy / f"README_ASSEMBLY{suffix}.TXT", "w") as f: - f.write(f"{project_name}-REV{rev}\n") - - files_asy.append(fname) - + # fname = f"README_ASSEMBLY{suffix}.TXT" + # with open(dir_asy / fname, "w") as f: + # f.write(f"{project_name}-REV{rev}\n") + # files_asy.append(fname) # ================ # Zip diff --git a/scripting/plugins/OutputGeneration/__init__.py b/scripting/plugins/OutputGeneration/__init__.py index e4058a9..1c2bf0a 100644 --- a/scripting/plugins/OutputGeneration/__init__.py +++ b/scripting/plugins/OutputGeneration/__init__.py @@ -1,5 +1,2 @@ from .FabOutputs import FabOutputs -from .AsyOutputs import AsyOutputs - -FabOutputs().register() # Instantiate and register to Pcbnew -AsyOutputs().register() # Instantiate and register to Pcbnew \ No newline at end of file +FabOutputs().register() # Instantiate and register to Pcbnew \ No newline at end of file diff --git a/scripting/plugins/OutputGeneration/__pycache__/AsyOutputs.cpython-36.pyc b/scripting/plugins/OutputGeneration/__pycache__/AsyOutputs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1642aad54bdc850ffb69f4ebb3481aa78b9c310e GIT binary patch literal 853 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 QelU7GlZd>Q9M2#ECbN)y2A;0VX#w zMt}zCSQ{mLl%%6=U&{BTeKh1phkf4}ADwNZi7w}ypZK1SGJfKDAC0_=+L~0aceCy# z^q^>IAa{&ubi5CFVj@nK3MMID0N;7=2_Qe>Tx=qEs)vXL4-vftvCckph#I05HOHMx zOy)5<(I7DdI2uDu0{OZ#!J?e?iLj#s%Oq!^qgIbe>cy$zW$QGZw0dFn(J`wZ0x_84 z6*^AGo5YI4egGCs&Pq^ZB_THLO*q9;&J62er&%xSYl=`P<;=2v7GrTX(B5A)gG}DX zY>*{b((}C&Kh+RGbp2TM)PJd_m%VPUcn9WMebMQCa&Xp4v$Qks^*qA@(D`gb^ri=1 zdX=M3(G>a^t)japreMx7h0e7&>kT1>{y&+y;9P4B+oPFpu{6oSurOQ~0_*@%qvYD(1SVG8@app7((UDq#kIBN+c#G3)%1<6WA<#VP|09d$r+EzxySjM zwvnq=^N%-6dpzO>Po!q9AN?Nql_+wqQpuO8{ZRWM<|>f2RVd|MWxY_j2_Q3U1VMr^ zZNJfej-KMNDlh1^VXnGoe-|2&r7d31ei8a*z{NGAgP-w?#@i8Acgy@UQvKJyAC6(w z{wlmG1w<^$_8;LTsR#GtkR8%fLm@zcjt;Ej9^5Si!tEfOoz)lcGkZ^u xXZg3y8=Q(&HFL_C;Z?V}Az)mkk~2Rq6*dh%M8mXy({Jcp6J+BK_^U(~-U2n)Qi%Wn delta 843 zcmZ`&-A)rh82x5;yDe;gc3UX@qZBM)p)C|zKtT;!;)QYnXw*id;t-N*G%nQ(oDCQC zLQPa~VoW48yN_Ua03N}6QXfDsd<5gS1@}rf`DV{|&Ua={COe;p-wg$?2Lj!I&;4KD z?!8Iu1yiKDH=gg4H%ZNN8JLI3FM-J$P*<8#&HMHFcS5?wHChg3&=kSCgthfb7N6+G zfh;{CI}K_jIkkzYam`BEVCr1A`nh5g0*KPAaDoP0lwtW3ZqVh1Ty)A+vo1I6q7fI3 zcIL*NkDPWbIaeNY(fD6g410EV!aQ7sJGadM#x3vwE5)G`Mze}cYS8)wa%0Fz7+Y;TjK_K6 zq(9qGxzZ#&$y2=F;e@S33K+H%u+ox_gEi*4!e%<$ti!RnCVf9*4)6hML6p3a34F78 z=O}JK1y*1cZUTC|Y~lZ&_&+=h)*yH8K=s84DIR3IGIVs?`DbKY6rf-b1lw|PbKN*1 z#UIjf$Baic@lc(P)IzIEi`C_&yNhdUOUoCp-om|ps$Zzs4ZiNmWegSPjj||*K8SW` zOa!!#3B&Jjoh5+iNLqdNIE-McEe^G$XlpAZB&PH#nG`SdK{e}-ktpfGd{J?zpC@m{ nZ#@<5atuyJAMyEeKBI!rcpxUjQE?@FA?REhREVGWsUrOW(l*Oh diff --git a/scripting/plugins/OutputGeneration/__pycache__/__init__.cpython-36.pyc b/scripting/plugins/OutputGeneration/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..337f522443bd4d4cce8a78ec17dff73fc970c9b5 GIT binary patch literal 222 zcmX|5F%H5o40H+uLi7Xtpi4a<1|)=-V1ofBmJk}N1k$uh(t)|J;Y(#?;tNcqAYtiF zr_=fDNgNL!?c>M+;2H3rD5zzC8wZjgnT7%mz<{8E3u}Us(GHT{i-kbK+Tlu^wzaQn z?>0$fyZv@xDOb*uy@Txs<4f;7p38#pWXVWjFx6!yG`h2}gjbabiPLm8Lzh`qd1Z2} mbe${X@K?VkLsocI8suCV-! literal 0 HcmV?d00001 diff --git a/scripting/plugins/OutputGeneration/icon.jpeg b/scripting/plugins/OutputGeneration/icon.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ac1b5b01e5bae5d9687d5c531559aa6b5e39c1a3 GIT binary patch literal 27288 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 P#Ml6&J!pkMH~anvZLTau literal 0 HcmV?d00001 diff --git a/scripting/plugins/OutputGeneration/icon.png b/scripting/plugins/OutputGeneration/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a32d00c18bd3956ef91d446027a6fedd5a37c7c7 GIT binary patch literal 1650 zcmV-&295cNP)D)gyH000INNkl)VjVS&E4H%;b zD-sV#TO|cNCU~r5Udpl>^*x0D5sw~U&18T?6 z*#`_gVTBp9J*cAqfZ3AEAD_^#pXoa(9m$i*;!E(4Ftp% zDf)sVa=BdT>FLLg9pf{I*FMcPcDMrr1KYQ6@9*zVO-)_7a;3-P2?PSEsi~(-wrytFB(XN(kAuZChz+DK((> zu~=+QCm3T{mJve1V31b}~J{t?%lg~?b@3+Z}NGH z5W)i4ufM){$ z0`s7zre@EcJv5RD&@{pr&pot2f9z80G*wk{H0AZ%i(a)(xU4+D`=Q)Nb@^0Gn0AR-Q8VUS~@&DJTWn` zWy_YXt}ctkVltWT-o3kf_wL0}<)uN3F(G8mmxhK00JwAK4yy{Z7~HybOI6jBl$5r% zwn!u*Ns`OuVm6FBJqG3h-(xuV4Utb^Hxu~e9rKM$db~Y_7?e^{4J9q9pc<^8-6w1uZ zG%qvOty?!VG{oGZMC12CZEdZps&Uumm2l(64FD)8C`f3nmKzLxZUa6BPoF-e7Ck*Z zq9_&@7X!eqUAx-b+xc@(hyh=m2_dp9S5{WCl?8WlVPPSi2Lgfg^z;oIHiSYUqtTe4 z6Fw8EudFSj67qVzm6er>qQpI5F$e?#i+fGRj@L|r-kCZGAy=+kIeq#xeH-tK=zXwx z^X8*RkN*7mGa8Koz`lL^Mn*;=kqAPlqM|}oRoZ0i-@kuoXeb(uVvLU;KOT)nHBG}9 z+wJz@;bGRxV!rdChyc*r+dDcsYPDJ?CnsOOey!_zUS8hk&!6AFe?K}pnvs#As;bZD z`}_B=&1U=h_3O)*FEvfGSS*8sgMEE{KYsjJ&`C0>q@<)6jmEUJG>oyqV89rQq6h$@ wDDo=^A*0cV5TYyem##2NK@h5{s;D3T0ot(kFx5`u0000007*qoM6N<$f;~?gNB{r; literal 0 HcmV?d00001 diff --git a/scripting/plugins/TestPlugin/TestPlugin/TestPlugin_action.py b/scripting/plugins/TestPlugin/TestPlugin/TestPlugin_action.py deleted file mode 100644 index 2a7e038..0000000 --- a/scripting/plugins/TestPlugin/TestPlugin/TestPlugin_action.py +++ /dev/null @@ -1,17 +0,0 @@ -import pcbnew -import os - -class TestPlugin(pcbnew.ActionPlugin): - def defaults(self): - self.name = "TestPlugin" - self.category = "A descriptive category name" - self.description = "A description of the plugin and what it does" - - # self.pcbnew_icon_support = hasattr(self, "show_toolbar_button") - # self.show_toolbar_button = True - # icon_dir = os.path.dirname(os.path.dirname(__file__)) - # self.icon_file_name = os.path.join(icon_dir, 'icon.png') - - def Run(self): - # The entry function of the plugin that is executed on user action - print("Hello World - testplugin") \ No newline at end of file diff --git a/scripting/plugins/TestPlugin/TestPlugin/__init__.py b/scripting/plugins/TestPlugin/TestPlugin/__init__.py deleted file mode 100644 index abf8753..0000000 --- a/scripting/plugins/TestPlugin/TestPlugin/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .TestPlugin_action import TestPlugin -plugin = TestPlugin() -plugin.register() \ No newline at end of file diff --git a/scripting/plugins/TestPlugin/TestPlugin/__pycache__/TestPlugin_action.cpython-38.pyc b/scripting/plugins/TestPlugin/TestPlugin/__pycache__/TestPlugin_action.cpython-38.pyc deleted file mode 100644 index 1fb5e18ba5e328f1ed0f7454d95403cd36dc8fcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmZ`%J&)8d5Ve!+DlB_YAR#0uTp>k*O+|4MLL3xOtq>nVN)x;p?{2_r=WK`5Ms#<7 z=6(#KcT2@zpkkb`T#CbypU3g|&G^lHI69gU9525A__U7*`589jk>KVzPWuo62vA9i zVWkCqMIeIsf#pg@WUC`1F(!L7T0!a&%{)QzjZ3RZC^ zHrni&;yckj8XaoI^qRS?U`-#DaRuyb%N?s711)S8`y|}*>4C)G{70?TCH09Fa(zim zih+Nx@~z&9d}V|JuJVP{6_>f)awGCDb;TinvN%4@|E8uk`4HCTR}a75EP3T>trpGR zry$n6mCjCr8dC&9r}%Yuu1FRKpa07^$9oQiJf{>(i{eGg?%r!5rDh+sk-#1^ht(Jo z%&4CP-kxPeo&W#< diff --git a/scripting/plugins/TestPlugin/TestPlugin/__pycache__/__init__.cpython-38.pyc b/scripting/plugins/TestPlugin/TestPlugin/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index faf4ed714c9054b8a49a7939d7655b57d16f20cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmWIL<>g`kf|p0mCju!W7J)$^4QLs7RCX7FS4WaY;ZRdT_0jvu|C2!WM+JPW?p7Ve7s&kz{ FBLKrgNo)WB diff --git a/scripting/plugins/TestPlugin/TestPlugin/icon.png b/scripting/plugins/TestPlugin/TestPlugin/icon.png deleted file mode 100644 index 37907aa55ae5e6857a76692cc0f23b90c9ec8554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&bp`l@xc>kDAIKaGK;Amz1JE71 zB|(0{42;YyZ0wu@GD^y-YF2g*PEpx;`GpOQO>ONHrcIwQbJqM7=dWJ7e(UbXPd|Sz zD*kN6z`*#?)5S5Q;?~<6H_Ms~L|PMNUf7(!+O&1+*5>Db z&HnHGgl!VbVFMl@`h4r()wLUEH?L@z%sSJ$pUdK((eG|!)DUT?XP1ciww0m!Iy1jR zzTK;r43}QEUl-kTc`lbi?J{%y13eXv+y^%K8^<%;?PgrPkKw@GMq`D!6L=1A#4x_z z$B`gz!BqD?o@)cw9fsMTy&26Kg%hgl3=b$3F!HD`VO_x`!|-yQK6?nu*@iIybO!iGiz|ZVoZzY3=p}(q*bfSU~9#ANwbyd!U@KNm#-QB zy=!2<@vEz0Z3An>?^zAK4a_%wuWH!Zz-UnGe_&2UqwImNneSL7g!MNt-LUK3%aD1D zyKhy)WxLzwgZ59~tf*aK@yDe8*S-@s|6Tb0b%OYw5XSYt{#rHuR;lG}T%#}U@jIw- zkG^om7geUY`}RAmey@Gu^>0p--*!xQ>#7^e>NQW?{!;w4ZnyObrZ2ZS4t=@Hy71S! zrh?k->W2I`$^~2An*ZmHd{8%8p=N)az~cDtGEV}3{gF+X_-l?r+m?w9vL;fulTf3KFm^j!W|<>hx_P^29;@YyE6oJDNM T_L{4Hpt$mM^>bP0l+XkK(L5IK diff --git a/scripting/plugins/TestPlugin/__init__.py b/scripting/plugins/TestPlugin/__init__.py deleted file mode 100644 index 019288b..0000000 --- a/scripting/plugins/TestPlugin/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .TestPlugin import plugin \ No newline at end of file diff --git a/scripting/plugins/TestPlugin/__pycache__/__init__.cpython-38.pyc b/scripting/plugins/TestPlugin/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 5d7af294360be8ab7732a3eb04a675fe68443f6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmWIL<>g`kf+I)IC&&Tm#~=RdT_0j@u|C33{rLFIyv&mLc)fzkTO2mI Q`6;D2sdgZDd