WuerfelDing.vso9BBmBINL|MCVSI WuerfelDing Miscellaneous`(7h9 WuerfelDinggClick to insert.@`@P^x@@_@N@@\@ear Obje" @@@@CCC@@@@  . GMaterialThickness5 LineThickness0.1Length20Depth15Height10 MaxToothWidth4{ /* WrfelDing } PROCEDURE GenerateCube; LABEL 99; CONST MinTeeth = 5; Distance = 2; VAR Thickness:REAL; ThickCut:REAL; Length:INTEGER; Depth:INTEGER; Height:INTEGER; MaxSpace:INTEGER; SaveRandom:INTEGER; PROCEDURE Teethline(StartX, StartY, Size:REAL; Length, MaxSpace, RandomNumber, Direction, Top, Horizontal:INTEGER); VAR cX, cY:REAL; Step:INTEGER; Turn:Integer; Switch:INTEGER; {Direction: 0 for Fliped, 1 for normal Horizontal: 0 for Vertical, 1 for horizontal} BEGIN cX:= StartX; cY:= StartY; Turn:=0; Switch := (RandomNumber Mod 2); If Direction = 0 THEN Switch := -Switch+1; BeginPoly; MoveTo(StartX+(cX-StartX)*Horizontal+(cY-Size*Top-StartY)*(1-Horizontal), StartY+(cY-Size*Top-StartY)*Horizontal-(cX-StartX)*(1-Horizontal)); LineTo(StartX+(cX-StartX)*Horizontal+(cY-Size*Switch-StartY)*(1-Horizontal), StartY+(cY-Size*Switch-StartY)*Horizontal-(cX-StartX)*(1-Horizontal)); Step:=(Round(RandomNumber/Turn) MOD MaxSpace)+1; REPEAT Turn:=Turn+1; cX := cX + Step*Size; LineTo(StartX+(cX-StartX)*Horizontal+(cY-Size*Switch-StartY)*(1-Horizontal), StartY+(cY-Size*Switch-StartY)*Horizontal-(cX-StartX)*(1-Horizontal)); Switch := -Switch+1; LineTo(StartX+(cX-StartX)*Horizontal+(cY-Size*Switch-StartY)*(1-Horizontal), StartY+(cY-Size*Switch-StartY)*Horizontal-(cX-StartX)*(1-Horizontal)); Step:=(Round(RandomNumber/Turn) MOD MaxSpace)+1; UNTIL(cX-StartX+Step*Size>=Length*Size); LineTo(StartX+(StartX+Length*Size-StartX)*Horizontal+(cY-Switch*Size-StartY)*(1-Horizontal), StartY+(cY-Switch*Size-StartY)*Horizontal-(StartX+Length*Size-StartX)*(1-Horizontal)); LineTo(StartX+(StartX+Length*Size-StartX)*Horizontal+(cY-Top*Size-StartY)*(1-Horizontal), StartY+(cY-Top*Size-StartY)*Horizontal-(StartX+Length*Size-StartX)*(1-Horizontal)); EndPoly; END; BEGIN {assign Params} Thickness := PMATERIALTHICKNESS; ThickCut := PLINETHICKNESS; Length := PLENGTH; Depth := PDEPTH; Height := PHEIGHT; MaxSpace := PMAXTOOTHWIDTH; If (Length and top borders --> simple version} OpenPoly; BeginPoly; MoveTo(0,+2*Thickness+ThickCut); LineTo(0,0); LineTo(2*Thickness+ThickCut, 0); LineTo(2*Thickness+ThickCut, Thickness); LineTo((Length-2)*Thickness-ThickCut, Thickness); LineTo((Length-2)*Thickness-ThickCut,0); LineTo(Length*Thickness,0); LineTo(Length*Thickness, 2*Thickness+ThickCut);LineTo((Length-1)*Thickness, 2*Thickness+ThickCut);LineTo((Length-1)*Thickness, (Depth-2)*Thickness-ThickCut); LineTo(Length*Thickness,(Depth-2)*Thickness-ThickCut); LineTo(Length*Thickness,Depth*Thickness); LineTo((Length-2)*Thickness-ThickCut, Depth*Thickness); LineTo((Length-2)*Thickness-ThickCut, (Depth-1)*Thickness); LineTo(2*Thickness+ThickCut, (Depth-1)*Thickness); LineTo(2*Thickness+ThickCut,Depth*Thickness); LineTo(0,Depth*Thickness); LineTo(0, (Depth-2)*Thickness-ThickCut);LineTo(Thickness, (Depth-2)*Thickness-ThickCut); LineTo(Thickness, 2*Thickness+ThickCut); LineTo(0, 2*Thickness+ThickCut); EndPoly; BeginPoly; MoveTo(0,+2*Thickness+(Depth+Distance)*Thickness+ThickCut); LineTo(0,0+(Depth+Distance)*Thickness); LineTo(2*Thickness+ThickCut, 0+(Depth+Distance)*Thickness); LineTo(2*Thickness+ThickCut, Thickness+(Depth+Distance)*Thickness); LineTo((Length-2)*Thickness-ThickCut, Thickness+(Depth+Distance)*Thickness); LineTo((Length-2)*Thickness-ThickCut,0+(Depth+Distance)*Thickness); LineTo(Length*Thickness,0+(Depth+Distance)*Thickness); LineTo(Length*Thickness, 2*Thickness+(Depth+Distance)*Thickness+ThickCut);LineTo((Length-1)*Thickness, 2*Thickness+(Depth+Distance)*Thickness+ThickCut);LineTo((Length-1)*Thickness, (Depth-2)*Thickness+(Depth+Distance)*Thickness-ThickCut); LineTo(Length*Thickness,(Depth-2)*Thickness+(Depth+Distance)*Thickness-ThickCut); LineTo(Length*Thickness,Depth*Thickness+(Depth+Distance)*Thickness); LineTo((Length-2)*Thickness-ThickCut, Depth*Thickness+(Depth+Distance)*Thickness); LineTo((Length-2)*Thickness-ThickCut, (Depth-1)*Thickness+(Depth+Distance)*Thickness); LineTo(2*Thickness+ThickCut, (Depth-1)*Thickness+(Depth+Distance)*Thickness); LineTo(2*Thickness+ThickCut,Depth*Thickness+(Depth+Distance)*Thickness); LineTo(0,Depth*Thickness+(Depth+Distance)*Thickness); LineTo(0, (Depth-2)*Thickness+(Depth+Distance)*Thickness-ThickCut);LineTo(Thickness, (Depth-2)*Thickness+(Depth+Distance)*Thickness-ThickCut); LineTo(Thickness, 2*Thickness+(Depth+Distance)*Thickness+ThickCut); LineTo(0, 2*Thickness+(Depth+Distance)*Thickness+ThickCut); EndPoly; BeginPoly; MoveTo(Thickness,Thickness+(Depth+Distance)*Thickness*2); LineTo(2*Thickness, Thickness+(Depth+Distance)*Thickness*2);LineTo(2*Thickness, 0+(Depth+Distance)*Thickness*2); LineTo((Length-2)*Thickness,(Depth+Distance)*Thickness*2); LineTo((Length-2)*Thickness,Thickness+(Depth+Distance)*Thickness*2); LineTo((Length-1)*Thickness, Thickness+(Depth+Distance)*Thickness*2); EndPoly; BeginPoly; MoveTo(Thickness,(Height-1)*Thickness+(Depth+Distance)*Thickness*2); LineTo(2*Thickness, (Height-1)*Thickness+(Depth+Distance)*Thickness*2); LineTo(2*Thickness, (Height)*Thickness+(Depth+Distance)*Thickness*2); LineTo((Length-2)*Thickness,(Height)*Thickness+(Depth+Distance)*Thickness*2); LineTo((Length-2)*Thickness,(Height-1)*Thickness+(Depth+Distance)*Thickness*2); LineTo((Length-1)*Thickness, (Height-1)*Thickness+(Depth+Distance)*Thickness*2); EndPoly; BeginPoly; MoveTo(Thickness,Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo(2*Thickness, Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness);LineTo(2*Thickness, 0+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo((Length-2)*Thickness,(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo((Length-2)*Thickness,Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo((Length-1)*Thickness, Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); EndPoly; BeginPoly; MoveTo(Thickness,(Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo(2*Thickness, (Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo(2*Thickness, (Height)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo((Length-2)*Thickness,(Height)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo((Length-2)*Thickness,(Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); LineTo((Length-1)*Thickness, (Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness); EndPoly; BeginPoly; MoveTo(Thickness,Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo(2*Thickness, Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2);LineTo(2*Thickness, 0+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo((Depth-2)*Thickness,(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo((Depth-2)*Thickness,Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo((Depth-1)*Thickness, Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); EndPoly; BeginPoly; MoveTo(Thickness,(Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo(2*Thickness, (Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo(2*Thickness, (Height)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo((Depth-2)*Thickness,(Height)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo((Depth-2)*Thickness,(Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); LineTo((Depth-1)*Thickness, (Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*2); EndPoly; BeginPoly; MoveTo(Thickness,Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo(2*Thickness, Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3);LineTo(2*Thickness, 0+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo((Depth-2)*Thickness,(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo((Depth-2)*Thickness,Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo((Depth-1)*Thickness, Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); EndPoly; BeginPoly; MoveTo(Thickness,(Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo(2*Thickness, (Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo(2*Thickness, (Height)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo((Depth-2)*Thickness,(Height)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo((Depth-2)*Thickness,(Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); LineTo((Depth-1)*Thickness, (Height-1)*Thickness+(Depth+Distance)*Thickness*2+(Height+Distance)*Thickness*3); EndPoly; {DrawBorders} {SideBorders} SaveRandom:= Round(Random*2^15-1); Teethline(Thickness, (Depth*2+Height+Distance*2-1)*Thickness, Thickness, Height-2, MaxSpace, SaveRandom, 1,0, 0); Teethline((Depth)*Thickness, (Depth*2+Height*3+Distance*4-1)*Thickness, Thickness, Height-2, MaxSpace, SaveRandom, 1,1, 0); SaveRandom:= Round(Random*2^15-1); Teethline(Length*Thickness, (Depth*2+Height+Distance*2-1)*Thickness, Thickness, Height-2, MaxSpace, SaveRandom, 1,1, 0); Teethline(Thickness, (Depth*2+Height*4+Distance*5-1)*Thickness, Thickness, Height-2, MaxSpace, SaveRandom, 1,0, 0); SaveRandom:= Round(Random*2^15-1); Teethline(Thickness, (Depth*2+Height*2+Distance*3-1)*Thickness, Thickness, Height-2, MaxSpace, SaveRandom, 1,0, 0); Teethline((Depth)*Thickness, (Depth*2+Height*4+Distance*5-1)*Thickness, Thickness, Height-2, MaxSpace, SaveRandom, 1,1, 0); SaveRandom:= Round(Random*2^15-1); Teethline(Length*Thickness, (Depth*2+Height*2+Distance*3-1)*Thickness, Thickness, Height-2, MaxSpace, SaveRandom, 1,1, 0); Teethline(Thickness, (Depth*2+Height*3+Distance*4-1)*Thickness, Thickness, Height-2, MaxSpace, SaveRandom, 1,0, 0); {TopBorders/BottomBorders} {simple version} 99:END; RUN(GenerateCube);