%%% rhmtrc_01.lmc %%%% Created by Laurence D. Finston (LDF) Fri Oct 26 23:09:21 CEST 2007 %% $Id: rhmtrc_01.lmc,v 1.4 2007/10/31 13:37:11 lfinsto1 Exp $ %% * (1) Copyright and License. %%%% This file is part of GNU 3DLDF, a package for three-dimensional drawing. %%%% Copyright (C) 2007, 2008 The Free Software Foundation %%%% GNU 3DLDF is free software; you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by %%%% the Free Software Foundation; either version 3 of the License, or %%%% (at your option) any later version. %%%% GNU 3DLDF is distributed in the hope that it will be useful, %%%% but WITHOUT ANY WARRANTY; without even the implied warranty of %%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %%%% GNU General Public License for more details. %%%% You should have received a copy of the GNU General Public License %%%% along with GNU 3DLDF; if not, write to the Free Software %%%% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA %%%% GNU 3DLDF is a GNU package. %%%% It is part of the GNU Project of the %%%% Free Software Foundation %%%% and is published under the GNU General Public License. %%%% See the website http://www.gnu.org %%%% for more information. %%%% GNU 3DLDF is available for downloading from %%%% http://www.gnu.org/software/3dldf/LDF.html. %%%% It is also available from %%%% http://www.dante.de/software/ctan/, the Dante www-server %%%% and from http://wwwuser.gwdg.de/~lfinsto1, %%%% the author's website. %%%% Please send bug reports to lfinsto1@gwdg.de %%%% The mailing list help-3dldf@gnu.org is available for people to %%%% ask other users for help. %%%% The mailing list info-3dldf@gnu.org is for sending %%%% announcements to users. To subscribe to these mailing lists, send an %%%% email with ``subscribe '' as the subject. %%%% The author can be contacted at: %%%% Laurence D. Finston %%%% c/o Free Software Foundation, Inc. %%%% 51 Franklin St, Fifth Floor %%%% Boston, MA 02110-1301 %%%% USA %%%% lfinsto1@gwdg.de %%%% s246794@stud.uni-goettingen.de %% Last updated: October 31, 2007 % * (1) Beginning of 3DLDF code. %% ** (2) Macro `draw_rhombic_triacontahedron_net' %% *** (3) Declaration macro draw_rhombic_triacontahedron_net; %% *** (3) Definition def draw_rhombic_triacontahedron_net {numeric rhombus_side_length, boolean do_half, boolean do_tabs, boolean do_stitch_lines, numeric stitch_divisions, numeric dot_diam} = %% **** (4) Declarations in macro `draw_rhombic_triacontahedron_net' polygon_vector @pv; path_vector @qv; point @center[]; point p[]; point q[]; point @r[]; string @s; pen @dot_pen; @dot_pen := pencircle scaled (dot_diam, dot_diam); %% **** (4) @pv := get_net rhombic_triacontahedron with_rhombus_side_length rhombus_side_length; @qv := get_tabs rhombic_triacontahedron with_rhombus_side_length rhombus_side_length with_stitch_divisions stitch_divisions; %message "size @pv:"; %show size @pv; %message "size @qv:"; %show size @qv; for i = 0 upto size @pv - 1: draw @pv[i]; @s := decimal i; @center[i] := mediate(get_point 0 @pv[i], get_point 2 @pv[i]); label(i, @center[i]); endfor; p0 := get_point 0 @pv0; %% Rhombus 0 points p1 := get_point 1 @pv0; p2 := get_point 2 @pv0; p3 := get_point 3 @pv0; % dotlabel.llft("$p_{0}$", p0); % dotlabel.rt("$p_{1}$", p1); % dotlabel.rt("$p_{2}$", p2); % dotlabel.lft("$p_{3}$", p3); p20 := get_point 0 @pv1; %% Rhombus 1 points p21 := get_point 1 @pv1; p22 := get_point 2 @pv1; p23 := get_point 3 @pv1; if false: dotlabel.ulft("$p_{20}$", p20); dotlabel.rt("$p_{21}$", p21); dotlabel.rt("$p_{22}$", p22); dotlabel.lft("$p_{23}$", p23); fi; p30 := get_point 0 @pv2; %% Rhombus 2 points p31 := get_point 1 @pv2; p32 := get_point 2 @pv2; p33 := get_point 3 @pv2; if false: dotlabel.llft("$p_{30}$", p30); dotlabel.rt("$p_{31}$", p31); dotlabel.bot("$p_{32}$", p32); dotlabel.lft("$p_{33}$", p33); fi; p40 := get_point 0 @pv3; %% Rhombus 3 points p41 := get_point 1 @pv3; p42 := get_point 2 @pv3; p43 := get_point 3 @pv3; if false: dotlabel.urt("$p_{40}$", p40); dotlabel.ulft("$p_{41}$", p41); dotlabel.bot("$p_{42}$", p42); dotlabel.urt("$p_{43}$", p43); fi; p50 := get_point 0 @pv4; %% Rhombus 4 points p51 := get_point 1 @pv4; p52 := get_point 2 @pv4; p53 := get_point 3 @pv4; if false: dotlabel.llft("$p_{50}$", p50); dotlabel.rt("$p_{51}$", p51); dotlabel.rt("$p_{52}$", p52); dotlabel.urt("$p_{53}$", p53); fi; p60 := get_point 0 @pv5; %% Rhombus 5 points p61 := get_point 1 @pv5; p62 := get_point 2 @pv5; p63 := get_point 3 @pv5; if false: dotlabel.lrt("$p_{60}$", p60); dotlabel.lft("$p_{61}$", p61); dotlabel.bot("$p_{62}$", p62); dotlabel.lrt("$p_{63}$", p63); fi; p70 := get_point 0 @pv6; %% Rhombus 6 points p71 := get_point 1 @pv6; p72 := get_point 2 @pv6; p73 := get_point 3 @pv6; if false: dotlabel.lrt("$p_{70}$", p70); dotlabel.lft("$p_{71}$", p71); dotlabel.bot("$p_{72}$", p72); dotlabel.lrt("$p_{73}$", p73); fi; p80 := get_point 0 @pv7; %% Rhombus 7 points p81 := get_point 1 @pv7; p82 := get_point 2 @pv7; p83 := get_point 3 @pv7; if false: dotlabel.urt("$p_{80}$", p80); dotlabel.urt("$p_{81}$", p81); dotlabel.top("$p_{82}$", p82); dotlabel.top("$p_{83}$", p83); fi; p90 := get_point 0 @pv11; %% Rhombus 11 points p91 := get_point 1 @pv11; p92 := get_point 2 @pv11; p93 := get_point 3 @pv11; if false: dotlabel.urt("$p_{90}$", p90); dotlabel.urt("$p_{91}$", p91); dotlabel.top("$p_{92}$", p92); dotlabel.top("$p_{93}$", p93); fi; p100 := get_point 0 @pv12; %% Rhombus 12 points p101 := get_point 1 @pv12; p102 := get_point 2 @pv12; p103 := get_point 3 @pv12; if false: dotlabel.urt("$p_{100}$", p100); dotlabel.urt("$p_{101}$", p101); dotlabel.top("$p_{102}$", p102); dotlabel.top("$p_{103}$", p103); fi; p110 := get_point 0 @pv18; %% Rhombus 18 points p111 := get_point 1 @pv18; p112 := get_point 2 @pv18; p113 := get_point 3 @pv18; if false: dotlabel.urt("$p_{110}$", p110); dotlabel.urt("$p_{111}$", p111); dotlabel.top("$p_{112}$", p112); dotlabel.top("$p_{113}$", p113); fi; p120 := get_point 0 @pv24; %% Rhombus 24 points p121 := get_point 1 @pv24; p122 := get_point 2 @pv24; p123 := get_point 3 @pv24; if false: dotlabel.urt("$p_{120}$", p120); dotlabel.urt("$p_{121}$", p121); dotlabel.top("$p_{122}$", p122); dotlabel.top("$p_{123}$", p123); fi; p130 := get_point 0 @pv25; %% Rhombus 25 points p131 := get_point 1 @pv25; p132 := get_point 2 @pv25; p133 := get_point 3 @pv25; if false: dotlabel.llft("$p_{130}$", p130); dotlabel.llft("$p_{131}$", p131); dotlabel.bot("$p_{132}$", p132); dotlabel.bot("$p_{133}$", p133); fi; p140 := get_point 0 @pv27; %% Rhombus 27 points p141 := get_point 1 @pv27; p142 := get_point 2 @pv27; p143 := get_point 3 @pv27; if false: dotlabel.llft("$p_{140}$", p140); dotlabel.llft("$p_{141}$", p141); dotlabel.bot("$p_{142}$", p142); dotlabel.bot("$p_{143}$", p143); fi; p150 := get_point 0 @pv28; %% Rhombus 28 points p151 := get_point 1 @pv28; p152 := get_point 2 @pv28; p153 := get_point 3 @pv28; if false: dotlabel.ulft("$p_{150}$", p150); dotlabel.ulft("$p_{151}$", p151); dotlabel.top("$p_{152}$", p152); dotlabel.top("$p_{153}$", p153); fi; p160 := get_point 0 @pv29; %% Rhombus 29 points p161 := get_point 1 @pv29; p162 := get_point 2 @pv29; p163 := get_point 3 @pv29; if false: dotlabel.ulft("$p_{160}$", p160); dotlabel.ulft("$p_{161}$", p161); dotlabel.top("$p_{162}$", p162); dotlabel.top("$p_{163}$", p163); fi; %% **** (4) Tabs and stitch lines p4 := get_point 0 @qv0; p7 := get_point 1 @qv0; p9 := get_point 2 @qv0; p5 := get_last_point @qv0; if false: dotlabel.lft("$p_{4}$", p4); dotlabel.lft("$p_{5}$", p5); dotlabel.rt("$p_{7}$", p7); dotlabel.rt("$p_{9}$", p9); fi; p14 := get_point 1 @qv[size @qv / 2]; p15 := get_last_point @qv[size @qv / 2]; if false: dotlabel.lft("$p_{14}$", p14); dotlabel.ulft("$p_{15}$", p15); fi; p26 := get_point 0 @qv2; if false: dotlabel.rt("$p_{26}$", p26); fi; if do_stitch_lines: for i = 0 upto size @qv / 2 - 1: draw @qv[i]; % with_color red; endfor; for i = size @qv / 2 upto size @qv - 1: @s := decimal i - size @qv / 2; draw @qv[i]; % with_color green; for j = 0 upto size @qv[i] - 1: drawdot get_point (j) @qv[i] with_pen @dot_pen; endfor; if false: label(@s, mediate(get_point 0 @qv[i], get_last_point @qv[i])); fi; endfor; else: for i = 0 upto size @qv - 1: draw @qv[i]; % with_color red; endfor; fi; %filldraw @pv3; %filldraw @pv8; %filldraw @pv9; if do_stitch_lines: draw @qv8; % with_color red; draw @qv[size @qv / 2 + 8]; % with_color green; for j = 1 upto size @qv[size @qv / 2 + 8] - 1: drawdot get_point (j) @qv[size @qv / 2 + 8] with_pen @dot_pen; endfor; fi; %dotlabel.bot(0, @pv4) with_text_color red; %dotlabel.top(0, @pv9) with_text_color blue; %% **** (4) enddef; %% *** (3) endinput; %% ** (2) End of GNU 3DLDF code %% * (1) Emacs-Lisp code for use in indirect buffers when using the %% GNU Emacs editor. The local variable list is not evaluated when an %% indirect buffer is visited, so it's necessary to evaluate the %% following s-expression in order to use the facilities normally %% accessed via the local variables list. %% \initials{LDF 2004.02.12}. %% (progn (metafont-mode) (outline-minor-mode t) (setq fill-column 80)) %% * (1) Local variables for Emacs. %% Local Variables: %% mode:Metafont %% eval:(outline-minor-mode t) %% eval:(read-abbrev-file abbrev-file-name) %% outline-regexp:"%% [*\f]+" %% End: