From 6ca9160e4be3cb239a42e456a92958ad193446fd Mon Sep 17 00:00:00 2001 From: looooo Date: Tue, 1 Jul 2014 20:14:59 +0200 Subject: [PATCH] straight bevel working again --- gear/gearfunc/_Classes.py | 46 ++++++++++++++++++++++-------- gear/gearfunc/_Classes.pyc | Bin 13552 -> 14518 bytes gear/gearfunc/__init__.py | 4 +-- gear/gearfunc/__init__.pyc | Bin 4687 -> 4682 bytes gear/gearfunc/_involute_tooth.py | 4 +-- gear/gearfunc/_involute_tooth.pyc | Bin 8160 -> 8172 bytes 6 files changed, 38 insertions(+), 16 deletions(-) diff --git a/gear/gearfunc/_Classes.py b/gear/gearfunc/_Classes.py index dff7d90..87acbdf 100644 --- a/gear/gearfunc/_Classes.py +++ b/gear/gearfunc/_Classes.py @@ -25,7 +25,8 @@ from _involute_tooth import involute_tooth, involute_rack from _cycloide_tooth import cycloide_tooth from _bevel_tooth import bevel_tooth from Part import BSplineCurve, Shape, Wire, Face, makePolygon, \ - BRepOffsetAPI, Shell, makeLoft, Solid, Line, BSplineSurface + BRepOffsetAPI, Shell, makeLoft, Solid, Line, BSplineSurface, Compound,\ + show, makePolygon from numpy import pi, cos, sin, tan import numpy @@ -292,17 +293,31 @@ class bevel_gear(): fp.gear.backlash = fp.backlash.Value fp.gear._update() pts = fp.gear.points(num=fp.numpoints) - # w1 = self.createteeths(pts, fp.m.Value * fp.gear.z / 2 / tan( - # fp.gamma.Value * pi / 180) + fp.height.Value / 2, fp.gear.z) - # w2 = self.createteeths(pts, fp.m.Value * fp.gear.z / 2 / tan( - # fp.gamma.Value * pi / 180) - fp.height.Value / 2, fp.gear.z) - fpts = [map(fcvec, i) for i in pts] - l = [] - for pt in fpts: - b = BSplineCurve() - b.interpolate(pt) - l.append(b) - fp.Shape = self.create_tooth() + tooth = self.create_tooth() + teeth = [tooth] + rot = App.Matrix() + rot.rotateZ(2 * pi / fp.teeth) + top_cap = [i.Edges[0] for i in tooth.Faces] + bottom_cap = [i.Edges[3] for i in tooth.Faces] + for i in range(fp.teeth - 1): + new_tooth = teeth[-1].transformGeometry(rot) + edge1 = new_tooth.Faces[0].Edges[2] + edge2 = teeth[-1].Faces[-1].Edges[1] + face1 = make_face(edge1, edge2) + teeth.append(face1) + teeth.append(new_tooth) + top_cap.append(face1.Edges[3]) + bottom_cap.append(face1.Edges[1]) + top_cap += [i.Edges[0] for i in new_tooth.Faces] + bottom_cap += [i.Edges[3] for i in new_tooth.Faces] + edge1 = teeth[0].Faces[0].Edges[2] + edge2 = teeth[-1].Faces[-1].Edges[1] + face1 = make_face(edge1, edge2) + teeth.append(face1) + top_cap.append(face1.Edges[3]) + bottom_cap.append(face1.Edges[1]) + fp.Shape = Solid(Shell(Compound(teeth).Faces + [Face(Wire(top_cap)), Face(Wire(bottom_cap))])) + def create_tooth(self): w = [] @@ -390,3 +405,10 @@ def helicalextrusion(wire, height, angle): solid.reverse() assert(solid.Volume >= 0) return(solid) + +def make_face(edge1, edge2): + v1, v2 = edge1.Vertexes + v3, v4 = edge2.Vertexes + pol = makePolygon([v1.Point, v2.Point, v4.Point, v3.Point, v1.Point]) + return(Face(pol)) + diff --git a/gear/gearfunc/_Classes.pyc b/gear/gearfunc/_Classes.pyc index 255ac4bf5956c3ab4b293fdab1ac328e4a46d9f1..e5ba29e15b5c56b292ed4d3a0dd4972c7ed9677f 100644 GIT binary patch delta 3691 zcmb_fU2NM|6+hQsu@fh;6T7za)i}u#r|CzWbZfVTkTzYGeKchMv|Z!1%~Jo}G^UQ7 z`roE>HU>J-Ud9IZ328#D5J;0YjV%*z2*eXFF!97I4?KW22_z(>3Qcf+=ems>WfMr) z`TuFBVzb-*kJjc7?tiqDrTWLszcc+r<>!9TeYaMKQ6@%(IA!8g z2vH_P$|ka#=vsmbU6kpfLN{f)snA229xC)wrq@WgAdyLs?Wfm?GJRwR$nGS&8N)k7 z%bERTw~!qnJNS^*Pj)NWQL@|WtRu^rB-!m`?;|_(P;7wgFb0`HvO9zrBHKkvshD0+ zW!0vCqu%Ov{A|cj)XU6s ztJio{XmjA=!peqdbrcV7@7C7AOruh?jo_^&hLsy7d)3J~KBh~>^$n+Nb^--X3j?!q z*Gt7~5P}*V3VKwRjs_2@n4S&Z^u?KJCH1d@iEtDzLA{*{f_qs1HTYAtq~B_NT^$yq z&a{QqYx>j3c*{#Hka8KRdu^|%Z|cw6j)#tbu?VmLXY}3ZoVT0F1KV%6-%~zuYp?!S zY}^Mwu--y=)F=KN)bE7H)TsV#cxv(h<}!eXaWGC7e=lR=Am9+ggH7Cx%r!&(_xLHN z;P0ROxI>A%tu%zOo>*5ft4@L`s>Qjo>QV3>2f(?K8`d#UT>vDIbrK-^fX`FNBMULM zo&n4;h@aWz2(9joJmrN$-q9B#)5dG?F#Gmi;)EAo`WgHgYVaqfmoR|8ir*J&2J0Fdoyt8))eslv;Az{`z~D_s?;h(`4$xas+%fqT2oZ@kQ1bQ zt1!J(@lw8xY-V~XQc;vA>b|2$tr6t&?R4s5Csln^@lifRwwDr@T(tR1sy5LVi1>`i zpQ!4m+O7NKgvqSSEiBGUpSt*GS}3NQ2KM8e;|;{}ChERsF!Y4p$4F}Awm z7sK}us~i4D7W30)t9rTOsTphjFGl^BW;juD_K_2VOJF~H)QOXmAoc^B$$#~szdl@Z zQOrzmm{z)oGjAz{p1r^U=FhjT%&dRRzt%XzIts=*KeUcsx2^#H=1&Se$W#|8Hm3I1 zz)S<=Kuc1OVEAZh;e;g0Ue9q0U2%#<=PJqvSx*C|7&teH=2o-0azllg#sv0RSp9l# z zf()T~Be!MtD;vz&Yq|78Y66sxu&=aE4o}acVkOyMWmrV2U3KxdL$#{73aS7 zGU-K7rvd0+yX<~KPag`aWxaSPv%8b|EEeBX`m@N9JuffQxV*rb4_X;g()z;73;b(U z09e=D9HUt#Kj){6?(FmWT!G#|ayxotzbmop2zpqcP`sJ5;`(%Ye^k6K3Z>n5@~jon z-%g)aWBQZy3tnrDIeKVfoNq&CC(fyP{oceI-dSee(oarK*Rn_s94{X~(y_2B-X1rg z3tZCqk2{w1BMd!M^}^PQi}Eh%OpM&R7`gH@3V+RX5+4$m8x~i!B{>}n<`OC4l|9c$ zvin)1x$za4vNjkbXK$v>&xHAzG(ShJ3%GfVU1hN!!RvS(=eS)RP$sHiG*FM}Hz$Yq zpMZ}h-=61U#42zq<+NF7ra ehPZ0%Qz8Cdau2wI?m$!L`OdM<#m?6P$^QTx>qwOV delta 2728 zcmb7GOKh7(5T3Q;KQBAB<2Z3%w)1M8G;NY5Y0|0Ni$AAooxgfY=70HMY=+i8PW?L=CCco0z4rF1Fp11UnyaF8h~gniS5v&2 z(lr#Xp>!?9Yl$r!u!vWYSwuI9;&o&elUYt?35GX_Cgb&FmXaAD)4i?=lj$L|g3PjY zRfJ40nL#prwyHv}jFRccDBeJ(gT`W&DkU zSOpqREL}>Td5I7t->U zx>Ye?aPEXkmyfuRrn^X}Z$m=0P98@HJyMJB>L-ItlZf$o#pBYj0Lnvf0QCrl}re1@oy;TiXj~?PWJWO@@44j_@ zY)WoS{A*c0%+=QvI9GRQqm+Iq^|$_{K7xcuV_ejH(b)5(p4d<`xVK=u+{LG`<(+m& zEwIg(k*^!Bli;&<_X#b_4dPPwPX6${;=g;ArzCSiezn2(tkI zQ)yUBYqtnGn;5D#+^Njq0JGsM^+tH%Q8xVccsBg5_xk^AIIUN`pPP(MKE#HIy5HCm z#=Wy|05Z&XW9DIEICQJpK!}%{Mu+o+$d@IGjiv#7F*xa5h{s=1r%E*M_adRF(Eg~7 z?>?zqb9VJSQPx2R&ID=2NmeOYZpu38hJ(&JXz@C&6p*%9anaQ-$`)w5R$4L0@}Tvv z6jHX3X3HpR&<#N%>!MjNR2VG2M-y41SsyI3f~NdrlJ4;Z+W%3#rT#pBZZNe9K1y&j zRt||<5K}SVG`Od5xjFF7c=v#9B=Zae?Q}FmGfT;Ym7KEX=dBA86pS&mxRtcol!5CJ z*yDKT7OV`HXpZ^5VDVsD-RT|Jf(8@S%{zmGlJJTe{Vf+B5pp#OL;n`*$DiwIy)DEJ z^>tf!Df(GVuOL~a0^3fm?!#&%;f`Q-U3al8L79YSv`ed_c2!0>vT zh;htZM+70^%4X0!BotIG02Tp<037i_)e)|8KN8k1^;3smJawxxzM)$fqk7S_P;ZxY zZ2IyTz{?|vc#%N;^5FN_m=-sEc_4Ap0$^YJ)mn83bmy3`cQ&aUgfEE8?i$ z&>{64vok$^IVmgEpWTrl6N5c+J7qqVtFE3SqE)T-94_HXk0fT28TDmPr-wh!n`(E44n_Rql8G>`iBGsirSR$R(~d@m+gV%~I2G6y7!9QV0aSpaGynhq diff --git a/gear/gearfunc/__init__.py b/gear/gearfunc/__init__.py index a15f908..4f73a6e 100644 --- a/gear/gearfunc/__init__.py +++ b/gear/gearfunc/__init__.py @@ -50,7 +50,7 @@ class CreateInvoluteRack(): pass def GetResources(self): - return {'Pixmap': 'involuterack.svg', 'MenuText': 'involute gear', 'ToolTip': 'involute rack'} + return {'Pixmap': 'involuterack.svg', 'MenuText': 'involute rack', 'ToolTip': 'involute rack'} def IsActive(self): if FreeCAD.ActiveDocument is None: @@ -59,7 +59,7 @@ class CreateInvoluteRack(): return True def Activated(self): - a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", "involute_gear") + a = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", "involute_rack") involute_gear_rack(a) a.ViewObject.Proxy = 0. FreeCAD.ActiveDocument.recompute() diff --git a/gear/gearfunc/__init__.pyc b/gear/gearfunc/__init__.pyc index e2cfa045ff182fe5afd6fbf95b41bca31d976e02..ff96a41cda0c6fe6c580694b8380f116cef4b842 100644 GIT binary patch delta 98 zcmX@Fa!Q4r`7{Rw%MB9f^o7s3*Y2S0jbR^IBv2q%5HAreZkBqH#u9dh+7t@DM$`T TXfRB^$l);g0we2WT_ITj8#N&+ diff --git a/gear/gearfunc/_involute_tooth.py b/gear/gearfunc/_involute_tooth.py index 8d7373d..6e0a4ff 100644 --- a/gear/gearfunc/_involute_tooth.py +++ b/gear/gearfunc/_involute_tooth.py @@ -173,9 +173,9 @@ class involute_rack(object): for i in range(self.z): teeth.append(trans(teeth[-1])) teeth = list(np.vstack(teeth)) - teeth.append(teeth[-1]) + teeth.append(list(teeth[-1])) teeth[-1][0] += self.thickness - teeth.append(teeth[0]) + teeth.append(list(teeth[0])) teeth[-1][0] += self.thickness teeth.append(teeth[0]) return(teeth) diff --git a/gear/gearfunc/_involute_tooth.pyc b/gear/gearfunc/_involute_tooth.pyc index 090039ba94dc1bac2ad01d97b6bfe7edac668165..f2b0db7c31d599a2502d5b9177363777d105aa36 100644 GIT binary patch delta 70 zcmaE0|Hhu3`7|Eukx?42T>aVMUz<@=?8oT0AvFI8Iw;OA(NgQ4wF_K8nd1p QC;