Changeset 72
- Timestamp:
- 06/28/08 10:28:57 (6 months ago)
- Files:
-
- trunk/pst-solides3d.tex (modified) (5 diffs)
- trunk/solides.pro (modified) (22 diffs)
- trunk/tests/test_21.tex (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/pst-solides3d.tex
r71 r72 293 293 surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,% 294 294 surfaceparametree,texte,trigospherique,vecteur,line,objfile,datfile,surface*,% 295 plan,offfile,geode,load,plantype,point,pie }295 plan,offfile,geode,load,plantype,point,pie,droite,polygone} 296 296 %% Reservation de macros correspondants aux objects 297 297 \pst@solides@reservednames{object} … … 981 981 /texte (\pst@solides@text) def 982 982 /pos (\pst@solides@pos) def 983 /proj-definition (\pst@solides@definition) def983 /proj-definition (\pst@solides@definition) def 984 984 /proj-args { \pst@solides@args} def 985 /action (\pst@solides@action) def 985 986 \ifx\pst@solides@name\@empty 986 987 \else … … 999 1000 > 1000 1001 1001 %% la macro de projection 1002 %% 27/06/08 %% %% la macro de projection 1003 %% 27/06/08 %% \def\psProjection{\def\pst@par{}\pst@object{psProjection}} 1004 %% 27/06/08 %% \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.,0.)}} 1005 %% 27/06/08 %% \def\psProjection@ii(#1,#2,#3){{% 1006 %% 27/06/08 %% \use@par 1007 %% 27/06/08 %% \ifPst@solidmemory 1008 %% 27/06/08 %% \else 1009 %% 27/06/08 %% \begin@ClosedObj 1010 %% 27/06/08 %% \fi 1011 %% 27/06/08 %% \addto@pscode{% 1012 %% 27/06/08 %% \tx@optionssolides 1013 %% 27/06/08 %% SolidesDict begin 1014 %% 27/06/08 %% \tx@psProjection 1015 %% 27/06/08 %% /CX 0 def 1016 %% 27/06/08 %% /CY 0 def 1017 %% 27/06/08 %% /CZ 0 def 1018 %% 27/06/08 %% /xorigine #1 def 1019 %% 27/06/08 %% /yorigine #2 def 1020 %% 27/06/08 %% /zorigine #3 def 1021 %% 27/06/08 %% % nature du solide : texte, chemin, courbe 1022 %% 27/06/08 %% proj-\psk@solides@object\space 1023 %% 27/06/08 %% end 1024 %% 27/06/08 %% }%<- fin du code ps 1025 %% 27/06/08 %% \psk@fillstyle 1026 %% 27/06/08 %% \pst@stroke 1027 %% 27/06/08 %% \ifPst@solidmemory 1028 %% 27/06/08 %% \else 1029 %% 27/06/08 %% \end@ClosedObj 1030 %% 27/06/08 %% \fi 1031 %% 27/06/08 %% }} 1032 1033 \makeatletter 1034 %% la macro de projection 1002 1035 \def\psProjection{\def\pst@par{}\pst@object{psProjection}} 1003 \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.,0.)}} 1004 \def\psProjection@ii(#1,#2,#3){{% 1036 \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.)}} 1037 \def\psProjection@ii(#1,#2){{% 1038 \def\@tempb{#2}% 1005 1039 \use@par 1006 1040 \ifPst@solidmemory … … 1015 1049 /CY 0 def 1016 1050 /CZ 0 def 1017 /xorigine #1 def 1018 /yorigine #2 def 1019 /zorigine #3 def 1051 \ifx\@tempb\@empty 1052 #1 /yorigine exch def /xorigine exch def 1053 \else 1054 #1 #2 /yorigine exch def /xorigine exch def 1055 \fi 1020 1056 % nature du solide : texte, chemin, courbe 1021 1057 proj-\psk@solides@object\space … … 1029 1065 \fi 1030 1066 }} 1031 1032 1067 \makeatother 1033 1068 1034 1069 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% trunk/solides.pro
r71 r72 1 1 %! 2 2 % PostScript prologue for pst-solides3d.tex. 3 % Version 3.4 0, 2008/06/273 % Version 3.41, 2008/06/27 4 4 % 5 5 %% COPYRIGHT 2008 by Jean-Paul Vignault … … 410 410 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 411 411 412 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 413 %%%% points %%%% 414 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 415 416 %%%%% ### setxrange ### 417 /setxrange { 418 /xmax exch def 419 /xmin exch def 420 } def 421 422 %%%%% ### setyrange ### 423 /setyrange { 424 /ymax exch def 425 /ymin exch def 426 } def 427 428 %%%%% ### defpoint ### 429 %% syntaxe : xA yA /A defpoint 430 /defpoint { 431 1 dict begin 432 /t@mp@r@ire exch def 433 [ 3 1 roll ] cvx t@mp@r@ire exch 434 end def 435 } def 436 437 %%%%% ### milieu ### 438 %% syntaxe~: A B milieu 439 /milieu { 440 %% xA yA xB yB 441 3 -1 roll %% xA xB yB yA 442 add 2 div %% xA xB yM 443 3 1 roll %% yM xA xB 444 add 2 div %% yM xM 445 exch 446 } def 447 448 %%%%% ### parallelopoint ### 449 %% syntaxe : A B C parallelopoint --> point D, tel que ABCD parallelogramme 450 /parallelopoint { 451 11 dict begin 452 /yC exch def 453 /xC exch def 454 /yB exch def 455 /xB exch def 456 /yA exch def 457 /xA exch def 458 /A {xA yA} def 459 /B {xB yB} def 460 /C {xC yC} def 461 /d1 {A B C paral} def 462 /d2 {B C A paral} def 463 d1 d2 interdroite 464 end 465 } def 466 467 %%%%% ### translatepoint ### 468 %% syntaxe : A u translatepoint --> B image de A par la translation de vecteur u 469 /translatepoint { 470 addv 471 } def 472 473 %%%%% ### rotatepoint ### 474 %% syntaxe : B A r rotatepoint --> C image de B par la rotation de centre A, 475 %% d'angle r (en degre) 476 %% En prenant les affixes des pts associes, il vient 477 %% (zC - zA) = (zB-zA) e^(ir) 478 %% soit 479 %% zC = (zB-zA) e^(ir) + zA 480 /rotatepoint { %% B, A, r 481 5 copy %% B, A, r, B, A, r 482 cos 5 1 roll %% B, A, r, cos r, B, A 483 4 1 roll %% B, A, r, cos r, yA, B, xA 484 4 1 roll %% B, A, r, cos r, A, B 485 vecteur %% B, A, r, cos r, xB-xA, yB-yA 486 4 -1 roll sin %% B, A, cos r, xB-xA, yB-yA, sin r 487 4 copy mul %% B, A, cos r, xB-xA, yB-yA, sin r, cos r, xB-xA, (yB-yA) sin r 488 7 1 roll mul %% B, A, (yB-yA) sin r, cos r, xB-xA, yB-yA, sin r, cos r (xB-xA) 489 5 1 roll %% B, A, (yB-yA) sin r, cos r (xB-xA), cos r, xB-xA, yB-yA, sin r 490 exch %% B, A, (yB-yA) sin r, cos r (xB-xA), cos r, xB-xA, sin r, yB-yA 491 4 -1 roll mul %% B, A, (yB-yA) sin r, cos r (xB-xA), xB-xA, sin r, (yB-yA)cos r 492 3 1 roll mul %% B, A, (yB-yA) sin r, cos r (xB-xA), (yB-yA) cos r, (xB-xA) sin r 493 add %% B, A, (yB-yA) sin r, cos r (xB-xA), (yB-yA) cos r +(xB-xA) sin r 494 3 1 roll %% B, A, (yB-yA) cos r + (xB-xA) sin r, (yB-yA) sin r, cos r (xB-xA), 495 exch sub %% B, A, (yB-yA) cos r + (xB-xA) sin r, cos r (xB-xA)-(yB-yA) sin r 496 exch %% B, zA, (zB-zA) e^(ir) 497 addv 498 3 -1 roll pop 499 3 -1 roll pop 500 } def 501 502 %%%%% ### hompoint ### 503 %% syntaxe : B A alpha hompoint -> le point A' tel que AA' = alpha AB 504 /hompoint { 505 5 copy 506 pop 507 vecteur %% vecteur BA 508 3 -1 roll 509 neg 510 mulv %% alpha x vecteur AB 511 addv 512 4 -1 roll 513 4 -1 roll 514 pop pop 515 } def 516 517 %%%%% ### orthoproj ### 518 %% syntaxe : A D orthoproj --> B, le projete orthogonal de A sur D 519 /orthoproj { 520 6 -1 roll 521 6 -1 roll %% D A 522 6 copy %% D A D A 523 7 -1 roll pop 524 7 -1 roll pop %% D D A 525 perp 526 interdroite 527 } def 528 529 %% syntaxe : A projx --> le projete orthogonal de A sur Ox 530 /projx { 531 pop 0 532 } def 533 534 %% syntaxe : A projy --> le projete orthogonal de A sur Oy 535 /projy { 536 exch pop 0 exch 537 } def 538 539 %%%%% ### sympoint ### 540 %% syntaxe : A I sympoint --> point A', le symetrique de A par rapport 541 %% au point I 542 /sympoint { 543 4 copy 544 pop pop 545 vecteur 546 -2 mulv 547 addv 548 } def 549 550 %%%%% ### axesympoint ### 551 %% syntaxe : A D axesympoint --> point B, le symetrique de A par rapport 552 %% a la droite D 553 /axesympoint { 554 2 dict begin 555 6 copy 556 pop pop pop pop 557 /yA exch def 558 /xA exch def 559 orthoproj 560 xA yA vecteur 561 -2 mulv 562 xA yA addv 563 end 564 } def 565 566 %%%%% ### cpoint ### 567 %% syntaxe : alpha C cpoint -> M, le point du cercle C correspondant a 568 %% l'angle alpha 569 /cpoint { %% a, xI, yI, r 570 1 dict begin 571 dup %% a, xI, yI, r, r 572 5 -1 roll %% xI, yI, r, r, a 573 /alpha exch def 574 alpha cos mul %% xI, yI, r, r cos a 575 exch 576 alpha sin mul %% xI, yI, r cos a, r sin a 577 3 -1 roll add %% xI, r cos a, yI + r sin a 578 3 1 roll %% yI + r sin a, xI, r cos a, 579 add exch %% xI + r cos a, yI + r sin a 580 end 581 } def 582 583 %%%%% ### xdpoint ### 584 %% x A B xdpoint : le point de la droite (AB) d'abscisse x 585 /xdpoint { 586 5 dict begin 587 /pt2 defpoint 588 /pt1 defpoint 589 /x exch def 590 /a pt1 pt2 coeffdir def 591 /b pt1 pt2 ordorig def 592 x dup a mul b add 593 end 594 } def 595 596 %%%%% ### ydpoint ### 597 %% y A B ydpoint : le point de la droite (AB) d'ordonnee y 598 /ydpoint { 599 5 dict begin 600 /pt2 defpoint 601 /pt1 defpoint 602 /y exch def 603 pt1 pt2 verticale? 604 { 605 pt1 pop y 606 } 607 { 608 /a pt1 pt2 coeffdir def 609 /b pt1 pt2 ordorig def 610 y b sub a div y 611 } 612 ifelse 613 end 614 } def 615 616 %%%%% ### fin insertion ### 617 /interdroites {interdroite} def 618 619 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 620 %%%% vecteurs %%%% 621 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 622 412 623 %%%%% ### vecteur ### 413 624 %% syntaxe~: A B vecteur … … 421 632 } def 422 633 423 %%%%% ### defpoint ###424 %% syntaxe : xA yA /A defpoint425 /defpoint {426 1 dict begin427 /t@mp@r@ire exch def428 [ 3 1 roll ] cvx t@mp@r@ire exch429 end def430 } def431 432 634 %%%%% ### normalize ### 433 635 %% syntaxe : u normalize -> u / ||u|| … … 438 640 u 1 n div mulv 439 641 end 642 } def 643 644 %%%%% ### addv ### 645 %% syntaxe : u v addv --> u+v 646 /addv { %% xA yA xB yB 647 3 1 roll %% xA yB yA xB 648 4 1 roll %% xB xA yB yA 649 add 3 1 roll %% yB+yA xB xA 650 add exch 651 } def 652 653 %%%%% ### subv ### 654 %% syntaxe : u v subv --> u - v 655 /subv { %% xA yA xB yB 656 -1 mulv 657 addv 658 } def 659 660 %%%%% ### mulv ### 661 %% syntaxe : u a mulv --> au 662 /mulv { %% xA, yA, a 663 dup %% xA, yA, a, a 664 3 1 roll %% xA, a, yA, a 665 mul 3 1 roll %% ayA, xA, a 666 mul exch 667 } def 668 669 %%%%% ### scalprod ### 670 %% syntaxe : u v scalprod --> le produit scalaire de u par v 671 /scalprod { 672 2 dict begin 673 /y' exch def 674 exch 675 /y exch def 676 mul y y' mul add 677 end 678 } def 679 680 %%%%% ### normal ### 681 %% syntaxe : u normal --> v tel u.v = 0 682 /normal { 683 neg exch 440 684 } def 441 685 … … 484 728 /oldarrowangle 0 def %% pour l'utilisateur 485 729 486 %%%%% ### milieu ### 487 %% syntaxe~: A B milieu 488 /milieu { 489 %% xA yA xB yB 490 3 -1 roll %% xA xB yB yA 491 add 2 div %% xA xB yM 492 3 1 roll %% yM xA xB 493 add 2 div %% yM xM 494 exch 730 %%%%% ### drawvecteur ### 731 %% syntaxe : A B drawvecteur 732 /drawvecteur { 733 2 dict begin 734 /B defpoint 735 /A defpoint 736 [A B] ligne 737 A B oldarrow 738 end 739 } def 740 741 %%%%% ### fin insertion ### 742 743 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 744 %%%% droites %%%% 745 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 746 747 %%%%% ### coeffdir ### 748 %% syntaxe~: A B coeffdir 749 /coeffdir { 750 vecteur exch div 751 } def 752 753 %%%%% ### ordorig ### 754 %% syntaxe : A B ordorig 755 %% attention, la droite est supposee ne pas etre verticale 756 /ordorig { 757 /dr@ite 4 array def 758 dr@ite 3 3 -1 roll put 759 dr@ite 2 3 -1 roll put 760 dr@ite 1 3 -1 roll put 761 dr@ite 0 3 -1 roll put 762 dr@ite aload pop coeffdir /c@eff exch def 763 dr@ite aload pop pop pop %% xA yA 764 exch %% yA xA 765 c@eff mul neg add 766 } def 767 768 %%%%% ### verticale ### 769 %% syntaxe~: A B verticale? 770 /verticale? { 771 pop 2 1 roll pop 772 eq 773 } def 774 775 %% syntaxe : x verticale 776 /verticale { 777 1 dict begin 778 /x exch def 779 x ymin x ymax 780 end 781 } def 782 783 %%%%% ### defdroite ### 784 %% syntaxe : A B droite 785 /droite { 786 gsave 787 6 dict begin 788 /yB exch def 789 /xB exch def 790 /yA exch def 791 /xA exch def 792 xA yA xB yB 793 eqp 794 {} 795 { 796 xA yA xB yB 797 verticale? 798 { 799 newpath 800 xA ymin smoveto 801 xA ymax slineto 802 stockcurrentcpath 803 stroke 804 } 805 { 806 newpath 807 /alpha xA yA xB yB coeffdir def 808 /beta xA yA xB yB ordorig def 809 xmin dup alpha mul beta add smoveto 810 xmax dup alpha mul beta add slineto 811 stockcurrentcpath 812 stroke 813 } 814 ifelse 815 } 816 ifelse 817 end 818 grestore 819 } def 820 821 %%%%% ### defdroite ### 822 %% syntaxe : A B /d defdroite 823 /defdroite { 824 1 dict begin 825 /t@mp@r@ire exch def 826 [ 5 1 roll ] cvx t@mp@r@ire exch 827 end def 828 } def 829 830 %%%%% ### paral ### 831 %% syntaxe : D A paral --> droite parallele a D passant par A 832 /paral { 833 4 dict begin 834 /yA exch def 835 /xA exch def 836 vecteur 837 /u2 exch def 838 /u1 exch def 839 xA yA 840 2 copy 841 u1 u2 translatepoint 842 end 843 } def 844 845 %%%%% ### interdroite ### 846 /interdroite { 847 %% A B C D 848 /dr@ite2 4 array def 849 dr@ite2 3 3 -1 roll put 850 dr@ite2 2 3 -1 roll put 851 dr@ite2 1 3 -1 roll put 852 dr@ite2 0 3 -1 roll put 853 /dr@ite1 4 array def 854 dr@ite1 3 3 -1 roll put 855 dr@ite1 2 3 -1 roll put 856 dr@ite1 1 3 -1 roll put 857 dr@ite1 0 3 -1 roll put 858 859 %%% %% trace pour deboguage 860 %%% dr@ite1 aload pop droite 861 %%% dr@ite2 aload pop droite 862 863 %%% Dans tous les cas, on suppose que l'intersection existe 864 %%% 865 %%% * la 1ere droite est verticale. les equations reduites sont 866 %%% x = a1 et y = a2 x + b2 867 %%% Le point d'intersection est : 868 %%% {{x = a1, y = b2 + a1 a2}} 869 %%% 870 %%% * la 2eme droite est verticale. les equations reduites sont 871 %%% x = a1 x+ b1 et x = a2 872 %%% Le point d'intersection est : 873 %%% {{x = a2, y = b1 + a1 a2}} 874 %%% 875 %%% * aucune n'est verticale. Les equations reduites sont 876 %%% y = a1 x + b1 et y = a2 x + b2 877 %%% Le point d'intersection est : 878 %%% { { b2 - b1 a1 b2 - a2 b1 } } 879 %%% { { x = -------, y = ------------- } } 880 %%% { { a1 - a2 a1 - a2 } } 881 882 %%% remarque : pour le moment, je n'arrive pas a rendre mes variables 883 %%% locales : elle restent globales. Pour que cela ne soit pas trop 884 %%% genant, je les note respectivement @1, @@1, @2 et @@2 au lieu de a1, 885 %%% b1, a2 et b2. 886 887 dr@ite1 aload pop verticale? 888 { 889 /@1 {dr@ite1 aload pop pop pop pop} def 890 /@2 {dr@ite2 aload pop coeffdir} def 891 /@@2 {dr@ite2 aload pop ordorig} def 892 @1 893 @1 @2 mul @@2 add 894 } 895 { 896 dr@ite2 aload pop verticale? 897 { 898 /@1 {dr@ite1 aload pop coeffdir} def 899 /@@1 {dr@ite1 aload pop ordorig} def 900 /@2 {dr@ite2 aload pop pop pop pop} def 901 @2 902 @1 @2 mul @@1 add 903 } 904 { 905 /@1 {dr@ite1 aload pop coeffdir} def 906 /@@1 {dr@ite1 aload pop ordorig} def 907 /@2 {dr@ite2 aload pop coeffdir} def 908 /@@2 {dr@ite2 aload pop ordorig} def 909 @@2 @@1 sub @1 @2 sub div 910 @1 @@2 mul @2 @@1 mul sub 911 @1 @2 sub div 912 } 913 ifelse 914 } 915 ifelse 916 } def 917 918 %%%%% ### perp ### 919 %% syntaxe : D A perp --> droite perpendiculaire a D passant par A 920 /perp { 921 4 dict begin 922 /yA exch def 923 /xA exch def 924 vecteur orthovecteur 925 /u2 exch def 926 /u1 exch def 927 xA yA 928 2 copy 929 u1 u2 translatepoint 930 end 931 } def 932 933 %%%%% ### mediatrice ### 934 %% synaxe : A B mediatrice --> droite 935 /mediatrice { 936 4 copy 937 milieu 938 perp 939 } def 940 941 %%%%% ### bissectrice ### 942 %% syntaxe : A B C bissectrice --> B E ou E est un point de la bissectrice 943 /bissectrice { 944 10 dict begin 945 /yC exch def 946 /xC exch def 947 /yB exch def 948 /xB exch def 949 /yA exch def 950 /xA exch def 951 /A {xA yA} def 952 /B {xB yB} def 953 /C {xC yC} def 954 /alpha {A B C tripointangle} def 955 B 956 A B alpha rotatepoint 957 A milieu 958 end 495 959 } def 496 960 … … 1091 1555 /fill {l@pl@n mybool projpath savefill} def 1092 1556 /masque {} def 1093 % l@pl@n plangetrange aload pop 1094 % setyrange setxrange 1557 l@pl@n plangetrange aload pop 1558 setyrange setxrange 1559 newpath 1560 xmin ymin l@pl@n pointplan smoveto 1561 xmin ymax l@pl@n pointplan slineto 1562 xmax ymax l@pl@n pointplan slineto 1563 xmax ymin l@pl@n pointplan slineto 1564 closepath clip 1095 1565 } def 1096 1566 /eprojscene { … … 1495 1965 /startest {true} def 1496 1966 Cercle 1497 end1498 } def1499 1500 %%%%% ### drawvecteur ###1501 %% syntaxe : A B drawvecteur1502 /drawvecteur {1503 2 dict begin1504 /B defpoint1505 /A defpoint1506 [A B] ligne1507 A B oldarrow1508 1967 end 1509 1968 } def … … 2393 2852 /normalize3d {unitaire3d} def 2394 2853 2395 %%%%% ### mulv ###2396 %% syntaxe : u a mulv --> au2397 /mulv { %% xA, yA, a2398 dup %% xA, yA, a, a2399 3 1 roll %% xA, a, yA, a2400 mul 3 1 roll %% ayA, xA, a2401 mul exch2402 } def2403 2404 2854 %%%%% ### geom3d ### 2405 2855 %% syntaxe : A k1 B k2 barycentre3d -> G, barycentre du systeme … … 3352 3802 candidat 2 get isarray and 3353 3803 /IO candidat 3 get def 3354 IO length 4 eq and3355 IO 0 get isnum and3356 IO 1 get isnum and3357 IO 2 get isnum and3358 IO 3 get isnum and3804 IO length 4 eq and 3805 IO 0 get isnum and 3806 IO 1 get isnum and 3807 IO 2 get isnum and 3808 IO 3 get isnum and 3359 3809 } { 3360 3810 false … … 4062 4512 dup isarray { 4063 4513 /tableaffectation exch def 4064 /mode -1 def4514 /mode -1 def 4065 4515 } { 4066 4516 /mode defaultsolidmode def … … 4835 5285 face_a_dessiner j 1 add n mod getp3d 4836 5286 solidintersectionplan k get 4837 dup isarray {4838 segment_inter_plan4839 } {4840 segment_inter_planz4841 } ifelse {5287 dup isarray { 5288 segment_inter_plan 5289 } { 5290 segment_inter_planz 5291 } ifelse { 4842 5292 1 dict begin 4843 5293 /table exch def … … 4947 5397 face_a_dessiner j 1 add n mod getp3d 4948 5398 solidintersectionplan k get 4949 dup isarray {4950 segment_inter_plan4951 } {4952 segment_inter_planz4953 } ifelse {5399 dup isarray { 5400 segment_inter_plan 5401 } { 5402 segment_inter_planz 5403 } ifelse { 4954 5404 1 dict begin 4955 5405 /table exch def … … 5854 6304 } def 5855 6305 6306 %%%%% ### fin insertion ### 6307 %% syntaxe : x y plantype pointplan --> X Y Z 6308 /pointplan { 6309 5 dict begin 6310 /leplan exch def 6311 /y exch def 6312 /x exch def 6313 leplan plangetbase 0 getp3d /U defpoint3d 6314 leplan plangetbase 1 getp3d /V defpoint3d 6315 U x mulv3d V y mulv3d addv3d 6316 end 6317 } def 5856 6318 %%%%% ### fin insertion ### 5857 6319 … … 6825 7287 0 1 indicesommetstries length 1 sub { 6826 7288 /k exch def 6827 nouveauxindices indicesommetstries k get get7289 nouveauxindices indicesommetstries k get get 6828 7290 } for 6829 7291 ] solidaddface … … 8411 8873 0 1 Fi length 1 sub { 8412 8874 /j exch def 8413 lefichierfaces Fi j get chaine cvs writestring8875 lefichierfaces Fi j get chaine cvs writestring 8414 8876 lefichierfaces 32 write %% espace 8415 8877 } for … … 8996 9458 solidname (1) append cvlit exch def 8997 9459 dup solidname (0) append cvlit exch def 8998 %%8999 solidname (1) append cvx exec9460 %% 9461 solidname (1) append cvx exec 9000 9462 solidhollow { 9001 9463 dup videsolid … … 9018 9480 } if 9019 9481 } ifelse 9020 pop9482 pop 9021 9483 tx@Dict /solidname undef 9022 9484 } { … … 9617 10079 } def 9618 10080 10081 /pst-trigospherique { 10082 3 dict begin 10083 gsave 10084 solidlinewidth setlinewidth 10085 linecolor 10086 linestyle 10087 args definition cvx exec 10088 grestore 10089 end 10090 } def 10091 9619 10092 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9620 10093 %%%% procedures pour \psProjection %%%% … … 9624 10097 /planprojpst where { 9625 10098 pop 9626 planprojpst projectionsifacevisible projpath9627 % /planprojpst where pop /planprojpst undef10099 planprojpst projectionsifacevisible projpath 10100 % /planprojpst where pop /planprojpst undef 9628 10101 } { 9629 10102 /solidprojname where { … … 9673 10146 9674 10147 /proj-pst-point { 9675 solidlinewidth setlinewidth9676 % newpath9677 linecolor9678 % xorigine yorigine point_9679 10148 /projname where { 9680 10149 pop 9681 10150 proj-args proj-definition cvx exec projname cvlit defpoint 9682 } if 9683 proj-args proj-definition cvx exec point_ 9684 gere_pstricks_proj_opt 9685 stroke 10151 /projname where pop /projname undef 10152 } if 10153 action (none) eqstring not { 10154 solidlinewidth setlinewidth 10155 linecolor 10156 proj-args proj-definition cvx exec point_ 10157 gere_pstricks_proj_opt 10158 stroke 10159 } if 9686 10160 texte length 0 gt { 9687 20 setfontsize10161 20 setfontsize 9688 10162 setTimes 9689 10163 solidlinewidth setlinewidth 9690 10164 newpath 9691 10165 linecolor 9692 texte 9693 proj-args proj-definition cvx exec 10166 texte proj-args proj-definition cvx exec 9694 10167 pos (text_) append cvx exec 9695 10168 gere_pstricks_proj_opt … … 9699 10172 9700 10173 /proj-pst-vecteur { 9701 planprojpst bprojscene 9702 solidlinewidth setlinewidth 9703 linestyle 9704 linecolor 9705 xorigine yorigine 2 copy origin addv drawvecteur 9706 eprojscene 9707 % newpath 10174 action (none) eqstring not { 10175 planprojpst bprojscene 10176 solidlinewidth setlinewidth 10177 linestyle 10178 linecolor 10179 xorigine yorigine 2 copy proj-args proj-definition cvx exec addv drawvecteur 10180 eprojscene 10181 } if 10182 /projname where { 10183 pop 10184 proj-args proj-definition cvx exec projname cvlit defpoint 10185 /projname where pop /projname undef 10186 } if 10187 } def 10188 10189 /proj-pst-droite { 10190 action (none) eqstring not { 10191 planprojpst bprojscene 10192 solidlinewidth setlinewidth 10193 linestyle 10194 linecolor 10195 proj-args proj-definition cvx exec droite 10196 eprojscene 10197 } if 10198 /projname where { 10199 pop 10200 proj-args proj-definition cvx exec projname cvlit defdroite 10201 /projname where pop /projname undef 10202 } if 10203 } def 10204 10205 /proj-pst-polygone { 10206 action (none) eqstring not { 10207 planprojpst bprojscene 10208 solidlinewidth setlinewidth 10209 linestyle 10210 linecolor 10211 proj-definition length 0 eq { 10212 [proj-args] 10213 } { 10214 proj-args 10215 } ifelse 10216 proj-definition cvx exec polygone 10217 eprojscene 10218 } if 10219 /projname where { 10220 pop 10221 proj-definition length 0 eq { 10222 [proj-args] 10223 } { 10224 proj-args 10225 } ifelse 10226 proj-definition cvx exec projname cvlit exch def 10227 } if 9708 10228 } def 9709 10229 … … 9727 10247 } def 9728 10248 9729 /pst-trigospherique {9730 3 dict begin9731 gsave9732 solidlinewidth setlinewidth9733 linecolor9734 linestyle9735 args definition cvx exec9736 grestore9737 end9738 } def9739 9740 10249 % END solides.pro trunk/tests/test_21.tex
r71 r72 28 28 args={[1 0 0 0] 90}, 29 29 base=-4 4 -3 3, 30 name=monplan ,30 name=monplanA, 31 31 ] 32 32 %% exemple 2 … … 35 35 args={1 1 2 [1 1 2 180]}, 36 36 base=-4 4 -3 3, 37 %% decommenter la ligne ci-dessous pour l'exemple 2 38 % name=monplan, 37 name=monplanB, 39 38 ] 39 \psset{plan=monplanA} 40 40 %% dessin du plan 41 41 \psSolid[object=plan, 42 42 definition=plantype, 43 args=monplan ,43 args=monplanA, 44 44 fillcolor=white, 45 45 linecolor=yellow, 46 plangrid, 47 planmarks, 48 showBase, 46 49 % action=draw, 47 50 ] 51 %% %% dessin des accessoires" du plan : quadrillage, graduations, base 52 %% \psSolid[object=plan, 53 %% definition=plantype, 54 %% args=monplan, 55 %% action=none, 56 %% ] 48 57 %% projete d'un chemin circulaire hachure 49 58 \psProjection[object=chemin, 50 59 fillstyle=hlines,hatchcolor=yellow, 51 plan=monplan,52 60 linecolor=blue, 53 61 path=2 0 1 cercle … … 55 63 %% projete courbe de fonction numerique 56 64 \psProjection[object=courbe, 57 plan=monplan,58 65 range=-4 4,resolution=720, 59 66 linecolor=red, 60 67 function=F1] 61 %% dessin des accessoires" du plan : quadrillage, graduations, base62 \psSolid[object=plan,63 definition=plantype,64 args=monplan,65 plangrid,66 planmarks,67 showBase,68 action=none,69 ]70 68 %% projete d'un texte 71 69 \psProjection[object=texte, 72 plan=monplan,73 70 fontsize=20,linecolor=red, 74 71 text=Yes !, 75 ](-3,2 ,0)%72 ](-3,2)% 76 73 %% projete et nommage d'un point 77 74 \psProjection[object=point, 78 args=-2 1,75 args=-2 -1, 79 76 name=A, 80 77 text=A, 81 plan=monplan,82 78 linecolor=red, 83 79 pos=uc, … … 86 82 \psProjection[object=point, 87 83 args=1 2, 88 plan=monplan,89 84 name=B, 90 85 text=B, … … 96 91 definition=milieu, 97 92 args=A B, 98 plan=monplan,99 93 name=C, 100 94 text=C, 101 95 pos=uc 102 96 ] 97 %% calcul d'un symetrique 98 \psProjection[object=point, 99 definition=sympoint, 100 args=A 0 0, 101 name=D, 102 text=D, 103 pos=uc 104 ] 103 105 \psProjection[object=vecteur, 104 origine=1 1, 105 plan=monplan, 106 args=1 1, 107 % action=none, 108 name=U, 106 109 linestyle=dashed, 107 110 linecolor=orange, 108 ](-2,0,0)% 111 ](A,)% 112 %% point E tel que vect(AE) = U 113 \psProjection[object=point, 114 definition=translatepoint, 115 args=A U, 116 name=E, 117 text=E, 118 pos=uc 119 ] 120 %% une droite 121 \psProjection[object=droite, 122 args=A B, 123 name=D1, 124 ] 125 %% une autre droite 126 \psProjection[object=droite, 127 args=E D, 128 name=D2, 129 ] 130 %% point F = D1 inter D2 131 \psProjection[object=point, 132 definition=interdroites, 133 args=D1 D2, 134 name=F, 135 text=F, 136 pos=uc 137 ] 138 %% calcul d'un parallelogramme 139 \psProjection[object=point, 140 definition=parallelopoint, 141 args=C B D, 142 name=G, 143 text=G, 144 pos=uc 145 ] 146 %% dessin d'un polygone 147 \psProjection[object=polygone, 148 args=C B D G, 149 ] 109 150 \composeSolid 110 151 \axesIIID(4,4,2)(5,5,6)
