\documentclass[portrait]{article}
\usepackage{tikz}
\usepackage{ifthen}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_eq:NN \Repeat \prg_replicate:nn
\ExplSyntaxOff
\usetikzlibrary{calc}
%\usepackage[textwidth=30.4cm,textheight=60.7cm,paperheight=60.9cm,paperwidth=30.4cm,centering]{geometry}
\usepackage[textwidth=40.4cm,textheight=60.7cm,paperheight=40.9cm,paperwidth=70.4cm,centering]{geometry}

% arguments for ntooth:  start, s, d, x, y, n, e
% all of these are supposed to be tikz coordinates
%% explanation for the ntooth macro
%%        xxxxxx      xxxxxx      xxxxxx
%%        d    d      d    d      d    d
%%        d    d      d    d      d    d
%%        d    d      d    d      d    d
%% ssssssss    yyyyyyyy    yyyyyyyy    eeee
%% where n is the number of times y is used, in this case 2
\newcommand{\ntooth}[7]{%
  %\pgftruncatemathmacro{\tmpNRep}{#6}
  \draw #1 -- ++ #2 -- ++ #3 -- ++ #4 -- ++ ($ (0,0) - #3 $) 
  \Repeat{#6}{ -- ++ #5 -- ++ #3 -- ++ #4 -- ++ ($ (0,0) - #3 $) }
  -- ++ #7 ;
}

%% same as ntooth, but e designates the end point, and not a delta.
\newcommand{\ntoothToEnd}[7]{%
%  \pgftruncatemathmacro{\tmpNRep}{#6}
  \draw #1 -- ++ #2 -- ++ #3 -- ++ #4 -- ++ ($ (0,0) - #3 $) 
  \Repeat{#6}{ -- ++ #5 -- ++ #3 -- ++ #4 -- ++ ($ (0,0) - #3 $) }
  -- #7 ;
}

% arguments for onetooth: start, s, d, x, e
% all of these are supposed to be tikz coordinates
%% explanation for the onetooth macro
%%        xxxxxx
%%        d    d
%%        d    d
%%        d    d
%% ssssssss    eeee
\newcommand{\onetooth}[5]{%
  \ntooth{#1}{#2}{#3}{#4}{#4}{0}{#5}
}

%% same as onetooth, but e designates the end point, and not a delta.
\newcommand{\onetoothToEnd}[5]{%
  \ntoothToEnd{#1}{#2}{#3}{#4}{#4}{0}{#5}
}


\newcommand{\saegelinieX}[4]{%
%  \pgfmathtruncatemacro{\tmpdiv}{#4}
  \ntooth{#1}{(#2,0)}{(0,#3)}{(#2,0)}{(#2,0)}{#4}{(#2,0)}
}

% startpunkt, dy, dx, nrep
\newcommand{\saegelinieY}[4]{%
%  \pgfmathtruncatemacro{\tmpdiv}{#4}
  \ntooth{#1}{(0,#2)}{(#3,0)}{(0,#2)}{(0,#2)}{#4}{(0,#2)}
}

\begin{document}

\begin{tikzpicture}[x=1mm,y=1mm,trim left]

\newcommand{\breite}{300}%
\newcommand{\laenge}{220}%
\newcommand{\hoehe}{42}%
\newcommand{\plattendicke}{4}%
\newcommand{\zahndurchmesser}{20}%
\newcommand{\hzahndurchmesser}{10}%
\newcommand{\teilabstand}{1}%
% vorderer Deckel
\pgfmathsetmacro{\deckelLaenge}{40 + \plattendicke}
\pgfmathsetmacro{\rechterhilfsstegLaenge}{\deckelLaenge + 10}
% quersteg
\newcommand{\stegBisHinten}{72}
\newcommand{\stegHoehe}{30}
% hinterer laengssteg
\newcommand{\linksbishintererlaengssteg}{137}
% vorderer laengssteg
\newcommand{\linksbisvordererlaengssteg}{110}
\pgfmathsetmacro{\vordererLaengsstegLaenge}{\laenge - 3 * \plattendicke - \stegBisHinten}
% vorderer hilfslaengssteg
\newcommand{\rechtsbisvordererhilfslaengssteg}{40}
\pgfmathsetmacro{\zweiterLaengsstegObenZahn}{(\deckelLaenge - \plattendicke)/3}
% quersteg
\pgfmathsetmacro{\stegwandzahnlaenge}{\stegHoehe / 3}
\newcommand{\quersteguntenzahnabstand}{45}
\newcommand{\tastaturbreite}{282}
\newcommand{\tastaturlaenge}{132}
\pgfmathsetmacro{\aussenbistastatur}{(\breite-\tastaturbreite)/2}

\pgfmathtruncatemacro{\diva}{\breite / (2 * \zahndurchmesser) - 1}
\pgfmathtruncatemacro{\divb}{\laenge / (2 * \zahndurchmesser) - 1}
\pgfmathtruncatemacro{\divc}{\hoehe  / (2 * \hzahndurchmesser) - 1}

%\tikzset{drehung/.style={rotate=90, yscale=-1}}
\tikzset{drehung/.style={}}

% ecken fuer die einzelnen teile
\coordinate (BASE) at (-4,0);
\coordinate (TOPLEFT) at ($(BASE)+(302,525)$);
%\draw (BASE) rectangle (TOPLEFT); 
\draw ($(BASE) + (5,0)$) -| ($(BASE) + (0,5)$);
\draw ($(TOPLEFT) + (-5,0)$) -| ($(TOPLEFT) + (0,-5)$);

\newcommand{\partCorners}[4]{%
  \coordinate (#11) at #2;
  \coordinate (#12) at ($(#11) + (#3 , 0)$);
  \coordinate (#13) at ($(#12) + (0, #4)$);
  \coordinate (#14) at ($(#11) + (0, #4)$);
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ecken festlegen
% vorne
\partCorners{V}{($(BASE) + (1,1)$)}{\breite}{\hoehe}

%unten
\partCorners{U}{($(V4) + (0,2)$)}{\breite}{\laenge}

%hinten
\partCorners{H}{($(U4)+(0,2)$)}{\breite}{\hoehe}

% quersteg
\partCorners{QS}{($(H4) + (0,2)$)}{\breite}{\stegHoehe+\plattendicke}

% deckplatte
\partCorners{O}{($(QS4) + (0,2) $)}{\breite}{\deckelLaenge}

\begin{scope}[drehung]

%links
\partCorners{L}{($(O4) + (2,2)$)}{\hoehe}{\laenge}
%rechts
\partCorners{R}{($(L2) + (2,0)$)}{\hoehe}{\laenge}

% vorderer laengssteg
%\partCorners{VLS}{($(R2) + (2,0)$)}{\stegHoehe + \plattendicke}{\vordererLaengsstegLaenge + 2 * \plattendicke}
\partCorners{VLS}{($(R2) + (2,0)$)}{\hoehe}{\vordererLaengsstegLaenge + 2 * \plattendicke}

% hinterer laengssteg
\partCorners{HLS}{($(VLS4) + (0,2)$)}{\stegHoehe + \plattendicke}{\stegBisHinten + 2 * \plattendicke}

% 2. vorderer laengssteg
\partCorners{VHLS}{($(L4) + (0,2)$)}{\hoehe}{\rechterhilfsstegLaenge}

\end{scope}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% loecher

% lücken für quersteg unten
\coordinate (QSULH) at ($(U4) +  (\plattendicke,-\plattendicke-\stegBisHinten) + (\quersteguntenzahnabstand/2+3,0)$);
\draw (QSULH) rectangle +(\stegwandzahnlaenge,-\plattendicke)
\Repeat{4}{  ++(\quersteguntenzahnabstand+\stegwandzahnlaenge,0) rectangle +(\stegwandzahnlaenge,-\plattendicke)}
;

% luecke fuer rechten vorderen hilfssteg in oberer platte
\draw ($(O3) + (-\plattendicke - \rechtsbisvordererhilfslaengssteg,-\zweiterLaengsstegObenZahn)$)
   rectangle
      ++ (-\plattendicke, -\zweiterLaengsstegObenZahn);

% luecke fuer linken vorderen hilfssteg in oberer platte
\draw ($(O1) + (\plattendicke + \linksbisvordererlaengssteg, \zweiterLaengsstegObenZahn)$)
   rectangle
      ++ (\plattendicke, \zweiterLaengsstegObenZahn);

% lücke vorne für vorderen laengssteg
\draw ($(V4) + (\plattendicke + \linksbisvordererlaengssteg, - \plattendicke - \stegwandzahnlaenge)$) 
      rectangle 
      ($(V4) + (\plattendicke + \linksbisvordererlaengssteg + \plattendicke, - \plattendicke - \stegwandzahnlaenge - \stegwandzahnlaenge)$);

% lücke vorne für 2. vorderen hilfslaengssteg
\draw ($(V3) + (-\plattendicke - \rechtsbisvordererhilfslaengssteg, - \plattendicke - \stegwandzahnlaenge)$) 
      rectangle 
      ++(-\plattendicke,-\stegwandzahnlaenge);
% lücke quersteg für vorderen laengssteg
\draw ($(QS1) + (\plattendicke + \linksbisvordererlaengssteg,  \plattendicke + \stegwandzahnlaenge)$) 
      rectangle 
      ($(QS1) + (\plattendicke + \linksbisvordererlaengssteg + \plattendicke,  \plattendicke + \stegwandzahnlaenge + \stegwandzahnlaenge)$) ;

% lücke hinten für hinteren laengssteg
\draw ($(H1) + (\plattendicke + \linksbishintererlaengssteg,  \plattendicke + \stegwandzahnlaenge)$) 
      rectangle 
      ($(H1) + (\plattendicke + \linksbishintererlaengssteg + \plattendicke, + \plattendicke + \stegwandzahnlaenge + \stegwandzahnlaenge)$);

% lücke quersteg für hinteren längssteg
\draw ($(QS1) + (\plattendicke + \linksbishintererlaengssteg,  \plattendicke + \stegwandzahnlaenge)$) 
      rectangle 
      ($(QS1) + (\plattendicke + \linksbishintererlaengssteg + \plattendicke,  \plattendicke + \stegwandzahnlaenge + \stegwandzahnlaenge)$) ;

% lücken unten für hinteren längssteg
\draw ($(U4) + (\linksbishintererlaengssteg + \plattendicke, -\plattendicke - 10)$)
      rectangle
      ($(U4) + (\linksbishintererlaengssteg + \plattendicke + \plattendicke, -\plattendicke - 20)$);

\draw ($(U4) + (\linksbishintererlaengssteg + \plattendicke, -\plattendicke - 50)$)
      rectangle
      ($(U4) + (\linksbishintererlaengssteg + \plattendicke + \plattendicke, -\plattendicke - 60)$);

% lücken unten für vorderen längssteg
\draw ($(U1) + (\linksbisvordererlaengssteg + \plattendicke, \plattendicke + 30)$)
      rectangle + (\plattendicke, 10)
      ++(0,40) rectangle  +(\plattendicke, 10)
      ++(0,40) rectangle  +(\plattendicke, 10)
;

% lücken unten für vorderen rechten hilfslaengssteg
\draw ($(U2) + (-\rechtsbisvordererhilfslaengssteg-\plattendicke,\rechterhilfsstegLaenge)$)
   rectangle
   ++(-\plattendicke,-\zweiterLaengsstegObenZahn);

\draw ($(U4) + (\linksbishintererlaengssteg + \plattendicke, -\plattendicke - 50)$)
      rectangle
      ($(U4) + (\linksbishintererlaengssteg + \plattendicke + \plattendicke, -\plattendicke - 60)$);

\begin{scope}[drehung]
% loch in linker wand fuer quersteg 
\draw ($(L3) - (\plattendicke+\stegwandzahnlaenge,\plattendicke+\stegBisHinten)$) rectangle +(-\stegwandzahnlaenge,-\plattendicke);

% loch in rechter wand fuer quersteg
\draw ($(R4) + (\plattendicke+\stegwandzahnlaenge,-\plattendicke-\stegBisHinten)$) rectangle +(\stegwandzahnlaenge,-\plattendicke);

% loecher im vorderen linken laengssteg wg usb hub
\draw ($(VLS2)+(-12,50)$) rectangle +(-14,30);
\draw ($(VLS2)+(-12,100)$) rectangle +(-14,30);

\draw ($(VLS3) + (-10-\plattendicke,-75)$) rectangle +(-10,-10);

% loecher in linker wand wg usb hub
\draw ($(L2) + (-12-\plattendicke,50)$) rectangle +(-14,30);
\draw ($(L2) + (-12-\plattendicke,100)$) rectangle +(-14,30);

\end{scope}

% fuer hdmi-anschluss: 5cm abstand vom rechten rand, lochgröße 1.1cm hoch x 2.2cm breit
\coordinate (HDMISTART) at ($(QS2) + (-\plattendicke -50, \plattendicke + 5)$);
\draw (HDMISTART) rectangle ($(HDMISTART) + (-22, 11)$);
% Loch für dummen composite-eingang
\draw ($(HDMISTART) + (-11,6.5) + (49,5)$)  circle(5mm);
% loch im quersteg wg stromversorgung displayunit
\draw ($(HDMISTART) + (-28, 0)$) rectangle +(-22, 11);
%% \draw (HDMISTART) ++(-40,5) circle(4mm);

% fuer stromkabel aussen: 6.2cm abstand vom linken rand, 1 cm abstand von boden, 1.2cm breit, 1 cm hoch
\coordinate (STROMAUSSEN) at ($(H1) + (\plattendicke + 62, \plattendicke + 10)$);
\draw (STROMAUSSEN) rectangle ($(STROMAUSSEN) + (12, 11)$);

% fuer stromanschluss innen: 6 cm abstand vom linken rand, 0 abstand von boden, 1.8cm breit, 1.8 cm hoch
\coordinate (STROMINNEN) at ($(QS1) + (\plattendicke + 60, \plattendicke)$);
\draw (STROMINNEN) rectangle ($(STROMINNEN) + (18, 18)$);

% loch im quersteg oben wegen tastaturkabel
\draw ($(QS3)+(-100,0)$) rectangle +(-6,-6);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% raender zeichnen
% unten
\saegelinieX{(U1)}{\zahndurchmesser}{\plattendicke}{\diva}
\saegelinieX{(U4)}{\zahndurchmesser}{-\plattendicke}{\diva}
\saegelinieY{(U1)}{\zahndurchmesser}{\plattendicke}{\divb}
\saegelinieY{(U2)}{\zahndurchmesser}{-\plattendicke}{\divb}

% vorne
\saegelinieX{(V4) ++(0,-\plattendicke)}{\zahndurchmesser}{\plattendicke}{\diva}
\ntoothToEnd{(V4) ++(0,-\plattendicke)}{(0,-\hzahndurchmesser+\plattendicke)}
       {(\plattendicke,0)}{(0,-\hzahndurchmesser)}{(0,-\hzahndurchmesser)}{\divc}{(V1)}
\ntoothToEnd{(V3) ++(0,-\plattendicke)}{(0,-\hzahndurchmesser+\plattendicke)}
       {(-\plattendicke,0)}{(0,-\hzahndurchmesser)}{(0,-\hzahndurchmesser)}{\divc}{(V2)}
\saegelinieX{(V1)}{\zahndurchmesser}{\plattendicke}{\diva}
%\draw (V1) -- (V2);

% hinten
\saegelinieX{(H1) ++(0,\plattendicke)}{\zahndurchmesser}{-\plattendicke}{\diva}
%% \saegelinieY{(H1)}{\hzahndurchmesser}{\plattendicke}{\divc}
%% \saegelinieY{(H2)}{\hzahndurchmesser}{-\plattendicke}{\divc}
\ntoothToEnd{(H1) ++(0,\plattendicke)}{(0,\hzahndurchmesser-\plattendicke)}
       {(\plattendicke,0)}{(0,\hzahndurchmesser)}{(0,\hzahndurchmesser)}{1}{(H4)}
\ntoothToEnd{(H2) ++(0,\plattendicke)}{(0,\hzahndurchmesser-\plattendicke)}
       {(-\plattendicke,0)}{(0,\hzahndurchmesser)}{(0,\hzahndurchmesser)}{1}{(H3)}
\draw (H4) -- (H3);

%debugging... \node at (BASE) {ih: \innenHoehe};

% oben
\pgfmathsetmacro{\deckplattenaussenzahnlaenge}{\deckelLaenge / 2 - \plattendicke}
\ntoothToEnd{(O1) ++(\plattendicke,\plattendicke)}{(\zahndurchmesser - \plattendicke,0)}
   {(0,-\plattendicke)}{(\zahndurchmesser,0)}{(\zahndurchmesser,0)}{\diva}
   {($(O2) +(-\plattendicke,\plattendicke) $)}
\draw (O1) ++ (\plattendicke,\plattendicke) -- ++(0,\deckelLaenge / 2) -- ++(-\plattendicke,0) 
    -- ($(O4)$);
\draw (O2) ++ (-\plattendicke,\plattendicke) -- ++(0,\deckelLaenge / 2) -- ++(\plattendicke,0) 
    -- ($(O3)$);
\draw (O4) -- ++(\aussenbistastatur,0) -- ++ (0,-5) --($(O3)-(\aussenbistastatur,5)$) 
  -- ++(0,5) -- (O3);

% quersteg
\saegelinieY{($(QS1)+( \plattendicke,\plattendicke)$)}{\stegwandzahnlaenge}{-\plattendicke}{0}
\saegelinieY{($(QS2)+(-\plattendicke,\plattendicke)$)}{\stegwandzahnlaenge}{\plattendicke}{0}
\draw ($(QS3) + (-\plattendicke,0) $) -- ($(QS4) + (\plattendicke,0) $);
\ntoothToEnd{($(QS1) + (\plattendicke,\plattendicke) $)}{(\quersteguntenzahnabstand/2+3,0)}
            {(0,-\plattendicke)}{ (\stegwandzahnlaenge,0)}{ (\quersteguntenzahnabstand,0)}{4}
            {($(QS2) + (-\plattendicke,\plattendicke) $)}

\begin{scope}[drehung]

\draw (VHLS3) 
  -- ++(-\stegHoehe-\plattendicke,0) 
  -- ($(VHLS2) + (-\stegHoehe-\plattendicke,\deckelLaenge)$) 
  -- ++(-\hoehe + 2 * \plattendicke + \stegHoehe,0)
  -- ++(0,-\zweiterLaengsstegObenZahn)
  -- ++(-\plattendicke,0)
  -- ++(0,-\zweiterLaengsstegObenZahn)
  -- ++(\plattendicke,0)
  -- ($(VHLS1) + (\plattendicke,\plattendicke)$);

\draw ($(VHLS1) + (\plattendicke,\plattendicke)$) 
  -- ($(VHLS2) + (-\plattendicke-2*\stegwandzahnlaenge,\plattendicke)$)
  -- ++(0,-\plattendicke)
  -- ++(\stegwandzahnlaenge,0)
  -- ++(0,\plattendicke)
  -- ($(VHLS2) + (-\plattendicke,\plattendicke)$)
  -- ($(VHLS3) + (-\plattendicke,-\zweiterLaengsstegObenZahn)$)
  -- ++(\plattendicke,0) -- (VHLS3);

% hinterer Deckel

%% \partCorners{HO}{($(VHLS4) + (0,2)$)}{30}{40}
%% \fill (HO1) circle (1mm);
%% \fill (HO2) circle (1mm);
%% \fill (HO3) circle (1mm);
%% \fill (HO4) circle (1mm);

% rechts
\ntoothToEnd{($(R1)+(\plattendicke,\plattendicke)$)}{(0,\zahndurchmesser-\plattendicke)}
            {(-\plattendicke,0)}{(0,\zahndurchmesser)}{(0,\zahndurchmesser)}{\divb}
            {($(R4)+(\plattendicke,-\plattendicke)$)}
\ntoothToEnd{($(R1)+(\plattendicke,\plattendicke)$)}{(\hzahndurchmesser-\plattendicke,0)}
            {(0,-\plattendicke)}{(\hzahndurchmesser,0)}{(\hzahndurchmesser,0)}{\divc}
            {($(R2)+(0,\plattendicke)$)}
\ntoothToEnd{($(R4)+(\plattendicke,-\plattendicke)$)}{(\hzahndurchmesser-\plattendicke,0)}
            {(0,\plattendicke)}{(\hzahndurchmesser,0)}{(\hzahndurchmesser,0)}{\divc}
            {($(R3)+(0,-\plattendicke)$)}
\draw ($(R2)+(0,\plattendicke)$) 
  -- ++(0,\deckelLaenge / 2)
  -- ++(-\plattendicke,0)
  -- ++(0,\deckplattenaussenzahnlaenge)
  -- ++(\plattendicke,0)  
  -- ($(R3)+(0,-\plattendicke)$);

% links
\ntoothToEnd{($(L2)+(-\plattendicke,\plattendicke)$)}{(0,\zahndurchmesser-\plattendicke)}
            {(\plattendicke,0)}{(0,\zahndurchmesser)}{(0,\zahndurchmesser)}{\divb}
            {($(L3)+(-\plattendicke,-\plattendicke)$)}
\ntoothToEnd{($(L2)+(-\plattendicke,\plattendicke)$)}{(-\hzahndurchmesser+\plattendicke,0)}
            {(0,-\plattendicke)}{(-\hzahndurchmesser,0)}{(-\hzahndurchmesser,0)}{\divc}
            {($(L1)+(0,\plattendicke)$)}
\ntoothToEnd{($(L3)+(-\plattendicke,-\plattendicke)$)}{(-\hzahndurchmesser+\plattendicke,0)}
            {(0,\plattendicke)}{(-\hzahndurchmesser,0)}{(-\hzahndurchmesser,0)}{\divc}
            {($(L4)+(0,-\plattendicke)$)}
\draw ($(L1)+(0,\plattendicke)$) 
  -- ++(0,\deckelLaenge / 2)
  -- ++(\plattendicke,0)
  -- ++(0,\deckplattenaussenzahnlaenge)
  -- ++(-\plattendicke,0)  
  -- ($(L4)+(0,-\plattendicke)$);

% vorderer laengssteg
\ntoothToEnd{($(VLS2) + (-\plattendicke, \plattendicke)$)}{(0,30)}
            {(\plattendicke,0)}{(0,10)}{(0,30)}{2}{($(VLS3) + (-\plattendicke, -\plattendicke) $)}
\onetoothToEnd{($(VLS2) + (-\plattendicke,\plattendicke) $)}{(-\stegwandzahnlaenge,0)}{(0,-\plattendicke)}
         {(-\stegwandzahnlaenge,0)}{($(VLS1) + (\plattendicke,\plattendicke)$)}

\onetooth{($(VLS3) + (-\plattendicke,-\plattendicke) $)}{(-\stegwandzahnlaenge,0)}{(0,\plattendicke)}
         {(-\stegwandzahnlaenge,0)}{(-\stegwandzahnlaenge,0)}

\draw ($(VLS1) + (\plattendicke,\plattendicke)$) 
  -- ++(0,\zweiterLaengsstegObenZahn)
  -- ++(-\plattendicke,0)
  -- ++(0,\zweiterLaengsstegObenZahn)
  -- ++(\plattendicke,0)
  -- ++(0,\zweiterLaengsstegObenZahn)
  -- ++(\plattendicke,0)
  -- ($(VLS3) + (-\plattendicke - 3*\stegwandzahnlaenge,-\plattendicke) $)
  ;


% hinterer laengssteg
\draw ($(HLS1) + (0 ,\plattendicke) $) -- ($(HLS4) + (0, - \plattendicke)$);
\ntoothToEnd{($(HLS3) + (-\plattendicke,- \plattendicke)$)}{(0,-10)}
            {(\plattendicke,0)}{(0,-10)}{(0,-30)}{1}{($(HLS2) + (-\plattendicke, \plattendicke) $)}
\onetooth{($(HLS1) + (0,\plattendicke) $)}{(\stegwandzahnlaenge,0)}{(0,-\plattendicke)}
         {(\stegwandzahnlaenge,0)}{(\stegwandzahnlaenge,0)}
\onetooth{($(HLS4) + (0,-\plattendicke) $)}{(\stegwandzahnlaenge,0)}{(0,\plattendicke)}
         {(\stegwandzahnlaenge,0)}{(\stegwandzahnlaenge,0)}

\end{scope}


\end{tikzpicture}

\end{document}
