Changeset 27
- Timestamp:
- 05/18/08 17:08:39 (7 months ago)
- Files:
-
- trunk/pst-solides3d.tex (modified) (5 diffs)
- trunk/solides.pro (modified) (17 diffs)
- trunk/tests/index.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/pst-solides3d.tex
r25 r27 11 11 \ifx\MultidoLoaded\endinput\else\input multido.tex \fi 12 12 % JPV & ML & AS 13 \def\fileversion{3.1 1}14 \def\filedate{2008/05/1 0}13 \def\fileversion{3.12} 14 \def\filedate{2008/05/18} 15 15 \message{`PSTSOLIDESIIID' v\fileversion, \filedate} 16 16 % … … 53 53 \define@key[psset]{pst-solides3d}{affinagecoeff}{\def\pst@solides@affinagecoeff{#1}} % coeff de affinage 54 54 \define@key[psset]{pst-solides3d}{dualregcoeff}{\def\pst@solides@dualregcoeff{#1}} % coeff de dual 55 \define@key[psset]{pst-solides3d}{intersectiontype}{\def\pst@solides@intersectiontype{#1}} % 56 % 57 %% les affectations par defaut 58 \psset[pst-solides3d]{R=4,r1=4,r0=1.5,r=2,no=0,a=4,b=a,c=a,h=6,phi=0,theta=90,resolution=36,% 59 trunccoeff=.25,affinagecoeff=.8,dualregcoeff=1,intersectiontype=-1} 55 60 % 56 61 %%%%%%%%%%%%%%%%% variables complexes %%%%%%%%%%%%%%%%% … … 60 65 \define@key[psset]{pst-solides3d}{axe}{\def\pst@solides@axe{#1}} % axe du prisme 61 66 \psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme 62 \psset[pst-solides3d]{R=4,r1=4,r0=1.5,r=2,no=0,a=4,b=a,c=a,h=6,phi=0,theta=90,resolution=36,% 63 trunccoeff=.25,affinagecoeff=.8,dualregcoeff=1} 67 \define@key[psset]{pst-solides3d}{intersectionlinewidth}{\def\pst@solides@intersectionlinewidth{#1}}% 68 \psset[pst-solides3d]{intersectionlinewidth=1}% 69 \define@key[psset]{pst-solides3d}{intersectioncolor}{\def\pst@solides@intersectioncolor{#1}}% 70 \psset[pst-solides3d]{intersectioncolor=(rouge)}% 71 \define@key[psset]{pst-solides3d}{intersectionplan}{\def\pst@solides@intersectionplan{#1}}% 72 \psset[pst-solides3d]{intersectionplan=[0 0 1 0]}% 64 73 \define@key[psset]{pst-solides3d}{hauteurlignedeniveau}{\def\psk@solides@hauteurlignedeniveau{#1}} 65 74 \psset[pst-solides3d]{hauteurlignedeniveau=0}% … … 370 379 /affinagecoeff \pst@solides@affinagecoeff\space def % coeff de affinage 371 380 /dualregcoeff \pst@solides@dualregcoeff\space def % coeff de dual 381 /solidintersectiontype \pst@solides@intersectiontype\space def % type d'intersection 372 382 /section {\pst@solides@section} def % section de l'objet de revolution 373 383 /base [ \pst@solides@base ] def 384 /solidintersectionlinewidth [ \pst@solides@intersectionlinewidth ] def 385 /solidintersectioncolor [ \pst@solides@intersectioncolor ] def 386 /solidintersectionplan [ \pst@solides@intersectionplan ] def 374 387 /axe { \pst@solides@axe } def 375 388 /function (\pst@solides@function) def … … 608 621 \def\codejps#1{{% 609 622 \define@key[psset]{pst-solides3d}{object}{\def\psk@solides@object{#1}} 610 \psSolid[object= #1](0,0,0)}}623 \psSolid[object={#1} exec](0,0,0)}} 611 624 612 625 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% trunk/solides.pro
r26 r27 1 1 %! 2 2 % PostScript prologue for pst-solides3d.tex. 3 % Version 3.1 4, 2008/05/103 % Version 3.15, 2008/05/18 4 4 % 5 5 %% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque … … 1405 1405 %%%%% ### min ### 1406 1406 /min { 1407 2 copy 1408 gt {exch} if 1409 pop 1407 2 dict begin 1408 dup isarray { 1409 duparray /table exch def pop 1410 table 0 get 1411 1 1 table length 1 sub { 1412 /i exch def 1413 table i get 1414 min 1415 } for 1416 } { 1417 2 copy 1418 gt {exch} if 1419 pop 1420 } ifelse 1421 end 1410 1422 } def 1411 1423 … … 2057 2069 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2058 2070 2071 %%%%% ### sortp3d ### 2072 /sortp3d { 2073 6 dict begin 2074 /M1 defpoint3d 2075 /M0 defpoint3d 2076 M1 2077 /z1 exch def 2078 /y1 exch def 2079 /x1 exch def 2080 M0 2081 /z0 exch def 2082 /y0 exch def 2083 /x0 exch def 2084 x0 x1 lt { 2085 M0 M1 2086 } { 2087 x0 x1 gt { 2088 M1 M0 2089 } { 2090 y0 y1 lt { 2091 M0 M1 2092 } { 2093 y0 y1 gt { 2094 M1 M0 2095 } { 2096 z0 z1 lt { 2097 M0 M1 2098 } { 2099 M1 M0 2100 } ifelse 2101 } ifelse 2102 } ifelse 2103 } ifelse 2104 } ifelse 2105 end 2106 } def 2107 2059 2108 %%%%% ### dupp3d ### 2060 2109 %% duplique le vecteur 3d … … 2524 2573 dup xtick 2525 2574 /Courier findfont .8 fontsize mul scalefont setfont 2526 dup chaine cvs exch 2575 dup dup truncate eq { 2576 cvi dup chaine cvs exch 2577 } { 2578 dup chaine cvs exch 2579 } ifelse 2527 2580 Oy xmarkstyle 2528 2581 } def … … 2958 3011 } def 2959 3012 2960 /tracelignedeniveau? false def 2961 /hauteurlignedeniveau 1 def 2962 /couleurlignedeniveau {rouge} def 2963 /linewidthlignedeniveau 4 def 3013 %/solidintersectiontype -1 def 3014 %/solidintersectionlinewidth [1 2] def 3015 %/solidintersectioncolor [(bleu) (rouge)] def 3016 %/solidintersectionplan [[1 0 .5 0] [1 0 .5 -1]] def 3017 3018 %% /tracelignedeniveau? false def 3019 %% /hauteurlignedeniveau 1 def 3020 %% /couleurlignedeniveau {rouge} def 3021 %% /linewidthlignedeniveau 4 def 2964 3022 2965 3023 /solidgrid true def … … 4225 4283 } def 4226 4284 4227 %% syntaxe : A solid i dessinefacecachee4228 /dessinefacecachee {4229 6 dict begin4230 /i exch def4231 /solid exch def4232 solid issolid not {4233 (Error : mauvais type d argument dans dessinefacecachee) ==4234 quit4235 } if4236 /A exch def4237 4238 /F solid solidgetfaces def4239 /S solid solidgetsommets def4240 4241 solid i solidfacevisible? not {4242 %% face cachee => on prend chacune des aretes de la face et on4243 %% regarde si elle est deja dessinee.4244 4 dict begin4245 /n F i get length def %% nb de sommets de la face4246 0 1 n 1 sub {4247 /k exch def4248 /k1 F i k get_ij def %% indice sommet14249 /k2 F i k 1 add n mod get_ij def %% indice sommet24250 A k1 k2 get_ij not {4251 gsave4252 currentlinewidth .5 mul setlinewidth4253 pointilles4254 [S k1 getp3d4255 S k2 getp3d] ligne3d4256 A k1 k2 true put_ij4257 A k2 k1 true put_ij4258 grestore4259 } if4260 } for4261 end4262 } if4263 end4264 } def4265 4266 4285 %% syntaxe : A solid i dessinefacevisible 4267 4286 /dessinefacevisible { … … 4319 4338 } if 4320 4339 } { 4321 % solid F i get length affectecouleursolid_ncotes4322 4340 solid i affectecouleursolid_facei 4323 4341 } ifelse … … 4333 4351 ] def 4334 4352 face_a_dessiner polygone3d 4335 /lignedeniveau [] def4336 4337 %% trace de la ligne de niveau4338 tracelignedeniveau? {4339 gsave4340 linewidthlignedeniveau setlinewidth4341 couleurlignedeniveau4342 0 1 n 1 sub {4343 /j exch def4344 face_a_dessiner j getp3d4345 face_a_dessiner j 1 add n mod getp3d4346 hauteurlignedeniveau segment_inter_planz {4347 1 dict begin4348 /table exch def4349 /lignedeniveau [4350 lignedeniveau aload pop4351 table 0 getp3d4352 table length 4 ge {4353 table 1 getp3d4354 } if4355 ] store4356 end4357 } if4358 } for4359 lignedeniveau length 4 ge4360 {lignedeniveau ligne3d}4361 if4362 grestore4363 } if4364 4353 4365 4354 %% on marque les aretes … … 4373 4362 } for 4374 4363 } if 4364 4365 4366 %% trace de la ligne de niveau 4367 solidintersectiontype 0 ge { 4368 0 1 solidintersectionplan length 1 sub { 4369 /k exch def 4370 /lignedeniveau [] def 4371 gsave 4372 k solidintersectionlinewidth length lt { 4373 solidintersectionlinewidth k get setlinewidth 4374 } { 4375 solidintersectionlinewidth 0 get setlinewidth 4376 } ifelse 4377 k solidintersectioncolor length lt { 4378 solidintersectioncolor k get cvx exec 4379 } { 4380 solidintersectioncolor 0 get cvx exec 4381 } ifelse 4382 0 1 n 1 sub { 4383 /j exch def 4384 face_a_dessiner j getp3d 4385 face_a_dessiner j 1 add n mod getp3d 4386 solidintersectionplan k get segment_inter_plan { 4387 1 dict begin 4388 /table exch def 4389 /lignedeniveau [ 4390 lignedeniveau aload pop 4391 table 0 getp3d 4392 table length 4 ge { 4393 table 1 getp3d 4394 } if 4395 ] store 4396 end 4397 } if 4398 } for 4399 4400 %% dessin de la ligne 4401 lignedeniveau length 4 ge { 4402 solid i solidisinface { 4403 pointilles 4404 } if 4405 lignedeniveau ligne3d 4406 } if 4407 grestore 4408 } for 4409 } if 4410 4411 } if 4412 end 4413 } def 4414 4415 %% syntaxe : A solid i dessinefacecachee 4416 /dessinefacecachee { 4417 6 dict begin 4418 /i exch def 4419 /solid exch def 4420 solid issolid not { 4421 (Error : mauvais type d argument dans dessinefacecachee) == 4422 quit 4423 } if 4424 /A exch def 4425 4426 /F solid solidgetfaces def 4427 /S solid solidgetsommets def 4428 4429 solid i solidfacevisible? not { 4430 %% face cachee => on prend chacune des aretes de la face et on 4431 %% regarde si elle est deja dessinee. 4432 4 dict begin 4433 /n F i get length def %% nb de sommets de la face 4434 0 1 n 1 sub { 4435 /k exch def 4436 /k1 F i k get_ij def %% indice sommet1 4437 /k2 F i k 1 add n mod get_ij def %% indice sommet2 4438 A k1 k2 get_ij not { 4439 gsave 4440 currentlinewidth .5 mul setlinewidth 4441 pointilles 4442 [S k1 getp3d 4443 S k2 getp3d] ligne3d 4444 A k1 k2 true put_ij 4445 A k2 k1 true put_ij 4446 grestore 4447 } if 4448 } for 4449 4450 %% trace de la ligne de niveau 4451 solidintersectiontype 0 ge { 4452 /face_a_dessiner [ %% face visible : F [i] 4453 0 1 n 1 sub { 4454 /j exch def 4455 solid j i solidgetsommetface 4456 } for 4457 ] def 4458 0 1 solidintersectionplan length 1 sub { 4459 /k exch def 4460 /lignedeniveau [] def 4461 gsave 4462 pointilles 4463 k solidintersectionlinewidth length lt { 4464 solidintersectionlinewidth k get setlinewidth 4465 } { 4466 solidintersectionlinewidth 0 get setlinewidth 4467 } ifelse 4468 k solidintersectioncolor length lt { 4469 solidintersectioncolor k get cvx exec 4470 } { 4471 solidintersectioncolor 0 get cvx exec 4472 } ifelse 4473 0 1 n 1 sub { 4474 /j exch def 4475 face_a_dessiner j getp3d 4476 face_a_dessiner j 1 add n mod getp3d 4477 solidintersectionplan k get segment_inter_plan { 4478 1 dict begin 4479 /table exch def 4480 table length 6 eq { 4481 /lignedeniveau table store 4482 exit 4483 } { 4484 /lignedeniveau [ 4485 lignedeniveau aload pop 4486 table 0 getp3d 4487 ] store 4488 } ifelse 4489 end 4490 } if 4491 } for 4492 4493 %% dessin de la ligne 4494 lignedeniveau length 4 ge { 4495 [lignedeniveau aload pop sortp3d] ligne3d 4496 } if 4497 grestore 4498 } for 4499 } if 4500 4501 end 4375 4502 } if 4376 4503 end … … 4818 4945 } def 4819 4946 4820 4821 /plan2eq {4822 6 dict begin4823 /leplan exch def4824 leplan plangetbase aload pop vectprod3d4825 /c exch def4826 /b exch def4827 /a exch def4828 leplan plangetorigine4829 /z0 exch def4830 /y0 exch def4831 /x0 exch def4832 [a b c a x0 mul b y0 mul add c z0 mul add neg]4833 end4834 } def4835 4836 4947 %% syntaxe : M eqplan --> real 4837 4948 %% image de M par la fonction definie par l equation eqplan … … 4847 4958 /@d eqplan 3 get def 4848 4959 @a @x mul @b @y mul add @c @z mul add @d add 4960 end 4961 } def 4962 4963 /plan2eq { 4964 6 dict begin 4965 /leplan exch def 4966 leplan plangetbase aload pop vectprod3d 4967 /c exch def 4968 /b exch def 4969 /a exch def 4970 leplan plangetorigine 4971 /z0 exch def 4972 /y0 exch def 4973 /x0 exch def 4974 [a b c a x0 mul b y0 mul add c z0 mul add neg] 4849 4975 end 4850 4976 } def … … 4966 5092 /planxmarks { 4967 5093 5 dict begin 5094 dup isbool { 5095 /mybool exch def 5096 } { 5097 /mybool true def 5098 } ifelse 4968 5099 /leplan exch def 4969 5100 leplan plangetrange aload pop … … 4972 5103 /xmax exch def 4973 5104 /xmin exch def 5105 newpath 5106 xmin truncate cvi 0 smoveto 5107 xmax truncate cvi 0 slineto 5108 leplan mybool projpath 5109 stroke 4974 5110 xmin truncate cvi xmkstep xmax truncate cvi { 4975 dup chaine cvs exch 0 leplan dctextp3d 5111 dup 0 ne { 5112 /x exch def 5113 x 5114 x x truncate eq { 5115 cvi 5116 } if 5117 dup chaine cvs exch 0 leplan mybool dctextp3d 5118 newpath 5119 x 0 smoveto 5120 0 2.5 rmoveto 5121 0 -5 rlineto 5122 leplan mybool projpath 5123 stroke 5124 } { 5125 pop (0) 0 0 leplan mybool dltextp3d 5126 } ifelse 4976 5127 } for 4977 5128 end … … 4981 5132 /planymarks { 4982 5133 5 dict begin 5134 dup isbool { 5135 /mybool exch def 5136 } { 5137 /mybool true def 5138 } ifelse 4983 5139 /leplan exch def 4984 5140 leplan plangetrange aload pop … … 4987 5143 /xmax exch def 4988 5144 /xmin exch def 5145 newpath 5146 0 ymin truncate cvi smoveto 5147 0 ymax truncate cvi slineto 5148 leplan mybool projpath 5149 stroke 4989 5150 ymin truncate cvi ymkstep ymax truncate cvi { 4990 5151 dup 0 ne { 4991 dup chaine cvs exch 0 exch leplan cltextp3d 5152 /y exch def 5153 y 5154 y y truncate eq { 5155 cvi 5156 } if 5157 dup chaine cvs exch 0 exch leplan mybool cltextp3d 5158 newpath 5159 0 y smoveto 5160 2.5 0 rmoveto 5161 -5 0 rlineto 5162 leplan mybool projpath 5163 stroke 4992 5164 } { 4993 pop 5165 pop (0) 0 0 leplan mybool dltextp3d 4994 5166 } ifelse 4995 5167 } for … … 4999 5171 %% syntaxe : plantype planmarks 5000 5172 /planmarks { 5001 dup planxmarks planymarks 5173 1 dict begin 5174 dup isbool { 5175 /mybool exch def 5176 } { 5177 /mybool true def 5178 } ifelse 5179 dup mybool planxmarks mybool planymarks 5180 end 5002 5181 } def 5003 5182 … … 5036 5215 x ymax slineto 5037 5216 } for 5217 end 5218 } def 5219 5220 %% syntaxe : plan [ngrid] planquadrillage 5221 /planquadrillage { 5222 4 dict begin 5223 dup isbool { 5224 /mybool exch def 5225 } { 5226 /mybool true def 5227 } ifelse 5228 dup isplan { 5229 /ngrid [1 1] def 5230 } { 5231 /ngrid exch def 5232 } ifelse 5233 /leplan exch def 5234 /dx ngrid 0 get def 5235 /dy ngrid 1 get def 5236 /table leplan plangetrange def 5237 table 0 get cvi truncate /xmin exch def 5238 table 1 get cvi truncate /xmax exch def 5239 table 2 get cvi truncate /ymin exch def 5240 table 3 get cvi truncate /ymax exch def 5241 newpath 5242 ymin dy ymax { 5243 /y exch def 5244 xmin y smoveto 5245 xmax y slineto 5246 } for 5247 xmin dx xmax { 5248 /x exch def 5249 x ymin smoveto 5250 x ymax slineto 5251 } for 5252 leplan mybool projpath 5253 stroke 5038 5254 end 5039 5255 } def trunk/tests/index.txt
r24 r27 11 11 test_11 : equations de plan 12 12 test_12 : lecture / ecriture de fichier off 13 test_13 : intersection solide/plan
