From 6441dd1283d8a16b9a3a02df407f20434fa9dfa1 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Fri, 3 Feb 2012 22:10:46 +0000 Subject: [PATCH] Added new toolbar icons, added arrowhead rendering to Painter class. --- res/add-arc-tool.png | Bin 0 -> 717 bytes res/add-circle-tool.png | Bin 0 -> 591 bytes res/add-line-tool.png | Bin 0 -> 713 bytes res/add-polygon-tool.png | Bin 0 -> 996 bytes res/architektonas.qrc | 6 ++++++ res/delete-tool.png | Bin 0 -> 2226 bytes res/rotate-tool.png | Bin 0 -> 1680 bytes src/applicationwindow.cpp | 13 ++++++++----- src/applicationwindow.h | 1 + src/dimension.cpp | 25 ++++++++++++++++++++++++- src/painter.cpp | 26 +++++++++++++++++++++++++- src/painter.h | 1 + 12 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 res/add-arc-tool.png create mode 100644 res/add-circle-tool.png create mode 100644 res/add-line-tool.png create mode 100644 res/add-polygon-tool.png create mode 100644 res/delete-tool.png create mode 100644 res/rotate-tool.png diff --git a/res/add-arc-tool.png b/res/add-arc-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..61c931c06f2ff069d2588126f29205f0a10eebc4 GIT binary patch literal 717 zcmV;;0y6!HP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyV# z0u3uh9O0k<00K=(L_t(|+U=V=P6I&P@pbHafr$P>gqf*EKm||%Q~(t~ zL5nu$fbHF0yT)7{Y6|>Ys1e;0QAb3qcnlFWNeyG>gAV}SJg#?pezyT&wm&1_F#sB^ z4Nee-=(P6sci81axqJ|#0w#qXaF4E zA4Gf%+hTa%3@JX;zR`O>)W#ybA7Up-Mq>xsW!KES%BH`!Zl1ho+IBPHhxV;DC-GL~ z3P7vU5fD~QPT?=u3yfC^>Mp8>c5a8=YD zA)(P1_E`Fk5^sq)3?~40DB+%90EAbJ;HGGjGDt)-0N;s=K?`6RI-pHe22YW0eAZ$; zmS04fPG?ZI^8SB;fng*OoqP`%)2fr9sRQ^0d@Ew`UPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyV# z0tymVSpRPT00GZQL_t(|+U=X&b;B?Sg(0T{wHvq_wUcC|W&?Q_4?rL4^yDG20SOD+ zSLf)>vALgwet@uu(3#tXPTtdWttdD9r)PAMGyQ0AXkipkxuRgix9RSQ-5;;#=6(V)RQ-@wN8te)MZ? zJjCeN*vXpI*h0AMQ$%iQ;(LF=lOIdi?xK9@vo>ZDKa0E((P+|9F|CG7(_gU`6qgIU zn*Nz1!4{jnLD4aJuvcxL7r=LN0BZYOF0hA0h}Lc-MgRZ+0Kj|X%)9`q?eiXlMiKc) z44@FvyJi=_Nzi+$%IXG7mpAWa$aJ|#91|E252)A$UR^G($vog{z8oPYh^R2~0>}&@ zH;C*o>H|Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyV# z0t^FcvUnQ+00K!#L_t(|+U=XMZc{N7hQAYaK@?P}5@L+t5%L0=*_gWY3A%M+L*gkI znVGtEZD-WJLD>NbsVbz1LVH*oWFZ${CHMLq=lV!qa-GEAXUEt2uOh0-m}|nwYb)15 zME))jRh6~^nt&#t31|W~QGkeOs{MOM$n~)*5t)m~Nf^_Kh|GJr4c1Tr_6XPsFD>Cu zv+rG=1lO5K%kzPV%z$Iy$tvU8%60a95DM_`Q}A78zv@jef`6X4{0(^1b@~3c0lI9t zzNH#411{pRMeRGV-}$p@6Oe(w1`dJkjT8V(fwR8gs}d04kASOEy?_k-ZMZgF>pR8_?^Zx5c$Wf7!n+dyY==$lR|$Am0s{OY@Us-W z8vzmgbprlwD0mkFGVmIXzSF_J-#PpRFdK9X#sc<%g%!N1fRNi=S;DKTO(GP9n2!>d zKLUHIdR}BKr5}$c65P1H053|x7taKv94`fbS#su!3&dA>pmdt!N=u%cKEdfSR}Y^1Xv}wE(BO6xaI<^6I>4h%tK5w0bWAP;sSt&z^i*UysF_-ve(FVp<6J5qAB!Zp=bV0|B3acaemz!0Szb@AP0qL?+=0&Qst) vxD$L<)x{_TjOHIBO+XXS1T+CnzzFLP2@c(ZfbRr`00000NkvXXu0mjfn7c0$ literal 0 HcmV?d00001 diff --git a/res/add-polygon-tool.png b/res/add-polygon-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..4f22d9d94401567f4b9570fcd112e8ec5abbe179 GIT binary patch literal 996 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyV# z0x3B}O>s^D00U%6L_t(|+U=XaYZO5g$3L^iVDOZb+HD~Sf)-+Fk;X;@J#12$GC~SV zNtH_OFOVb_Lh7K6poRZ{1TjrG6fvX;VigikgPLS4GAGMAvp;9%cC-6nn%TL#;rso* z_vXFX6H-c=Yyl0ov9tw3h<_51Qi@gqEdUL30h=a-5Wsoh0x$vW0pFyQKboR|OTa6j z53B*#- zTLpm!`G+d_#qB^dcOAHO(qh1@I{d`#1#lRfI|V%P8W3H^03ZZ*H2%H=TmjZJ&kli} zuNdGOfSw`X_0;pO3Vu3(!b$*8BJwA(AF4GSV9@~5BG9Qb0Ez5p0BR4IswDtf*w=t{ zq*=e}S_Of_$Umu>Uy@R8Y37%KubTNg&eP(k*^hi~L1lpW=lU)Kq6-Dgt{CMa}%n6!wSqRw+SOEzVY20SW96@}#q(F{BC#FtPsz zc%OriEnvx8&%hG<9bmI8`x#VVy=PzxfUY5h6+Xx$9FDA}MO*Cas=7aAj)!&g(P#as2s z@I{%}^~ruLEv_2C@A--Wri+ee8B5+W?m7UT0^j3dsqhVRm2$F$!%^;5x|3G72N0~K z#agkSv0BV^3Jr4levxLUD_aIWmcC)GBl{UD(ab%Apr-6co2Va3wbJX#zO9}?P-FJ9 zw9?b7#X7TZiNuESU@nqt6h1)v3>(e@Vt0K)!v S9t`mS0000 about-logo.png + add-arc-tool.png + add-circle-tool.png + add-line-tool.png + add-polygon-tool.png atns-icon.png + delete-tool.png dimension-tool.png fix-angle.png fix-length.png generic-tool.png + rotate-tool.png splash.png quit.png zoom-in.png diff --git a/res/delete-tool.png b/res/delete-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..ded806c24b50c8d5347341f4dba4ac66f57dce76 GIT binary patch literal 2226 zcmV;j2u=5iP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyV# z0vsfTdfy=c00=TkL_t(|+U=WvY?E~!$6rso_32i71IHA`1KHM*8#5vND4`^?Vu-n* zp&<&o-3f6*lw4T2LEs2*8BK<_3o$hzD*qV&Fc&eaCUz=nmS7OLM>FFQFC8Gyw4-}A z4`lANuKnNrRn$c`n7_vEpxR+a^<06-qCFYuC)Y{ zFT9{oSs5fhKb#>|m{C;;uh&L%b3Oh2V+D}_jc>mdC@kDXRh5#=SaOmke&K?|#~&YH zc-RS;35Cizd)CJJ^9lfuMidh(sj1x@?>{5$2tDf~;Tf!R1P)Dg;zj#OEvH{rBx$zy1=M zwn|St-j6~U3_(_|97;ccIdg^(gdmz$76V}%1i-+64WG}(M<1m}6@!CjWLe_)aT|fa z9wLznU_M}qOFZgFMx(;=GR501!5|Ta+U%6uD;6Vr9e}4c?D+L|~9?+LkVbTFX z7^^kNmMtDOZ&s!OA}aT{-?roP?I#?LmAjDeJ7%-O(xo2Oty6g7i6F(rp`_)NG=Sk@ z=;$zW?wrI|UrAiP{CoQPRuYL6OfnZ^Wgi`+#iC3yJ+w)ye)@D7uf1mH+O?N}Rkuvs zYE@Ezn<9XTOHeKY0}s*OZl$GVF|Doj3=G7&v3N^W)W1ml?rA4B3>VCdS0GFb#)V4w#XD0r+t4R%wkhC zc6!Xk>viz+&oyXTC18y^h-q;O31cwGR8;(x!-u0@5e1U|L1v&UEa(PTfX}y-_uhM% z-d-0_aO-afS9$bNH@kOxvDyAJo7?M59EUYvl;YwWIGx{7Q1Cg>cl&Q>4vL9d7pQk(oPpERhk4ih5bQHi)V!bas}bY4ZW2J|%L{wE1*)mebXxuxwcm zR_n;!2|!iN96RQqt?e(s@|ev}h}>M6O`F_QSIbzfiB+^(M_9J3hj3UyQ5G>e3Xrb@ zj6w(m%DHq&!ET>1g!BU#95nOhn+{H$YDh4=oE(|DIyW!AC{tK?YYAJeBdl80Lq)|| zE?<`E>nqW>$T|8mpYHB*E?!hvvZRNiqLI4=fWVhumhi?KuP`!FH6eMUQReBV-E7}3 zW3fyM0_ z&1FoZxH!bVeKHjlZVU!FW=m{F(;QsA+Q8nu4*Y)eomIe?^v|C^3{(QSx_bvGEj`H5 zqvuj~ZmV?!o2`ewzF2b{SHiEqrmO@*+N3Yb5Uf z)Qu=kR022%1{*kZXxd6Jq^bHMZ@o3S^j)qd9FC-$lv6|qr&H$n=iQi0iPPbS9~x+A z7~48$41j>&FLCKoy}pAJ^kjpSlr*IM`yTmnY_SCE@GZ8SF8k~vDxTme3x7}F6R@91pY7<)4`TM?$Z`d>Ww z;O9VZOan&Z;>CJeTc=ckVaDdy(vq0G#S*;{%0#opX1mVbz0DYn7hsqF2L~m-_+oPNi*|7{`_ja^b@6Sr97ady z;q&FrjspCC6McPm%KQ?evT}%mf?%BTOq@CuKgKix_~siS!I6!|OqpMz8Rq8)dF(My zoDWF!^u($(jR1c6C8E1-M1O)vQYOtWaY>AN&zS#2#}E!r(XmZ^`RQlw+<(y98#Tnd zybd;O$gKIrkEyaUNLg7E9UY?HiTWp%l}$0KNMln}RdezA9>(X3UURuzVO*}Ov$FM_ zPPDa|IdQ^4TiYM7+yBnaoicWNXg0gTchh@=#2k!@h+ewh_8=zQ!~ZcNBvX)k`CZ|p zDw};-Itw5RAPXQ1APXQ1APXQ1APXQ1;QoyN0-JWSzn$KR6951J07*qoM6N<$g0iL^ ARR910 literal 0 HcmV?d00001 diff --git a/res/rotate-tool.png b/res/rotate-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5cd9d192a3e66a914c23f440970fee5b2edd9a GIT binary patch literal 1680 zcmV;B25Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyV# z0v7_bgM$|U00t0AL_t(|+U1*VY*SSj$N%TFE4Q}W=(f7mIoC}G*oDEsplj4l-HeGE zBw&e#3^XPrW-%s<88HST@dXTi@|$1`gv6ktd=QmD0{Ak;H(U)BvM|P`tgdcdMrT{P z_V|V1=x*=J>FHf7&$ngw-k$&Oc{$HH_guml!;Nfao|{JEVSE<}Vk90$o#aHD!-G1> zX~=-5Q*rc94dSEFNt~DnAe5M3E6bY5%eOxbufwDJd4wkd-oEfL_Fp=NP$I(2#DpqK z8QE}42mCHyUOW-Z#_-wL_p{&t`K~lxhllXoM|o~q?`nsImgs5!t4U48?^HRM{grZieBK{g*PPK>dPJ_`@41uW&c>m8M_%i&XrW_S%ZfgyBZP7D$ zsB(Eu&!N0G+D%pf!1?J*Fj_nS48=lhL;stsNpz$?DoY{QPl&ykL*)@$h_XQw95;;H^OSS*z=1cELATEtTjq%*?U zZn9$kvMuE9g-bO3&Y{2h(0gtVo0^%HjiN+4DGUM?CEjL|u-?^9-nyu)lTA@3f zTS^=8`l3ycsAW#ad3@s6^ZQzQg+QR9#5dV$G4xMpP5|6hzL>bJ)m$^p{S__nyL@w^ zU@{qP^g28c0YMeO)`7iH6Yq6+5R6{LOvVZg0NNJbse3Ur`}y7VtCjkHRR~)L_VNSh ziv)2dI>fXToAKln2MxzS<&45yF}1kYW^2HScS!w3Q`gC?Tdf*T&OV^4=Ay zK~RbU%Hw^xX~tu(N1MY#2>wgiijvZI8?COK1vcB=MCtF@5cEa?)$9FcyIXdSby~`? zYsqHxG^`_al9SX)PV(%nk8Ez^Xiqb3d(*~i>wT}oL$)_<%o+)DaFq1OHbQ-oAl9CK zRo43lTeorb+(wz+u~QM=FC^0&1vFdEWDCV&ux#U$(?#_ZqC)q+mMBmKkgZx4i}%&W zo2id#&HrNYzS?**^_jKizi6AUw@X*`k*ol;G$OfL;PN0|I=dUcM=!D@OM!sEOeoqb zmys9UYq6s24k5qOYqGS5KMtsB;x=QrIG^vXoam zT(wfz%1{UZwS6@`wzlRzJb&Bcq|9u??9CGZu$nCBs_l%3`YkQv*3<}Pc2Bujo#aGM z!#em~KJww{NgNKJLMRbAT5Va_`Pj|(!0+;j?)vlr(9%7L1kuy54gflh%K6N$mh!Hm z3f;7>YANq3s?bgAs+Q`>r(%f$r5$Zevw+^6)nf6!oGz+o6;%vTpyYiyT{K&s6l)ad z-O;9c*V2U?1$w=&2tX+c^c+AiQhZlnC)4A7)mb1LHNB@Wj1r%1CrN2%h^px=ix8g^fLsPF zdWR>MR3jojoSY93qG}8g`Q@k)AVkkHBp;v7<^x2&rdMLbx5GR@^4U)q4xo^Y;s&=H a9>BlJil{=V0t89`0000SetFont(QFont("Arial", 10 * Painter::zoom)); Vector v1((p1.x - p2.x) / 2.0, (p1.y - p2.y) / 2.0); Point ctr = p2 + v1; // This is in pixels, which isn't even remotely correct... !!! FIX !!! diff --git a/src/painter.cpp b/src/painter.cpp index 0dfdf3c..1bb2e6b 100644 --- a/src/painter.cpp +++ b/src/painter.cpp @@ -111,7 +111,7 @@ void Painter::DrawAngledText(Vector center, double angle, QString text) // We may need this stuff... If dimension text is large enough. // int textWidth = QFontMetrics(painter->font()).width(text); // int textHeight = QFontMetrics(painter->font()).height(); - QRectF textBox(-100, -100, 200, 200); // x, y, w, h; x/y = upper left corner + QRectF textBox(-100 * zoom, -100 * zoom, 200 * zoom, 200 * zoom); // x, y, w, h; x/y = upper left corner // This is in pixels. Might not render correctly at all zoom levels. // Need to figure out if dimensions are always rendered at one size regardless of zoom, @@ -213,3 +213,27 @@ void Painter::DrawText(QRectF rect, int type, QString text) painter->drawText(rect, (Qt::AlignmentFlag)type, text); } + +void Painter::DrawArrowhead(Vector head, Vector tail) +{ + QPolygonF arrow; + + // We draw the arrowhead aligned along the line from tail to head + double angle = Vector(head - tail).Angle(); + double orthoAngle = angle + (PI / 2.0); + Vector orthogonal = Vector(cos(orthoAngle), sin(orthoAngle)); + Vector unit = Vector(head - tail).Unit(); + + Point p1 = head - (unit * 9.0); + Point p2 = p1 + (orthogonal * 3.0); + Point p3 = p1 - (orthogonal * 3.0); + + Point p4 = CartesianToQtCoords(head); + Point p5 = CartesianToQtCoords(p2); + Point p6 = CartesianToQtCoords(p3); + + arrow << QPointF(p4.x, p4.y) << QPointF(p5.x, p5.y) << QPointF(p6.x, p6.y); + + painter->drawPolygon(arrow); +} + diff --git a/src/painter.h b/src/painter.h index 52da1d5..ddd6a27 100644 --- a/src/painter.h +++ b/src/painter.h @@ -25,6 +25,7 @@ class Painter void DrawPoint(int, int); void DrawRoundedRect(QRectF, double, double); void DrawText(QRectF, int, QString); + void DrawArrowhead(Vector, Vector); public: static Vector CartesianToQtCoords(Vector); -- 2.37.2