From bf62b306abca0232dec6bc1dfac1c9fdb603b42b Mon Sep 17 00:00:00 2001 From: ysn Date: Thu, 21 Nov 2013 13:04:37 +0400 Subject: [PATCH] 0024336: Content of OCCT documentation should be updated. Iter 2 CDL guide finalized. Brep WP added Added white-papers and 2 dev guides in the generated documentation structure. White-papers + 2 developer guides + Draw UG finalized. Visualization guide finalized. Fixes for bugs 24205, 23737 and 24021 --- dox/FILES.txt | 8 + dox/dev_guides/cdl/cdl.md | 1787 ++--- .../contribution_workflow.md | 283 + .../OCCT_ContributionWorkflow_V3_image001.png | Bin 0 -> 22946 bytes .../OCCT_ContributionWorkflow_V3_image002.jpg | Bin 0 -> 26776 bytes dox/dev_guides/dev_guides.md | 2 +- dox/dev_guides/git_guide/git_guide.md | 602 ++ .../images/OCCT_GitGuide_V2_image001.png | Bin 0 -> 41708 bytes .../images/OCCT_GitGuide_V2_image002.png | Bin 0 -> 43978 bytes .../images/OCCT_GitGuide_V2_image003.png | Bin 0 -> 45854 bytes .../images/OCCT_GitGuide_V2_image004.png | Bin 0 -> 21560 bytes .../images/OCCT_GitGuide_V2_image005.png | Bin 0 -> 21707 bytes .../images/OCCT_GitGuide_V2_image006.png | Bin 0 -> 38734 bytes .../images/OCCT_GitGuide_V2_image007.png | Bin 0 -> 31926 bytes .../images/OCCT_GitGuide_V2_image008.png | Bin 0 -> 19813 bytes .../images/OCCT_GitGuide_V2_image009.png | Bin 0 -> 35511 bytes .../images/OCCT_GitGuide_V2_image010.png | Bin 0 -> 18209 bytes .../images/OCCT_GitGuide_V2_image011.png | Bin 0 -> 8126 bytes .../images/OCCT_GitGuide_V2_image012.png | Bin 0 -> 27975 bytes .../images/OCCT_GitGuide_V2_image013.png | Bin 0 -> 23583 bytes .../images/OCCT_GitGuide_V2_image014.png | Bin 0 -> 36587 bytes .../images/OCCT_GitGuide_V2_image015.png | Bin 0 -> 31591 bytes .../images/OCCT_GitGuide_V2_image016.png | Bin 0 -> 31436 bytes .../images/OCCT_GitGuide_V2_image017.png | Bin 0 -> 33007 bytes .../images/OCCT_GitGuide_V2_image018.png | Bin 0 -> 26498 bytes .../images/OCCT_GitGuide_V2_image019.png | Bin 0 -> 25409 bytes .../images/OCCT_GitGuide_V2_image020.png | Bin 0 -> 58196 bytes .../images/OCCT_GitGuide_V2_image021.png | Bin 0 -> 27861 bytes .../images/OCCT_GitGuide_V2_image022.png | Bin 0 -> 39810 bytes .../images/OCCT_GitGuide_V2_image023.png | Bin 0 -> 46146 bytes .../images/OCCT_GitGuide_V2_image024.png | Bin 0 -> 42799 bytes .../images/OCCT_GitGuide_V2_image025.png | Bin 0 -> 42094 bytes .../images/OCCT_GitGuide_V2_image026.png | Bin 0 -> 55130 bytes dox/overview/Overview.md | 41 +- dox/user_guides/brep_wp/brep_wp.md | 2221 ++++++ .../brep_wp/images/brep_wp_image003.gif | Bin 0 -> 264 bytes .../brep_wp/images/brep_wp_image004.gif | Bin 0 -> 291 bytes .../brep_wp/images/brep_wp_image005.gif | Bin 0 -> 966 bytes .../brep_wp/images/brep_wp_image006.gif | Bin 0 -> 956 bytes .../brep_wp/images/brep_wp_image007.gif | Bin 0 -> 250 bytes .../brep_wp/images/brep_wp_image008.gif | Bin 0 -> 473 bytes .../brep_wp/images/brep_wp_image009.gif | Bin 0 -> 387 bytes .../brep_wp/images/brep_wp_image010.gif | Bin 0 -> 537 bytes .../brep_wp/images/brep_wp_image011.gif | Bin 0 -> 1570 bytes .../brep_wp/images/brep_wp_image012.gif | Bin 0 -> 290 bytes .../brep_wp/images/brep_wp_image013.gif | Bin 0 -> 479 bytes .../brep_wp/images/brep_wp_image014.gif | Bin 0 -> 1352 bytes .../brep_wp/images/brep_wp_image015.gif | Bin 0 -> 400 bytes .../brep_wp/images/brep_wp_image016.gif | Bin 0 -> 584 bytes .../brep_wp/images/brep_wp_image017.gif | Bin 0 -> 481 bytes .../brep_wp/images/brep_wp_image018.gif | Bin 0 -> 507 bytes .../brep_wp/images/brep_wp_image019.gif | Bin 0 -> 2610 bytes .../brep_wp/images/brep_wp_image020.gif | Bin 0 -> 229 bytes .../brep_wp/images/brep_wp_image021.gif | Bin 0 -> 1136 bytes .../brep_wp/images/brep_wp_image022.gif | Bin 0 -> 645 bytes .../brep_wp/images/brep_wp_image023.gif | Bin 0 -> 224 bytes .../brep_wp/images/brep_wp_image024.gif | Bin 0 -> 3849 bytes .../brep_wp/images/brep_wp_image025.gif | Bin 0 -> 938 bytes .../brep_wp/images/brep_wp_image026.gif | Bin 0 -> 680 bytes .../brep_wp/images/brep_wp_image027.gif | Bin 0 -> 873 bytes .../brep_wp/images/brep_wp_image028.gif | Bin 0 -> 859 bytes .../brep_wp/images/brep_wp_image029.gif | Bin 0 -> 853 bytes .../brep_wp/images/brep_wp_image030.gif | Bin 0 -> 552 bytes .../brep_wp/images/brep_wp_image031.gif | Bin 0 -> 265 bytes .../brep_wp/images/brep_wp_image032.gif | Bin 0 -> 294 bytes .../brep_wp/images/brep_wp_image033.gif | Bin 0 -> 314 bytes .../brep_wp/images/brep_wp_image034.gif | Bin 0 -> 508 bytes .../brep_wp/images/brep_wp_image035.gif | Bin 0 -> 235 bytes .../brep_wp/images/brep_wp_image036.gif | Bin 0 -> 216 bytes .../brep_wp/images/brep_wp_image037.gif | Bin 0 -> 213 bytes .../brep_wp/images/brep_wp_image038.gif | Bin 0 -> 220 bytes .../brep_wp/images/brep_wp_image039.gif | Bin 0 -> 637 bytes .../brep_wp/images/brep_wp_image040.gif | Bin 0 -> 553 bytes .../brep_wp/images/brep_wp_image041.gif | Bin 0 -> 548 bytes .../brep_wp/images/brep_wp_image042.gif | Bin 0 -> 549 bytes .../brep_wp/images/brep_wp_image043.gif | Bin 0 -> 896 bytes .../brep_wp/images/brep_wp_image044.gif | Bin 0 -> 234 bytes .../brep_wp/images/brep_wp_image045.gif | Bin 0 -> 264 bytes .../brep_wp/images/brep_wp_image046.gif | Bin 0 -> 257 bytes .../brep_wp/images/brep_wp_image047.gif | Bin 0 -> 191 bytes .../brep_wp/images/brep_wp_image048.gif | Bin 0 -> 1175 bytes .../brep_wp/images/brep_wp_image049.gif | Bin 0 -> 574 bytes .../brep_wp/images/brep_wp_image050.gif | Bin 0 -> 540 bytes .../brep_wp/images/brep_wp_image051.gif | Bin 0 -> 574 bytes .../brep_wp/images/brep_wp_image052.gif | Bin 0 -> 593 bytes .../brep_wp/images/brep_wp_image053.gif | Bin 0 -> 589 bytes .../brep_wp/images/brep_wp_image054.gif | Bin 0 -> 236 bytes .../brep_wp/images/brep_wp_image055.gif | Bin 0 -> 1492 bytes .../brep_wp/images/brep_wp_image056.gif | Bin 0 -> 407 bytes .../brep_wp/images/brep_wp_image057.gif | Bin 0 -> 401 bytes .../brep_wp/images/brep_wp_image058.gif | Bin 0 -> 373 bytes .../brep_wp/images/brep_wp_image059.gif | Bin 0 -> 363 bytes .../brep_wp/images/brep_wp_image060.gif | Bin 0 -> 492 bytes .../brep_wp/images/brep_wp_image061.gif | Bin 0 -> 1320 bytes .../brep_wp/images/brep_wp_image062.gif | Bin 0 -> 643 bytes .../brep_wp/images/brep_wp_image063.gif | Bin 0 -> 637 bytes .../brep_wp/images/brep_wp_image064.gif | Bin 0 -> 431 bytes .../brep_wp/images/brep_wp_image065.gif | Bin 0 -> 422 bytes .../brep_wp/images/brep_wp_image066.gif | Bin 0 -> 1461 bytes .../brep_wp/images/brep_wp_image067.gif | Bin 0 -> 215 bytes .../brep_wp/images/brep_wp_image068.gif | Bin 0 -> 974 bytes .../brep_wp/images/brep_wp_image069.gif | Bin 0 -> 556 bytes .../brep_wp/images/brep_wp_image070.gif | Bin 0 -> 292 bytes .../brep_wp/images/brep_wp_image071.gif | Bin 0 -> 656 bytes .../brep_wp/images/brep_wp_image072.gif | Bin 0 -> 278 bytes .../brep_wp/images/brep_wp_image073.gif | Bin 0 -> 541 bytes .../brep_wp/images/brep_wp_image074.gif | Bin 0 -> 570 bytes .../brep_wp/images/brep_wp_image075.gif | Bin 0 -> 592 bytes .../brep_wp/images/brep_wp_image076.gif | Bin 0 -> 590 bytes .../brep_wp/images/brep_wp_image077.gif | Bin 0 -> 300 bytes .../brep_wp/images/brep_wp_image078.gif | Bin 0 -> 1302 bytes .../brep_wp/images/brep_wp_image079.gif | Bin 0 -> 356 bytes .../brep_wp/images/brep_wp_image080.gif | Bin 0 -> 345 bytes .../brep_wp/images/brep_wp_image081.gif | Bin 0 -> 1269 bytes .../brep_wp/images/brep_wp_image082.gif | Bin 0 -> 404 bytes .../brep_wp/images/brep_wp_image083.gif | Bin 0 -> 407 bytes .../brep_wp/images/brep_wp_image084.gif | Bin 0 -> 1510 bytes .../brep_wp/images/brep_wp_image085.gif | Bin 0 -> 426 bytes .../brep_wp/images/brep_wp_image086.gif | Bin 0 -> 274 bytes .../brep_wp/images/brep_wp_image087.gif | Bin 0 -> 471 bytes .../brep_wp/images/brep_wp_image088.gif | Bin 0 -> 617 bytes .../brep_wp/images/brep_wp_image089.gif | Bin 0 -> 240 bytes .../brep_wp/images/brep_wp_image090.gif | Bin 0 -> 236 bytes .../brep_wp/images/brep_wp_image091.gif | Bin 0 -> 454 bytes .../brep_wp/images/brep_wp_image092.gif | Bin 0 -> 387 bytes .../brep_wp/images/brep_wp_image093.gif | Bin 0 -> 448 bytes .../brep_wp/images/brep_wp_image094.gif | Bin 0 -> 1702 bytes .../brep_wp/images/brep_wp_image095.gif | Bin 0 -> 492 bytes .../brep_wp/images/brep_wp_image096.gif | Bin 0 -> 287 bytes .../brep_wp/images/brep_wp_image097.gif | Bin 0 -> 236 bytes .../brep_wp/images/brep_wp_image098.gif | Bin 0 -> 386 bytes .../brep_wp/images/brep_wp_image099.gif | Bin 0 -> 463 bytes .../brep_wp/images/brep_wp_image100.gif | Bin 0 -> 407 bytes .../brep_wp/images/brep_wp_image101.gif | Bin 0 -> 580 bytes .../brep_wp/images/brep_wp_image102.gif | Bin 0 -> 287 bytes .../brep_wp/images/brep_wp_image103.gif | Bin 0 -> 581 bytes .../brep_wp/images/brep_wp_image104.gif | Bin 0 -> 304 bytes .../brep_wp/images/brep_wp_image105.gif | Bin 0 -> 2204 bytes .../brep_wp/images/brep_wp_image106.gif | Bin 0 -> 278 bytes .../brep_wp/images/brep_wp_image107.gif | Bin 0 -> 217 bytes .../brep_wp/images/brep_wp_image108.gif | Bin 0 -> 200 bytes .../brep_wp/images/brep_wp_image109.gif | Bin 0 -> 344 bytes .../brep_wp/images/brep_wp_image110.gif | Bin 0 -> 591 bytes .../brep_wp/images/brep_wp_image111.gif | Bin 0 -> 313 bytes .../brep_wp/images/brep_wp_image112.gif | Bin 0 -> 537 bytes .../brep_wp/images/brep_wp_image113.gif | Bin 0 -> 225 bytes .../brep_wp/images/brep_wp_image114.gif | Bin 0 -> 290 bytes .../brep_wp/images/brep_wp_image115.gif | Bin 0 -> 319 bytes .../brep_wp/images/brep_wp_image116.gif | Bin 0 -> 325 bytes .../brep_wp/images/brep_wp_image117.gif | Bin 0 -> 350 bytes .../brep_wp/images/brep_wp_image118.gif | Bin 0 -> 480 bytes .../brep_wp/images/brep_wp_image119.gif | Bin 0 -> 491 bytes .../brep_wp/images/brep_wp_image120.gif | Bin 0 -> 421 bytes .../brep_wp/images/brep_wp_image121.gif | Bin 0 -> 472 bytes .../brep_wp/images/brep_wp_image122.gif | Bin 0 -> 710 bytes .../brep_wp/images/brep_wp_image123.gif | Bin 0 -> 1526 bytes .../brep_wp/images/brep_wp_image124.gif | Bin 0 -> 536 bytes .../brep_wp/images/brep_wp_image125.gif | Bin 0 -> 361 bytes .../brep_wp/images/brep_wp_image126.gif | Bin 0 -> 199 bytes .../brep_wp/images/brep_wp_image127.gif | Bin 0 -> 1034 bytes .../brep_wp/images/brep_wp_image128.gif | Bin 0 -> 1446 bytes .../brep_wp/images/brep_wp_image129.gif | Bin 0 -> 499 bytes .../brep_wp/images/brep_wp_image130.gif | Bin 0 -> 413 bytes .../brep_wp/images/brep_wp_image131.gif | Bin 0 -> 332 bytes .../brep_wp/images/brep_wp_image132.gif | Bin 0 -> 861 bytes .../brep_wp/images/brep_wp_image133.gif | Bin 0 -> 266 bytes .../brep_wp/images/brep_wp_image134.gif | Bin 0 -> 262 bytes .../brep_wp/images/brep_wp_image135.gif | Bin 0 -> 262 bytes .../brep_wp/images/brep_wp_image136.gif | Bin 0 -> 568 bytes .../brep_wp/images/brep_wp_image137.gif | Bin 0 -> 397 bytes .../brep_wp/images/brep_wp_image138.gif | Bin 0 -> 577 bytes .../brep_wp/images/brep_wp_image139.gif | Bin 0 -> 291 bytes .../brep_wp/images/brep_wp_image140.gif | Bin 0 -> 583 bytes .../brep_wp/images/brep_wp_image141.gif | Bin 0 -> 412 bytes .../brep_wp/images/brep_wp_image142.gif | Bin 0 -> 296 bytes .../brep_wp/images/brep_wp_image143.gif | Bin 0 -> 279 bytes .../brep_wp/images/brep_wp_image144.gif | Bin 0 -> 475 bytes .../brep_wp/images/brep_wp_image145.gif | Bin 0 -> 282 bytes .../brep_wp/images/brep_wp_image146.gif | Bin 0 -> 442 bytes .../brep_wp/images/brep_wp_image147.gif | Bin 0 -> 284 bytes .../brep_wp/images/brep_wp_image148.gif | Bin 0 -> 473 bytes .../brep_wp/images/brep_wp_image149.gif | Bin 0 -> 282 bytes .../brep_wp/images/brep_wp_image150.gif | Bin 0 -> 276 bytes .../brep_wp/images/brep_wp_image151.gif | Bin 0 -> 286 bytes .../brep_wp/images/brep_wp_image152.gif | Bin 0 -> 2550 bytes .../brep_wp/images/brep_wp_image153.gif | Bin 0 -> 376 bytes .../brep_wp/images/brep_wp_image154.gif | Bin 0 -> 371 bytes .../brep_wp/images/brep_wp_image155.gif | Bin 0 -> 493 bytes .../brep_wp/images/brep_wp_image156.gif | Bin 0 -> 219 bytes .../brep_wp/images/brep_wp_image157.gif | Bin 0 -> 875 bytes .../brep_wp/images/brep_wp_image158.gif | Bin 0 -> 601 bytes .../brep_wp/images/brep_wp_image159.gif | Bin 0 -> 610 bytes .../brep_wp/images/brep_wp_image160.gif | Bin 0 -> 439 bytes .../brep_wp/images/brep_wp_image161.gif | Bin 0 -> 424 bytes .../brep_wp/images/brep_wp_image162.gif | Bin 0 -> 893 bytes .../brep_wp/images/brep_wp_image163.gif | Bin 0 -> 899 bytes .../brep_wp/images/brep_wp_image164.gif | Bin 0 -> 509 bytes .../brep_wp/images/brep_wp_image165.gif | Bin 0 -> 219 bytes .../brep_wp/images/brep_wp_image166.gif | Bin 0 -> 649 bytes .../brep_wp/images/brep_wp_image167.gif | Bin 0 -> 1313 bytes .../brep_wp/images/brep_wp_image168.gif | Bin 0 -> 666 bytes .../brep_wp/images/brep_wp_image169.gif | Bin 0 -> 271 bytes .../brep_wp/images/brep_wp_image170.gif | Bin 0 -> 549 bytes .../brep_wp/images/brep_wp_image171.gif | Bin 0 -> 1124 bytes .../brep_wp/images/brep_wp_image172.gif | Bin 0 -> 255 bytes .../brep_wp/images/brep_wp_image173.gif | Bin 0 -> 249 bytes .../brep_wp/images/brep_wp_image174.gif | Bin 0 -> 220 bytes .../brep_wp/images/brep_wp_image175.gif | Bin 0 -> 800 bytes .../brep_wp/images/brep_wp_image176.gif | Bin 0 -> 863 bytes .../brep_wp/images/brep_wp_image177.gif | Bin 0 -> 446 bytes .../brep_wp/images/brep_wp_image178.gif | Bin 0 -> 1149 bytes .../brep_wp/images/brep_wp_image179.gif | Bin 0 -> 134 bytes .../brep_wp/images/brep_wp_image180.gif | Bin 0 -> 1305 bytes .../brep_wp/images/brep_wp_image181.gif | Bin 0 -> 878 bytes .../brep_wp/images/brep_wp_image182.gif | Bin 0 -> 566 bytes .../brep_wp/images/brep_wp_image183.gif | Bin 0 -> 1450 bytes .../brep_wp/images/brep_wp_image184.gif | Bin 0 -> 254 bytes .../brep_wp/images/brep_wp_image185.gif | Bin 0 -> 790 bytes .../brep_wp/images/brep_wp_image186.gif | Bin 0 -> 616 bytes .../brep_wp/images/brep_wp_image187.gif | Bin 0 -> 249 bytes .../brep_wp/images/brep_wp_image188.gif | Bin 0 -> 1492 bytes .../brep_wp/images/brep_wp_image189.gif | Bin 0 -> 753 bytes .../brep_wp/images/brep_wp_image190.gif | Bin 0 -> 579 bytes .../brep_wp/images/brep_wp_image191.gif | Bin 0 -> 245 bytes .../brep_wp/images/brep_wp_image192.gif | Bin 0 -> 356 bytes .../brep_wp/images/brep_wp_image193.gif | Bin 0 -> 2245 bytes .../brep_wp/images/brep_wp_image194.gif | Bin 0 -> 209 bytes .../brep_wp/images/brep_wp_image195.gif | Bin 0 -> 1375 bytes .../brep_wp/images/brep_wp_image196.gif | Bin 0 -> 836 bytes .../brep_wp/images/brep_wp_image197.gif | Bin 0 -> 2041 bytes .../brep_wp/images/brep_wp_image198.gif | Bin 0 -> 209 bytes .../brep_wp/images/brep_wp_image199.gif | Bin 0 -> 214 bytes .../brep_wp/images/brep_wp_image200.gif | Bin 0 -> 1501 bytes .../brep_wp/images/brep_wp_image201.gif | Bin 0 -> 762 bytes .../brep_wp/images/brep_wp_image202.gif | Bin 0 -> 279 bytes .../brep_wp/images/brep_wp_image203.gif | Bin 0 -> 273 bytes .../brep_wp/images/brep_wp_image204.gif | Bin 0 -> 2170 bytes .../brep_wp/images/brep_wp_image205.gif | Bin 0 -> 220 bytes .../brep_wp/images/brep_wp_image206.gif | Bin 0 -> 771 bytes .../brep_wp/images/brep_wp_image207.gif | Bin 0 -> 998 bytes .../brep_wp/images/brep_wp_image208.gif | Bin 0 -> 663 bytes .../brep_wp/images/brep_wp_image209.gif | Bin 0 -> 1530 bytes .../brep_wp/images/brep_wp_image210.gif | Bin 0 -> 205 bytes .../brep_wp/images/brep_wp_image211.gif | Bin 0 -> 1714 bytes .../brep_wp/images/brep_wp_image212.gif | Bin 0 -> 991 bytes .../brep_wp/images/brep_wp_image213.gif | Bin 0 -> 656 bytes .../brep_wp/images/brep_wp_image214.gif | Bin 0 -> 818 bytes .../brep_wp/images/brep_wp_image215.gif | Bin 0 -> 562 bytes .../brep_wp/images/brep_wp_image216.gif | Bin 0 -> 1677 bytes .../brep_wp/images/brep_wp_image217.gif | Bin 0 -> 1254 bytes .../brep_wp/images/brep_wp_image218.gif | Bin 0 -> 889 bytes .../brep_wp/images/brep_wp_image219.gif | Bin 0 -> 215 bytes .../brep_wp/images/brep_wp_image220.gif | Bin 0 -> 213 bytes .../brep_wp/images/brep_wp_image221.gif | Bin 0 -> 459 bytes .../brep_wp/images/brep_wp_image222.gif | Bin 0 -> 457 bytes .../brep_wp/images/brep_wp_image223.gif | Bin 0 -> 673 bytes .../brep_wp/images/brep_wp_image224.gif | Bin 0 -> 271 bytes .../brep_wp/images/brep_wp_image225.gif | Bin 0 -> 918 bytes .../brep_wp/images/brep_wp_image226.gif | Bin 0 -> 452 bytes .../brep_wp/images/brep_wp_image227.gif | Bin 0 -> 477 bytes .../brep_wp/images/brep_wp_image228.gif | Bin 0 -> 465 bytes .../brep_wp/images/brep_wp_image229.gif | Bin 0 -> 371 bytes .../brep_wp/images/brep_wp_image230.gif | Bin 0 -> 420 bytes .../brep_wp/images/brep_wp_image231.gif | Bin 0 -> 2272 bytes .../brep_wp/images/brep_wp_image232.gif | Bin 0 -> 662 bytes .../brep_wp/images/brep_wp_image233.gif | Bin 0 -> 265 bytes .../brep_wp/images/brep_wp_image234.gif | Bin 0 -> 366 bytes .../brep_wp/images/brep_wp_image235.gif | Bin 0 -> 417 bytes .../brep_wp/images/brep_wp_image236.gif | Bin 0 -> 397 bytes .../brep_wp/images/brep_wp_image237.gif | Bin 0 -> 492 bytes .../brep_wp/images/brep_wp_image238.gif | Bin 0 -> 425 bytes .../brep_wp/images/brep_wp_image239.gif | Bin 0 -> 601 bytes .../brep_wp/images/brep_wp_image240.gif | Bin 0 -> 462 bytes .../brep_wp/images/brep_wp_image241.gif | Bin 0 -> 607 bytes .../brep_wp/images/brep_wp_image242.gif | Bin 0 -> 441 bytes .../brep_wp/images/brep_wp_image243.gif | Bin 0 -> 567 bytes .../brep_wp/images/brep_wp_image244.gif | Bin 0 -> 326 bytes .../brep_wp/images/brep_wp_image245.gif | Bin 0 -> 615 bytes .../brep_wp/images/brep_wp_image246.gif | Bin 0 -> 442 bytes .../brep_wp/images/brep_wp_image247.gif | Bin 0 -> 594 bytes .../brep_wp/images/brep_wp_image248.gif | Bin 0 -> 454 bytes .../brep_wp/images/brep_wp_image249.gif | Bin 0 -> 4936 bytes .../brep_wp/images/brep_wp_image250.gif | Bin 0 -> 410 bytes .../brep_wp/images/brep_wp_image251.gif | Bin 0 -> 408 bytes .../brep_wp/images/brep_wp_image252.gif | Bin 0 -> 238 bytes .../brep_wp/images/brep_wp_image253.gif | Bin 0 -> 342 bytes .../brep_wp/images/brep_wp_image254.gif | Bin 0 -> 396 bytes .../brep_wp/images/brep_wp_image255.gif | Bin 0 -> 874 bytes .../brep_wp/images/brep_wp_image256.gif | Bin 0 -> 565 bytes .../brep_wp/images/brep_wp_image257.gif | Bin 0 -> 455 bytes .../brep_wp/images/brep_wp_image258.gif | Bin 0 -> 490 bytes .../brep_wp/images/brep_wp_image259.gif | Bin 0 -> 506 bytes .../brep_wp/images/brep_wp_image260.gif | Bin 0 -> 534 bytes .../brep_wp/images/brep_wp_image261.gif | Bin 0 -> 450 bytes .../brep_wp/images/brep_wp_image262.gif | Bin 0 -> 509 bytes .../brep_wp/images/brep_wp_image263.gif | Bin 0 -> 775 bytes .../brep_wp/images/brep_wp_image264.gif | Bin 0 -> 525 bytes .../brep_wp/images/brep_wp_image265.gif | Bin 0 -> 210 bytes .../brep_wp/images/brep_wp_image266.gif | Bin 0 -> 288 bytes .../brep_wp/images/brep_wp_image267.gif | Bin 0 -> 462 bytes .../brep_wp/images/brep_wp_image268.gif | Bin 0 -> 327 bytes .../brep_wp/images/brep_wp_image269.gif | Bin 0 -> 495 bytes .../brep_wp/images/brep_wp_image270.gif | Bin 0 -> 480 bytes .../brep_wp/images/brep_wp_image271.gif | Bin 0 -> 509 bytes .../brep_wp/images/brep_wp_image272.gif | Bin 0 -> 446 bytes .../brep_wp/images/brep_wp_image273.gif | Bin 0 -> 512 bytes .../brep_wp/images/brep_wp_image274.gif | Bin 0 -> 771 bytes .../brep_wp/images/brep_wp_image275.gif | Bin 0 -> 2706 bytes .../brep_wp/images/brep_wp_image276.gif | Bin 0 -> 865 bytes .../brep_wp/images/brep_wp_image277.gif | Bin 0 -> 390 bytes .../brep_wp/images/brep_wp_image278.gif | Bin 0 -> 410 bytes .../brep_wp/images/brep_wp_image279.gif | Bin 0 -> 203 bytes .../brep_wp/images/brep_wp_image280.gif | Bin 0 -> 489 bytes .../brep_wp/images/brep_wp_image281.gif | Bin 0 -> 1031 bytes .../brep_wp/images/brep_wp_image282.gif | Bin 0 -> 1419 bytes .../brep_wp/images/brep_wp_image283.gif | Bin 0 -> 493 bytes .../brep_wp/images/brep_wp_image284.gif | Bin 0 -> 276 bytes .../brep_wp/images/brep_wp_image285.gif | Bin 0 -> 428 bytes .../brep_wp/images/brep_wp_image286.gif | Bin 0 -> 752 bytes .../brep_wp/images/brep_wp_image287.gif | Bin 0 -> 259 bytes .../brep_wp/images/brep_wp_image288.gif | Bin 0 -> 430 bytes .../brep_wp/images/brep_wp_image289.gif | Bin 0 -> 721 bytes .../brep_wp/images/brep_wp_image290.gif | Bin 0 -> 403 bytes .../brep_wp/images/brep_wp_image291.gif | Bin 0 -> 394 bytes .../brep_wp/images/brep_wp_image292.gif | Bin 0 -> 396 bytes .../brep_wp/images/brep_wp_image293.gif | Bin 0 -> 292 bytes .../brep_wp/images/brep_wp_image294.gif | Bin 0 -> 399 bytes .../brep_wp/images/brep_wp_image295.gif | Bin 0 -> 477 bytes .../brep_wp/images/brep_wp_image296.gif | Bin 0 -> 412 bytes .../brep_wp/images/brep_wp_image297.gif | Bin 0 -> 595 bytes .../brep_wp/images/brep_wp_image298.gif | Bin 0 -> 456 bytes .../brep_wp/images/brep_wp_image299.gif | Bin 0 -> 602 bytes .../brep_wp/images/brep_wp_image300.gif | Bin 0 -> 436 bytes .../brep_wp/images/brep_wp_image301.gif | Bin 0 -> 575 bytes .../brep_wp/images/brep_wp_image302.gif | Bin 0 -> 335 bytes .../brep_wp/images/brep_wp_image303.gif | Bin 0 -> 604 bytes .../brep_wp/images/brep_wp_image304.gif | Bin 0 -> 431 bytes .../brep_wp/images/brep_wp_image305.gif | Bin 0 -> 599 bytes .../brep_wp/images/brep_wp_image306.gif | Bin 0 -> 459 bytes .../brep_wp/images/brep_wp_image307.gif | Bin 0 -> 282 bytes .../brep_wp/images/brep_wp_image308.gif | Bin 0 -> 260 bytes .../brep_wp/images/brep_wp_image309.gif | Bin 0 -> 331 bytes .../brep_wp/images/brep_wp_image310.gif | Bin 0 -> 264 bytes .../brep_wp/images/brep_wp_image311.gif | Bin 0 -> 328 bytes .../brep_wp/images/brep_wp_image312.gif | Bin 0 -> 267 bytes .../brep_wp/images/brep_wp_image313.gif | Bin 0 -> 264 bytes .../brep_wp/images/brep_wp_image314.gif | Bin 0 -> 263 bytes .../brep_wp/images/brep_wp_image315.gif | Bin 0 -> 6957 bytes .../brep_wp/images/brep_wp_image316.gif | Bin 0 -> 362 bytes .../brep_wp/images/brep_wp_image317.gif | Bin 0 -> 357 bytes .../brep_wp/images/brep_wp_image318.gif | Bin 0 -> 472 bytes .../brep_wp/images/brep_wp_image319.gif | Bin 0 -> 1130 bytes .../brep_wp/images/brep_wp_image320.gif | Bin 0 -> 679 bytes .../brep_wp/images/brep_wp_image321.gif | Bin 0 -> 954 bytes .../brep_wp/images/brep_wp_image322.gif | Bin 0 -> 594 bytes .../brep_wp/images/brep_wp_image323.gif | Bin 0 -> 1144 bytes .../brep_wp/images/brep_wp_image324.gif | Bin 0 -> 966 bytes .../brep_wp/images/brep_wp_image325.gif | Bin 0 -> 707 bytes .../brep_wp/images/brep_wp_image326.gif | Bin 0 -> 213 bytes .../brep_wp/images/brep_wp_image327.gif | Bin 0 -> 964 bytes .../brep_wp/images/brep_wp_image328.gif | Bin 0 -> 781 bytes .../brep_wp/images/brep_wp_image329.gif | Bin 0 -> 1004 bytes .../brep_wp/images/brep_wp_image330.gif | Bin 0 -> 874 bytes .../brep_wp/images/brep_wp_image331.gif | Bin 0 -> 277 bytes .../brep_wp/images/brep_wp_image332.gif | Bin 0 -> 1341 bytes .../brep_wp/images/brep_wp_image333.gif | Bin 0 -> 631 bytes .../brep_wp/images/brep_wp_image334.gif | Bin 0 -> 401 bytes .../brep_wp/images/brep_wp_image335.gif | Bin 0 -> 401 bytes .../brep_wp/images/brep_wp_image336.gif | Bin 0 -> 840 bytes .../brep_wp/images/brep_wp_image337.gif | Bin 0 -> 1171 bytes .../brep_wp/images/brep_wp_image338.gif | Bin 0 -> 565 bytes .../brep_wp/images/brep_wp_image339.gif | Bin 0 -> 389 bytes .../brep_wp/images/brep_wp_image340.gif | Bin 0 -> 545 bytes .../brep_wp/images/brep_wp_image341.gif | Bin 0 -> 540 bytes .../brep_wp/images/brep_wp_image342.gif | Bin 0 -> 248 bytes .../brep_wp/images/brep_wp_image343.gif | Bin 0 -> 1386 bytes .../brep_wp/images/brep_wp_image344.gif | Bin 0 -> 372 bytes .../brep_wp/images/brep_wp_image345.gif | Bin 0 -> 363 bytes .../brep_wp/images/brep_wp_image346.gif | Bin 0 -> 490 bytes .../brep_wp/images/brep_wp_image347.gif | Bin 0 -> 1308 bytes .../brep_wp/images/brep_wp_image348.gif | Bin 0 -> 581 bytes .../brep_wp/images/brep_wp_image349.gif | Bin 0 -> 586 bytes .../brep_wp/images/brep_wp_image350.gif | Bin 0 -> 432 bytes .../brep_wp/images/brep_wp_image351.gif | Bin 0 -> 422 bytes .../brep_wp/images/brep_wp_image352.gif | Bin 0 -> 1150 bytes .../brep_wp/images/brep_wp_image353.gif | Bin 0 -> 1169 bytes .../brep_wp/images/brep_wp_image354.gif | Bin 0 -> 545 bytes .../brep_wp/images/brep_wp_image355.gif | Bin 0 -> 1401 bytes .../brep_wp/images/brep_wp_image356.gif | Bin 0 -> 421 bytes .../brep_wp/images/brep_wp_image357.gif | Bin 0 -> 528 bytes .../brep_wp/images/brep_wp_image358.gif | Bin 0 -> 534 bytes .../brep_wp/images/brep_wp_image359.gif | Bin 0 -> 2069 bytes .../brep_wp/images/brep_wp_image360.gif | Bin 0 -> 295 bytes .../brep_wp/images/brep_wp_image361.gif | Bin 0 -> 311 bytes .../brep_wp/images/brep_wp_image362.gif | Bin 0 -> 435 bytes .../brep_wp/images/brep_wp_image363.gif | Bin 0 -> 446 bytes .../brep_wp/images/brep_wp_image364.gif | Bin 0 -> 391 bytes .../brep_wp/images/brep_wp_image365.gif | Bin 0 -> 427 bytes .../brep_wp/images/brep_wp_image366.gif | Bin 0 -> 631 bytes .../brep_wp/images/brep_wp_image367.gif | Bin 0 -> 1265 bytes .../brep_wp/images/brep_wp_image368.gif | Bin 0 -> 492 bytes .../brep_wp/images/brep_wp_image369.gif | Bin 0 -> 306 bytes .../brep_wp/images/brep_wp_image370.gif | Bin 0 -> 404 bytes .../brep_wp/images/brep_wp_image371.gif | Bin 0 -> 534 bytes .../brep_wp/images/brep_wp_image372.gif | Bin 0 -> 530 bytes .../brep_wp/images/brep_wp_image373.gif | Bin 0 -> 263 bytes .../brep_wp/images/brep_wp_image374.gif | Bin 0 -> 249 bytes .../brep_wp/images/brep_wp_image375.gif | Bin 0 -> 427 bytes .../brep_wp/images/brep_wp_image376.gif | Bin 0 -> 257 bytes .../brep_wp/images/brep_wp_image377.gif | Bin 0 -> 300 bytes .../brep_wp/images/brep_wp_image378.gif | Bin 0 -> 254 bytes .../brep_wp/images/brep_wp_image379.gif | Bin 0 -> 429 bytes .../brep_wp/images/brep_wp_image380.gif | Bin 0 -> 258 bytes .../brep_wp/images/brep_wp_image381.gif | Bin 0 -> 251 bytes .../brep_wp/images/brep_wp_image382.gif | Bin 0 -> 256 bytes .../brep_wp/images/brep_wp_image383.gif | Bin 0 -> 1996 bytes .../brep_wp/images/brep_wp_image384.gif | Bin 0 -> 804 bytes .../brep_wp/images/brep_wp_image385.gif | Bin 0 -> 820 bytes .../brep_wp/images/brep_wp_image386.gif | Bin 0 -> 815 bytes .../brep_wp/images/brep_wp_image387.gif | Bin 0 -> 921 bytes .../brep_wp/images/brep_wp_image388.gif | Bin 0 -> 1139 bytes .../brep_wp/images/brep_wp_image389.gif | Bin 0 -> 1020 bytes .../brep_wp/images/brep_wp_image390.gif | Bin 0 -> 206 bytes .../brep_wp/images/brep_wp_image391.gif | Bin 0 -> 397 bytes .../brep_wp/images/brep_wp_image392.gif | Bin 0 -> 215 bytes .../brep_wp/images/brep_wp_image393.gif | Bin 0 -> 289 bytes .../brep_wp/images/brep_wp_image394.gif | Bin 0 -> 252 bytes .../brep_wp/images/brep_wp_image395.gif | Bin 0 -> 433 bytes .../brep_wp/images/brep_wp_image396.gif | Bin 0 -> 262 bytes .../brep_wp/images/brep_wp_image397.gif | Bin 0 -> 844 bytes .../brep_wp/images/brep_wp_image398.gif | Bin 0 -> 564 bytes .../brep_wp/images/brep_wp_image399.gif | Bin 0 -> 304 bytes .../brep_wp/images/brep_wp_image400.gif | Bin 0 -> 588 bytes .../brep_wp/images/brep_wp_image401.gif | Bin 0 -> 611 bytes .../brep_wp/images/brep_wp_image402.gif | Bin 0 -> 278 bytes .../brep_wp/images/brep_wp_image403.gif | Bin 0 -> 213 bytes .../brep_wp/images/brep_wp_image404.gif | Bin 0 -> 218 bytes .../brep_wp/images/brep_wp_image405.gif | Bin 0 -> 391 bytes .../brep_wp/images/brep_wp_image406.gif | Bin 0 -> 268 bytes .../brep_wp/images/brep_wp_image407.gif | Bin 0 -> 378 bytes .../brep_wp/images/brep_wp_image408.gif | Bin 0 -> 535 bytes .../brep_wp/images/brep_wp_image409.gif | Bin 0 -> 610 bytes .../brep_wp/images/brep_wp_image410.gif | Bin 0 -> 315 bytes .../brep_wp/images/brep_wp_image411.gif | Bin 0 -> 844 bytes .../brep_wp/images/brep_wp_image412.gif | Bin 0 -> 608 bytes .../brep_wp/images/brep_wp_image413.gif | Bin 0 -> 402 bytes .../brep_wp/images/brep_wp_image414.gif | Bin 0 -> 407 bytes .../brep_wp/images/brep_wp_image415.gif | Bin 0 -> 410 bytes .../brep_wp/images/brep_wp_image416.gif | Bin 0 -> 381 bytes .../brep_wp/images/brep_wp_image417.gif | Bin 0 -> 272 bytes .../brep_wp/images/brep_wp_image418.gif | Bin 0 -> 278 bytes .../brep_wp/images/brep_wp_image419.gif | Bin 0 -> 573 bytes .../brep_wp/images/brep_wp_image420.gif | Bin 0 -> 582 bytes .../brep_wp/images/brep_wp_image421.gif | Bin 0 -> 585 bytes .../brep_wp/images/brep_wp_image422.gif | Bin 0 -> 590 bytes .../brep_wp/images/brep_wp_image423.gif | Bin 0 -> 651 bytes .../brep_wp/images/brep_wp_image424.gif | Bin 0 -> 645 bytes .../brep_wp/images/brep_wp_image425.gif | Bin 0 -> 646 bytes .../brep_wp/images/brep_wp_image426.gif | Bin 0 -> 648 bytes .../brep_wp/images/brep_wp_image427.gif | Bin 0 -> 831 bytes .../brep_wp/images/brep_wp_image428.gif | Bin 0 -> 838 bytes .../brep_wp/images/brep_wp_image429.gif | Bin 0 -> 366 bytes .../brep_wp/images/brep_wp_image430.gif | Bin 0 -> 377 bytes .../brep_wp/images/brep_wp_image431.gif | Bin 0 -> 287 bytes .../brep_wp/images/brep_wp_image432.gif | Bin 0 -> 210 bytes .../brep_wp/images/brep_wp_image433.gif | Bin 0 -> 224 bytes .../brep_wp/images/brep_wp_image434.gif | Bin 0 -> 456 bytes .../brep_wp/images/brep_wp_image435.gif | Bin 0 -> 193 bytes .../brep_wp/images/brep_wp_image436.gif | Bin 0 -> 647 bytes .../brep_wp/images/brep_wp_image437.gif | Bin 0 -> 232 bytes .../brep_wp/images/brep_wp_image438.gif | Bin 0 -> 302 bytes .../brep_wp/images/brep_wp_image439.gif | Bin 0 -> 215 bytes .../brep_wp/images/brep_wp_image440.gif | Bin 0 -> 220 bytes .../brep_wp/images/brep_wp_image441.gif | Bin 0 -> 220 bytes .../brep_wp/images/brep_wp_image442.gif | Bin 0 -> 220 bytes .../brep_wp/images/brep_wp_image443.gif | Bin 0 -> 219 bytes .../brep_wp/images/brep_wp_image444.gif | Bin 0 -> 223 bytes .../brep_wp/images/brep_wp_image445.gif | Bin 0 -> 220 bytes .../brep_wp/images/brep_wp_image446.gif | Bin 0 -> 374 bytes .../brep_wp/images/brep_wp_image447.gif | Bin 0 -> 371 bytes .../brep_wp/images/brep_wp_image448.gif | Bin 0 -> 200 bytes .../brep_wp/images/brep_wp_image449.gif | Bin 0 -> 559 bytes .../brep_wp/images/brep_wp_image450.gif | Bin 0 -> 462 bytes .../brep_wp/images/brep_wp_image451.gif | Bin 0 -> 457 bytes .../brep_wp/images/brep_wp_image452.gif | Bin 0 -> 763 bytes .../brep_wp/images/brep_wp_image453.gif | Bin 0 -> 758 bytes .../brep_wp/images/brep_wp_image454.gif | Bin 0 -> 217 bytes .../brep_wp/images/brep_wp_image455.gif | Bin 0 -> 529 bytes .../brep_wp/images/brep_wp_image456.gif | Bin 0 -> 195 bytes .../brep_wp/images/brep_wp_image457.gif | Bin 0 -> 563 bytes .../brep_wp/images/brep_wp_image458.gif | Bin 0 -> 192 bytes .../brep_wp/images/brep_wp_image459.gif | Bin 0 -> 217 bytes .../brep_wp/images/brep_wp_image460.gif | Bin 0 -> 663 bytes .../brep_wp/images/brep_wp_image461.gif | Bin 0 -> 219 bytes .../brep_wp/images/brep_wp_image462.gif | Bin 0 -> 968 bytes .../brep_wp/images/brep_wp_image463.gif | Bin 0 -> 217 bytes .../brep_wp/images/brep_wp_image464.gif | Bin 0 -> 830 bytes dox/user_guides/draw_test_harness.md | 6396 ++++++++++------- dox/user_guides/iges/iges.md | 2 +- .../ocaf_functionmechanism_wp_image003.png | Bin 0 -> 2711 bytes .../ocaf_functionmechanism_wp_image005.png | Bin 0 -> 3929 bytes .../ocaf_functionmechanism_wp.md | 286 + .../images/ocaf_tree_wp_image003.png | Bin 0 -> 14939 bytes .../images/ocaf_tree_wp_image004.png | Bin 0 -> 35396 bytes .../images/ocaf_tree_wp_image005.png | Bin 0 -> 42651 bytes .../images/ocaf_tree_wp_image006.png | Bin 0 -> 15868 bytes dox/user_guides/ocaf_tree_wp/ocaf_tree_wp.md | 139 + .../ocaf_wp/images/ocaf_wp_image003.png | Bin 0 -> 19732 bytes .../ocaf_wp/images/ocaf_wp_image004.png | Bin 0 -> 48426 bytes .../ocaf_wp/images/ocaf_wp_image005.png | Bin 0 -> 42212 bytes .../ocaf_wp/images/ocaf_wp_image006.png | Bin 0 -> 35919 bytes dox/user_guides/ocaf_wp/ocaf_wp.md | 332 + dox/user_guides/step/step.md | 16 +- dox/user_guides/user_guides.md | 10 +- .../images/visualization_image003.png | Bin 29607 -> 10787 bytes .../images/visualization_image004.png | Bin 40752 -> 69480 bytes .../images/visualization_image023.png | Bin 9080 -> 14742 bytes .../visualization/visualization.md | 4245 +++++------ .../voxels_wp/images/voxels_wp_image003.jpg | Bin 0 -> 11179 bytes .../voxels_wp/images/voxels_wp_image004.jpg | Bin 0 -> 21169 bytes .../voxels_wp/images/voxels_wp_image005.jpg | Bin 0 -> 25206 bytes .../voxels_wp/images/voxels_wp_image006.jpg | Bin 0 -> 30746 bytes .../voxels_wp/images/voxels_wp_image007.jpg | Bin 0 -> 14745 bytes .../voxels_wp/images/voxels_wp_image008.jpg | Bin 0 -> 21986 bytes .../voxels_wp/images/voxels_wp_image009.jpg | Bin 0 -> 33924 bytes .../voxels_wp/images/voxels_wp_image010.jpg | Bin 0 -> 7400 bytes dox/user_guides/voxels_wp/voxels_wp.md | 157 + 527 files changed, 10702 insertions(+), 5825 deletions(-) create mode 100644 dox/dev_guides/contribution_workflow/contribution_workflow.md create mode 100644 dox/dev_guides/contribution_workflow/images/OCCT_ContributionWorkflow_V3_image001.png create mode 100644 dox/dev_guides/contribution_workflow/images/OCCT_ContributionWorkflow_V3_image002.jpg create mode 100644 dox/dev_guides/git_guide/git_guide.md create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image001.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image002.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image003.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image004.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image005.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image006.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image007.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image008.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image009.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image010.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image011.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image012.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image013.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image014.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image015.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image016.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image017.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image018.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image019.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image020.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image021.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image022.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image023.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image024.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image025.png create mode 100644 dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image026.png create mode 100644 dox/user_guides/brep_wp/brep_wp.md create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image003.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image004.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image005.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image006.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image007.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image008.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image009.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image010.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image011.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image012.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image013.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image014.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image015.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image016.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image017.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image018.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image019.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image020.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image021.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image022.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image023.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image024.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image025.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image026.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image027.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image028.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image029.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image030.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image031.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image032.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image033.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image034.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image035.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image036.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image037.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image038.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image039.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image040.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image041.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image042.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image043.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image044.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image045.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image046.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image047.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image048.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image049.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image050.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image051.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image052.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image053.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image054.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image055.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image056.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image057.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image058.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image059.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image060.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image061.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image062.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image063.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image064.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image065.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image066.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image067.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image068.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image069.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image070.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image071.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image072.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image073.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image074.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image075.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image076.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image077.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image078.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image079.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image080.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image081.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image082.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image083.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image084.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image085.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image086.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image087.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image088.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image089.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image090.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image091.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image092.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image093.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image094.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image095.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image096.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image097.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image098.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image099.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image100.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image101.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image102.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image103.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image104.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image105.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image106.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image107.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image108.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image109.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image110.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image111.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image112.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image113.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image114.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image115.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image116.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image117.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image118.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image119.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image120.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image121.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image122.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image123.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image124.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image125.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image126.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image127.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image128.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image129.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image130.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image131.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image132.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image133.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image134.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image135.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image136.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image137.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image138.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image139.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image140.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image141.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image142.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image143.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image144.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image145.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image146.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image147.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image148.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image149.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image150.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image151.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image152.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image153.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image154.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image155.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image156.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image157.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image158.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image159.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image160.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image161.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image162.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image163.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image164.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image165.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image166.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image167.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image168.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image169.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image170.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image171.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image172.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image173.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image174.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image175.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image176.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image177.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image178.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image179.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image180.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image181.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image182.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image183.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image184.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image185.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image186.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image187.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image188.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image189.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image190.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image191.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image192.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image193.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image194.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image195.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image196.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image197.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image198.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image199.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image200.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image201.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image202.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image203.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image204.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image205.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image206.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image207.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image208.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image209.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image210.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image211.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image212.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image213.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image214.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image215.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image216.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image217.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image218.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image219.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image220.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image221.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image222.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image223.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image224.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image225.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image226.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image227.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image228.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image229.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image230.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image231.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image232.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image233.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image234.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image235.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image236.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image237.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image238.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image239.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image240.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image241.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image242.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image243.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image244.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image245.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image246.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image247.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image248.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image249.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image250.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image251.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image252.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image253.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image254.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image255.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image256.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image257.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image258.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image259.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image260.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image261.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image262.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image263.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image264.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image265.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image266.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image267.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image268.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image269.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image270.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image271.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image272.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image273.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image274.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image275.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image276.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image277.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image278.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image279.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image280.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image281.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image282.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image283.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image284.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image285.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image286.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image287.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image288.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image289.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image290.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image291.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image292.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image293.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image294.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image295.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image296.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image297.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image298.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image299.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image300.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image301.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image302.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image303.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image304.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image305.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image306.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image307.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image308.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image309.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image310.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image311.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image312.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image313.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image314.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image315.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image316.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image317.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image318.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image319.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image320.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image321.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image322.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image323.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image324.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image325.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image326.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image327.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image328.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image329.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image330.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image331.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image332.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image333.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image334.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image335.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image336.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image337.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image338.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image339.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image340.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image341.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image342.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image343.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image344.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image345.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image346.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image347.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image348.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image349.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image350.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image351.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image352.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image353.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image354.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image355.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image356.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image357.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image358.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image359.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image360.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image361.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image362.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image363.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image364.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image365.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image366.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image367.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image368.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image369.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image370.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image371.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image372.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image373.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image374.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image375.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image376.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image377.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image378.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image379.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image380.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image381.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image382.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image383.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image384.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image385.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image386.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image387.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image388.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image389.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image390.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image391.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image392.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image393.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image394.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image395.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image396.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image397.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image398.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image399.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image400.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image401.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image402.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image403.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image404.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image405.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image406.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image407.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image408.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image409.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image410.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image411.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image412.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image413.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image414.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image415.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image416.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image417.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image418.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image419.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image420.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image421.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image422.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image423.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image424.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image425.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image426.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image427.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image428.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image429.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image430.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image431.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image432.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image433.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image434.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image435.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image436.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image437.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image438.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image439.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image440.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image441.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image442.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image443.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image444.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image445.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image446.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image447.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image448.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image449.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image450.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image451.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image452.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image453.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image454.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image455.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image456.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image457.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image458.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image459.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image460.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image461.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image462.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image463.gif create mode 100644 dox/user_guides/brep_wp/images/brep_wp_image464.gif create mode 100644 dox/user_guides/ocaf_functionmechanism_wp/images/ocaf_functionmechanism_wp_image003.png create mode 100644 dox/user_guides/ocaf_functionmechanism_wp/images/ocaf_functionmechanism_wp_image005.png create mode 100644 dox/user_guides/ocaf_functionmechanism_wp/ocaf_functionmechanism_wp.md create mode 100644 dox/user_guides/ocaf_tree_wp/images/ocaf_tree_wp_image003.png create mode 100644 dox/user_guides/ocaf_tree_wp/images/ocaf_tree_wp_image004.png create mode 100644 dox/user_guides/ocaf_tree_wp/images/ocaf_tree_wp_image005.png create mode 100644 dox/user_guides/ocaf_tree_wp/images/ocaf_tree_wp_image006.png create mode 100644 dox/user_guides/ocaf_tree_wp/ocaf_tree_wp.md create mode 100644 dox/user_guides/ocaf_wp/images/ocaf_wp_image003.png create mode 100644 dox/user_guides/ocaf_wp/images/ocaf_wp_image004.png create mode 100644 dox/user_guides/ocaf_wp/images/ocaf_wp_image005.png create mode 100644 dox/user_guides/ocaf_wp/images/ocaf_wp_image006.png create mode 100644 dox/user_guides/ocaf_wp/ocaf_wp.md create mode 100644 dox/user_guides/voxels_wp/images/voxels_wp_image003.jpg create mode 100644 dox/user_guides/voxels_wp/images/voxels_wp_image004.jpg create mode 100644 dox/user_guides/voxels_wp/images/voxels_wp_image005.jpg create mode 100644 dox/user_guides/voxels_wp/images/voxels_wp_image006.jpg create mode 100644 dox/user_guides/voxels_wp/images/voxels_wp_image007.jpg create mode 100644 dox/user_guides/voxels_wp/images/voxels_wp_image008.jpg create mode 100644 dox/user_guides/voxels_wp/images/voxels_wp_image009.jpg create mode 100644 dox/user_guides/voxels_wp/images/voxels_wp_image010.jpg create mode 100644 dox/user_guides/voxels_wp/voxels_wp.md diff --git a/dox/FILES.txt b/dox/FILES.txt index 50d4b4748d..77dd56c171 100644 --- a/dox/FILES.txt +++ b/dox/FILES.txt @@ -21,6 +21,11 @@ user_guides/ocaf/ocaf.md user_guides/tobj/tobj.md user_guides/shape_healing/shape_healing.md user_guides/draw_test_harness.md +user_guides/brep_wp/brep_wp.md +user_guides/ocaf_functionmechanism_wp/ocaf_functionmechanism_wp.md +user_guides/ocaf_tree_wp/ocaf_tree_wp.md +user_guides/ocaf_wp/ocaf_wp.md +user_guides/voxels_wp/voxels_wp.md dev_guides/dev_guides.md dev_guides/contribution/coding_rules.md @@ -28,6 +33,9 @@ dev_guides/cdl/cdl.md dev_guides/tests/tests.md dev_guides/documentation/documentation.md dev_guides/wok/wok.md +dev_guides/contribution_workflow/contribution_workflow.md +dev_guides/git_guide/git_guide.md + dev_guides/building/building.md dev_guides/building/3rdparty/3rdparty_windows.md diff --git a/dox/dev_guides/cdl/cdl.md b/dox/dev_guides/cdl/cdl.md index 327170b442..a54a4be222 100644 --- a/dox/dev_guides/cdl/cdl.md +++ b/dox/dev_guides/cdl/cdl.md @@ -7,7 +7,7 @@ Please note that CDL is considered as obsolete and is to be removed in one of future releases of OCCT. -@section occt_1819379591_354121062 CDL and Application Architecture +@section occt_cdl_1 CDL and Application Architecture CDL is the component definition language of the Open CASCADE Technology (**OCCT**) programming platform. Some components, which CDL allows you to create, are specific to OCCT application architecture. These and other components, which you can define using CDL include the following: @@ -16,71 +16,61 @@ CDL is the component definition language of the Open CASCADE Technology (**OCCT * Schema * Executable * Client. + A **class** is the fundamental software component in object-oriented development. Because of a very large number of resources used in large-scale applications, the **class** itself is too small to be used as a basic management unit. -So, while the class is the basic data component defined in CDL, this language also provides a way to group classes, **enumerations**, and **exceptions **together – the **package**. A package groups together a number of classes, which have semantic links. For example, a geometry package would contain Point, Line, and Circle classes. A package can also contain enumerations, exceptions, and package methods. In practice, a class name is prefixed with the name of its package e.g. Geom_Circle. +So, while the class is the basic data component defined in CDL, this language also provides a way to group classes, **enumerations**, and **exceptions** together – the **package**. A package groups together a number of classes, which have semantic links. For example, a geometry package would contain Point, Line, and Circle classes. A package can also contain enumerations, exceptions, and package methods. In practice, a class name is prefixed with the name of its package e.g. *Geom_Circle*. Using the services described in the **packages**, you can construct an **executable**. You can also group together services provided by **packages**. To save data in a file, you need to define persistent classes. Then, you group these classes in a schema, which provides the necessary read/write tools. - @image html /dev_guides/cdl/images/cdl_image003.png - @image latex /dev_guides/cdl/images/cdl_image003.png - -Figure 1. Building an Open CASCADE Technology application -@section occt_1819379591_986437237 2. Introduction to CDL -@subsection occt_1819379591_98643723721 Purposes of the Language +@image html /dev_guides/cdl/images/cdl_image003.png "Building an Open CASCADE Technology application" +@image latex /dev_guides/cdl/images/cdl_image003.png "Building an Open CASCADE Technology application" + +@section occt_cdl_2 Introduction to CDL +@subsection occt_cdl_2_1 Purposes of the Language + You can use CDL to **define** **data** in the Open CASCADE Technology environment. CDL allows you to define various kinds of data types supporting the application architecture and development methodology, which you envision. CDL is neither an analysis formalism (e.g. Booch methodology) nor a data manipulation language (e.g. C++). You use CDL in the **design** **phase** of a development process to define a set of software components which best model the concepts stated in the application specification. - @image html /dev_guides/cdl/images/cdl_image004.png - @image latex /dev_guides/cdl/images/cdl_image004.png +@image html /dev_guides/cdl/images/cdl_image004.png "The Development Process" +@image latex /dev_guides/cdl/images/cdl_image004.png "The Development Process" -Figure 2. The Development Process -From a structural point of view, CDL is an object-oriented language. It is centered on the notion of the **class **- a data type, which represents an elementary concept. CDL offers various means of organizing classes, mostly under the fundamental form of **packages**. A package contains a set of classes, which share some semantic relationship. This greatly simplifies your task of managing individual classes when confronted with a very large number of them. +From a structural point of view, CDL is an object-oriented language. It is centered on the notion of the **class** - a data type, which represents an elementary concept. CDL offers various means of organizing classes, mostly under the fundamental form of **packages**. A package contains a set of classes, which share some semantic relationship. This greatly simplifies your task of managing individual classes when confronted with a very large number of them. -Once you have defined the classes and packages using CDL, you can implement their **methods **- i.e., their functionality - in one of the data manipulation languages supported by the OCCT environment (currently C++). +Once you have defined the classes and packages using CDL, you can implement their **methods** - i.e., their functionality - in one of the data manipulation languages supported by the OCCT environment (currently C++). Even though you can describe classes directly in C++ and save them as header files (.hxx), to do so would forfeit all the advantages of using CDL. These are: * Precise, complete, and easy-to-read description of the software components. * Creation of a link with the database; object persistence forms part of the predefined environment of the language. * Multi-language access to the services of an application engine – a specific architectural form created using the CDL tools, which serves as the motor of an application. -@subsection occt_1819379591_98643723722 Overview of CDL + +@subsection occt_cdl_2_2 Overview of CDL -CDL is an object-oriented language. In other words, it structures a system around data types rather than around the actions carried out on them. In this context, an **object **is an **instance **of a data type, and its definition determines how you can use it. Each data type is implemented by one or more classes, which make up the basic elements of the system. -@subsubsection occt_1819379591_986437237221 Classes +CDL is an object-oriented language. In other words, it structures a system around data types rather than around the actions carried out on them. In this context, an **object** is an **instance** of a data type, and its definition determines how you can use it. Each data type is implemented by one or more classes, which make up the basic elements of the system. -A class is an implementation of a **data type**. It defines its **behavior **and its **representation**. +@subsubsection occt_cdl_2_2_1 Classes -The behavior of a class is its programming interface - the services offered by its **methods**. The representation of a class is its data structure - the **fields**,** **which store its data. +A class is an implementation of a **data type**. It defines its **behavior** and its **representation**. -Every object is an **instance **of its class. For example, the object *p *of the data type *Point *is an instance of the class Point. +The behavior of a class is its programming interface - the services offered by its **methods**. The representation of a class is its data structure - the **fields**, which store its data. + +Every object is an **instance** of its class. For example, the object *p* of the data type *Point* is an instance of the class *Point*. The class Point could be defined as in the example below: @code class Point from GeomPack -@endcode -@code ---Purpose: represents a point in 3D space. -@endcode -@code is -@endcode -@code Create returns Point; -@endcode -@code fields -@endcode -@code x, y, z : Real; -@endcode -@code end Point; @endcode @@ -89,53 +79,59 @@ The definition of this class comprises two sections: * one starting with the keywords **is** * one starting with the keyword **fields**. -The first section contains a list of methods available to the clients of the class. The second section defines the way in which instances are represented. Once this class has been compiled you could **instantiate **its data type in a C++ test program as in the example below: +The first section contains a list of methods available to the clients of the class. The second section defines the way in which instances are represented. Once this class has been compiled you could **instantiate** its data type in a C++ test program as in the example below: @code GeomPack_Point p; @endcode -@subsubsection occt_1819379591_986437237222 Categories of Types -You declare the variables of a **data manipulation language **as being of certain data types. These fall into two categories: + +@subsubsection occt_cdl_2_2_2 Categories of Types + +You declare the variables of a **data manipulation language** as being of certain data types. These fall into two categories: * Data types manipulated by handle (or reference) * Data types manipulated by value - @image html /dev_guides/cdl/images/cdl_image005.png - @image latex /dev_guides/cdl/images/cdl_image005.png - -Figure 3. Manipulation of data types - + @image html /dev_guides/cdl/images/cdl_image005.png "Manipulation of data types" + @image latex /dev_guides/cdl/images/cdl_image005.png "Manipulation of data types" As seen above, you implement data types using classes. However, classes not only define their data representation and methods available for their instances, but they also define how the instances will be manipulated: * A data type manipulated by value contains the instance itself. * A data type manipulated by handle contains a reference to the instance. -The most obvious examples of data types manipulated by value are the predefined **primitive types**: Boolean, Character, Integer, Real ... +The most obvious examples of data types manipulated by value are the predefined **primitive types**: Boolean, Character, Integer, Real... A variable of a data type manipulated by handle, which is not attached to an object, is said to be **null**. To reference an object, you need to instantiate the class with one of its constructors. This is done in C++ as in the following syntax: +~~~~~ +Handle(myClass) m = new myClass; +~~~~~ -@subsubsection occt_1819379591_986437237223 Persistence +@subsubsection occt_cdl_2_2_3 Persistence -An object is called **persistent **if it can be permanently stored. In other words, you can use the object again at a later date, both in the application, which created it, and in another application. +An object is called **persistent** if it can be permanently stored. In other words, you can use the object again at a later date, both in the application, which created it, and in another application. -In order to make an object persistent, you need to declare it in CDL as inheriting from the **Persistent** class, or to have one of its parent classes inheriting from the **Persistent **class. +In order to make an object persistent, you need to declare it in CDL as inheriting from the **Persistent** class, or to have one of its parent classes inheriting from the *Persistent* class. -Note that the classes inheriting from the Persistent class are handled by reference. +Note that the classes inheriting from the *Persistent* class are handled by reference. **Example** +~~~~~ +class Watch inherits Persistent +~~~~~ -In this example, building the application, you add the Watch class to the corresponding schema of data types. -If, running the application, you instantiate an object of the Watch class, you have the possibility of storing it in a file. -You cannot store objects instantiated from classes, which inherit from the **Storable** class. However, you can store them as fields of an object, which inherits from Persistent. +In this example, building the application, you add the *Watch* class to the corresponding schema of data types. +If, running the application, you instantiate an object of the *Watch* class, you have the possibility of storing it in a file. +You cannot store objects instantiated from classes, which inherit from the *Storable* class. However, you can store them as fields of an object, which inherits from *Persistent*. Note that the objects inheriting from Storable are handled by value. -**Example** +**Example** +~~~~~ If class WatchSpring inherits Storable //then this could be stored as a field of a Watch @@ -146,31 +142,33 @@ fields name : ConstructorName; powersource : WatchSpring; end; +~~~~~ +@subsubsection occt_cdl_2_2_4 Packages -@subsubsection occt_1819379591_986437237224 Packages +In large-scale long-term development the task of marshalling potentially thousands of classes is likely to quickly prove unmanageable. CDL introduces the notion of **package** of classes containing a set of classes, which have some semantic or syntactic relationship. For example, all classes representing a particular set of electronic components might make up a package called Diode. -In large-scale long-term development the task of marshalling potentially thousands of classes is likely to quickly prove unmanageable. CDL introduces the notion of **package **of classes containing a set of classes, which have some semantic or syntactic relationship. For example, all classes representing a particular set of electronic components might make up a package called Diode. +As the package name prefixes the class name when implementing such class (in C++ for example), classes belonging to different packages can have the same name. For example, two packages, one dealing with finance and the other dealing with aircraft maneuvers, might both contain a class called *Bank*, without any possibility of confusion. -As the package name prefixes the class name when implementing such class (in C++ for example), classes belonging to different packages can have the same name. For example, two packages, one dealing with finance and the other dealing with aircraft maneuvers, might both contain a class called Bank, without any possibility of confusion. **Example** - +~~~~~ Finance_Bank Attitude_Bank +~~~~~ - -@subsubsection occt_1819379591_986437237225 Inheritance +@subsubsection occt_cdl_2_2_5 Inheritance The purpose of inheritance is to reduce development workload. The inheritance mechanisms allow you to declare a new class as already containing the characteristics of an existing class. This new class can then be rapidly specialized for a task at hand. This eliminates the necessity of developing each component “from scratch”. -For example, having already developed a class BankAccount, you can quickly specialize new classes - SavingsAccount, LongTermDepositAccount, MoneyMarketAccount, RevolvingCreditAccount, etc.. +For example, having already developed a class *BankAccount*, you can quickly specialize new classes - *SavingsAccount, LongTermDepositAccount, MoneyMarketAccount, RevolvingCreditAccount*, etc.. -As a consequence, when two or more classes inherit from a parent (or ancestor) class, all these classes surely inherit the behavior of their parent (or ancestor). For example, if the parent class BankAccount contains the method Print that tells it to print itself out, then all its descendent classes offer the same service. +As a consequence, when two or more classes inherit from a parent (or ancestor) class, all these classes surely inherit the behavior of their parent (or ancestor). For example, if the parent class *BankAccount* contains the method *Print* that tells it to print itself out, then all its descendent classes offer the same service. One way of ensuring the use of inheritance is to declare classes at the top of a hierarchy as being **deferred**. In such classes, the inherited methods are not implemented. This forces you to create a new class used to redefine the methods. In this way, you guarantee a certain minimum common behavior among descendent classes. -**Example** +**Example** +~~~~~ deferred class BankAccount inherits Persistent is ....... @@ -178,36 +176,40 @@ fields name : AccountHolderName; balance : CreditBalance; end; +~~~~~ - -@subsubsection occt_1819379591_986437237226 Genericity +@subsubsection occt_cdl_2_2_6 Genericity You will often wish to model a certain type of behavior as a class. For example, you will need a list modeled as a class. -In order to be able to list different objects, the class **List **must be able to accept different data types as parameters. This is where genericity comes in: you first declare a list declared as the generic class **List**, willing to accept any data type (or only a particular set of acceptable data types). Then, when you want to make a list of a certain type of object, you instantiate the class **List **with the appropriate data type. +In order to be able to list different objects, the class *List* must be able to accept different data types as parameters. This is where genericity comes in: you first declare a list declared as the generic class *List*, willing to accept any data type (or only a particular set of acceptable data types). Then, when you want to make a list of a certain type of object, you instantiate the class *List* with the appropriate data type. + **Example** +~~~~~ generic class NewList (Item) inherits OldList is ..... end ; +~~~~~ Items may be of any type, an Integer or a Real for example. When defining the package, add the following line: **Example** - +~~~~~ class NewListOfInteger instantiates NewList (Integer); +~~~~~ - -@subsubsection occt_1819379591_986437237227 Exceptions +@subsubsection occt_cdl_2_2_7 Exceptions The behavior of any object is implemented by methods, which you define in its class declaration. The definition of these methods includes not only their signature (their programming interface) but also their domain of validity. In CDL, this domain is expressed by **exceptions**. Exceptions are raised under various error conditions. This mechanism is a safeguard of software quality. -@subsubsection occt_1819379591_986437237228 Completeness + +@subsubsection occt_cdl_2_2_8 Completeness You use CDL to define data types. Such definitions are not considered complete unless they contain the required amount of structured commentary. @@ -216,67 +218,63 @@ The compiler does not enforce this required degree of completeness, so it is th Completeness is regarded as an essential component of long-term viability of a software component. -@subsection occt_1819379591_98643723723 Lexical Conventions -@subsubsection occt_1819379591_986437237231 Syntax notation +@subsection occt_cdl_2_3 Lexical Conventions +@subsubsection occt_cdl_2_3_1 Syntax notation In this manual, CDL declarations are described using a simple variant of the Backus-Naur formalism. Note the following: - * Italicized words, which may also be hyphenated, denote syntactical categories, for example: - -*declaration-of-a-non-generic-class* - - * Keywords appear in bold type: - -**class** - - * Brackets enclose optional elements: - -identifier [**from **package-name] - - * Curly braces enclose repeated elements. The element may appear zero or many times: - -integer ::= digit{digit} - + * Italicized words, which may also be hyphenated, denote syntactical categories, for example *declaration-of-a-non-generic-class* ; + * Keywords appear in bold type: **class** ; + * Brackets enclose optional elements: +~~~~~ + identifier [from package-name] +~~~~~ + * Curly braces enclose repeated elements. The element may appear zero or many times: +~~~~~ + integer ::= digit{digit} +~~~~~ * Vertical bars separate alternatives: - -passing-method ::= [**in**] | **out **| **in out** - +~~~~~ +passing-method ::= [in] | out | in out +~~~~~ * Two apostrophes enclose a character or a string of characters, which must appear: - +~~~~~ exponent ::= ’E’[’+’]integer | ’E-’ integer - -NOTE -So as to introduce ideas progressively, the examples presented in this manual may be incomplete, and thus not compilable by the CDL compiler. +~~~~~ +**NOTE** To introduce the ideas progressively, the examples presented in this manual may be incomplete, and thus not compilable by the CDL compiler. -@subsubsection occt_1819379591_986437237232 Lexical elements +@subsubsection occt_cdl_2_3_2 Lexical elements A CDL source is composed of text from one or more compiled units. The text of each compiled unit is a string of separate lexical elements: **identifiers**, **keywords**, **constants**, and **separators**. The separators (blank spaces, end of line, format characters) are ignored by the CDL compiler, but these are often necessary for separating identifiers, keywords, and constants. -@subsubsection occt_1819379591_986437237233 Comments +@subsubsection occt_cdl_2_3_3 Comments With CDL, you cannot use the expression of all useful information about a development unit. In particular, certain information is more easily expressed in natural language. You can add such information to the CDL description of a data type. Rubrics and free comments are to be differentiated: -**Free comments **are preceded by the characters “--” (two hyphens), and they terminate at the end of the line in which they appear. +**Free comments** are preceded by the characters “--” (two hyphens), and they terminate at the end of the line in which they appear. **Example** - +~~~~~ --This is a comment +~~~~~ -Unlike rubrics, free comments can appear before or after any lexical element. The first written character of the comment itself *must not *be a hyphen. If a hyphen is necessary make sure it is preceded by a blank. +Unlike rubrics, free comments can appear before or after any lexical element. The first written character of the comment itself *must not* be a hyphen. If a hyphen is necessary make sure it is preceded by a blank. **Example** - +~~~~~ -- -List item +~~~~~ +**Rubrics** are various types of comments attached to CDL components. A rubric is a comment made up of three hyphens, name of the rubric (without any intermediary space) and then a colon and a space. It is terminated by the beginning of the following rubric, or by the end of the commentary. -**Rubrics **are various types of comments attached to CDL components. A rubric is a comment made up of three hyphens, name of the rubric (without any intermediary space) and then a colon and a space. It is terminated by the beginning of the following rubric, or by the end of the commentary. **Example** - +~~~~~ ---Purpose:This is an example of a --rubric composed of a --comment which extends to --four lines. +~~~~~ The different categories of rubrics and the form of their content do not depend on the Component Description Language, but on the tool for which it is intended. @@ -291,33 +289,64 @@ These rubrics can be attached to: * Executables * Clients -@subsubsection occt_1819379591_986437237234 Identifiers +@subsubsection occt_cdl_2_3_4 Identifiers An identifier is an arbitrary chain of characters, either letters or digits, but it must begin with a letter. The underscore “_” is considered to be a letter as long as it doesn’t appear at the beginning or the end of an identifier. + Capital and small letters are not equivalent (i.e. AB, Ab, aB, ab are four different identifiers). -@subsubsection occt_1819379591_986437237235 Keywords +@subsubsection occt_cdl_2_3_5 Keywords The following is a list of keywords. -alias any as asynchronous -class client deferred end -enumeration exception executable external -fields friends from generic -immutable imported inherits instantiates -is library like me -mutable myclass out package -pointer primitive private protected -raises redefined returns schema -static to uses virtual +* alias +* any +* as +* asynchronous +* class +* client +* deferred +* end +* enumeration +* exception +* executable +* external +* fields +* friends +* from +* generic +* immutable +* imported +* inherits +* instantiates +* is +* library +* like +* me +* mutable +* myclass +* out +* package +* pointer +* primitive +* private +* protected +* raises +* redefined +* returns +* schema +* static +* to +* uses +* virtual In a CDL file, the following characters are used as punctuation: ; : , = ( ) [ ] ‘ “ -@subsubsection occt_1819379591_986437237236 Constants +@subsubsection occt_cdl_2_3_6 Constants There are three categories of constants: @@ -325,123 +354,131 @@ There are three categories of constants: * Literal * Named -***Numeric Constants*** +#### Numeric Constants There are two types of numeric constants: integer and real. -An **integer **constant consists of a string of digits, which may or may not be preceded by a sign. Integer constants express whole numbers. -**Examples** -1995 0 -273 +78 +An **integer** constant consists of a string of digits, which may or may not be preceded by a sign. Integer constants express whole numbers. -A **real **constant may or may not be preceded by a sign, and consists of an integral part followed by a decimal point and a fractional part (either one or both parts may be null, but both parts must always be present). It may also be followed by the letter E to indicate that the following figures represent the exponent (also optionally signed). **Examples** +~~~~~ +1995 0 -273 +78 +~~~~~ +A **real** constant may or may not be preceded by a sign, and consists of an integral part followed by a decimal point and a fractional part (either one or both parts may be null, but both parts must always be present). It may also be followed by the letter E to indicate that the following figures represent the exponent (also optionally signed). +**Examples** +~~~~~ 5.0 0.0 -0.8E+3 5.67E-12 - -***Literal Constants*** +~~~~~ +#### Literal Constants Literal constants include individual characters and strings of characters. -An **individual character **constant is a single printable character enclosed by two apostrophes. (See the definition of the class Character in the Standard Package). -**Examples** +An **individual character** constant is a single printable character enclosed by two apostrophes. (See the definition of the class Character in the Standard Package). +**Examples** +~~~~~ ‘B’ ‘y’ ‘&’ ‘*’ ‘’’ ‘‘ +~~~~~ +A **string** constant is composed of printable characters enclosed by quotation marks. -A **string **constant is composed of printable characters enclosed by quotation marks. **Examples** - +~~~~~ ’’G’’ ’’jjjj’’ ’’This is a character string, isn’t it?’’ +~~~~~ +The **quotation mark** can itself appear within a character string as long as it is preceded by a backslash. -The **quotation mark **can itself appear within a character string as long as it is preceded by a backslash. **Examples** - +~~~~~ ’’This film was originally called \’’Gone with the Tide\’’.’’ +~~~~~ -***Named Constants*** +#### Named Constants Named constants are sub-divided into two categories: Booleans and enumerations. -**Booleans **can be of two types: True or False. - -An **enumeration **constant is an identifier, which appears in the description of an enumeration. - -@section occt_1819379591_1718435309 3. Software Components +**Booleans** can be of two types: True or False. +An **enumeration** constant is an identifier, which appears in the description of an enumeration. +@section occt_cdl_3 Software Components -@subsection occt_1819379591_171843530931 Predefined Resources -@subsubsection occt_1819379591_1718435309311 Primitive types +@subsection occt_cdl_3_1 Predefined Resources +@subsubsection occt_cdl_3_1_1 Primitive types Primitive types are predefined in the language and they are **manipulated by value**. Four of these primitives are known to the schema of the database because they inherit from the class **Storable**. In other words, they can be used in the implementation of persistent objects, either when contained in entities declared within the methods of the object, or when they form part of the internal representation of the object. -The primitives inheriting from Storable are the following: +The primitives inheriting from **Storable** are the following: -**Boolean **Is used to represent logical data. It has only two values: -*True *and *False*. -**Byte **8-bit number. -**Character **Designates any ASCII character. -**ExtCharacter **Is an extended character. -**Integer **Is an integer number. -**Real **Denotes a real number (i.e. one with a whole and a fractional part, either of which may be null). -**ShortReal **Real with a smaller choice of values and memory size. +* **Boolean** Is used to represent logical data. It has only two values: *True* and *False*. +* **Byte** 8-bit number. +* **Character** Designates any ASCII character. +* **ExtCharacter** Is an extended character. +* **Integer** Is an integer number. +* **Real** Denotes a real number (i.e. one with a whole and a fractional part, either of which may be null). +* **ShortReal** Real with a smaller choice of values and memory size. There are also non-storable primitives. They are: -**CString **Is used for literal constants. -**ExtString **Is an extended string. -**Address **Represents a byte address of undetermined size. +* **CString** Is used for literal constants. +* **ExtString** Is an extended string. +* **Address** Represents a byte address of undetermined size. The services offered by each of these types are described in the Standard Package. -@subsubsection occt_1819379591_1718435309312 Manipulating types by reference (by handle) +@subsubsection occt_cdl_3_1_2 Manipulating types by reference (by handle) Two types are manipulated by handle: - * Types defined using classes inheriting from the **Persistent **class are storable in a file. - - * Types defined using classes inheriting from the **Transient **class. + * Types defined using classes inheriting from the **Persistent** class are storable in a file. + * Types defined using classes inheriting from the **Transient** class. + These types are not storable as such in a file. -@image html /dev_guides/cdl/images/cdl_image006.png -@image latex /dev_guides/cdl/images/cdl_image006.png +@image html /dev_guides/cdl/images/cdl_image006.png "Manipulation of a data type by reference" +@image latex /dev_guides/cdl/images/cdl_image006.png "Manipulation of a data type by reference" -Figure 4. Manipulation of a data type by reference - -@subsubsection occt_1819379591_1718435309313 Manipulating types by value +@subsubsection occt_cdl_3_1_3 Manipulating types by value Types, which are manipulated by value, behave in a more direct fashion than those manipulated by handle. As a consequence, they can be expected to perform operations faster, but they cannot be stored independently in a file. You can store types known to the schema (i.e. either primitives or inheriting from Storable) and manipulated by value inside a persistent object as part of the representation. This is the only way for you to store objects “manipulated by value” in a file. - @image html /dev_guides/cdl/images/cdl_image007.png - @image latex /dev_guides/cdl/images/cdl_image007.png - -Figure 5. Manipulation of a data type by value +@image html /dev_guides/cdl/images/cdl_image007.png "Manipulation of a data type by value" +@image latex /dev_guides/cdl/images/cdl_image007.png "Manipulation of a data type by value" + Three types are manipulated by value: * Primitive types * Enumerated types * Types defined by classes not inheriting from Persistent or Transient, whether directly or not -@subsubsection occt_1819379591_1718435309314 Summary of properties +@subsubsection occt_cdl_3_1_4 Summary of properties -**Figure 6. Summary of the relationship for the various data** -**types between how they are handled and their storability.** +Here is a summary of how various data types are handled and their storability: + +| | Manipulated by handle | Manipulated by value | +| :---- | :---- | :---- | +| storable | Persistent | Primitive, Storable (storable if nested in a persistent class) | +| temporary | Transient | Other | -@subsection occt_1819379591_171843530932 Classes -@subsubsection occt_1819379591_1718435309321 Class declaration + + +@subsection occt_cdl_3_2 Classes + +@subsubsection occt_cdl_3_2_1 Class declaration The class is the main system for creating data types under CDL. By analyzing any CDL-based software, you find that classes are the modular units that make up packages. When you describe a new class, you introduce a new data type. Whatever the category of the described type (manipulated by value, Storable or not, manipulated by handle, Persistent or not) the structure of the class definition remains the same. The syntax below illustrates it: -**Example** +~~~~~ -- declaration-of-a-simple-class ::= class class-name from package-name [uses data-type { ’,’ data-type } ] @@ -456,14 +493,15 @@ class-definition ::= [{member-method}] [declaration-of-fields] [declaration-of-friends] - +~~~~~ Class name becomes a new data type, which you can use inside its own definition. Other types appearing in the definition must either be primitive types, previously declared classes, exceptions, or enumerations. -Apart from the types defined in the Standard Package, which are **implicitly visible **everywhere, you need to declare the data types after the keyword **uses**. This concerns both the class behavior and its internal representation. +Apart from the types defined in the Standard Package, which are **implicitly visible** everywhere, you need to declare the data types after the keyword **uses**. This concerns both the class behavior and its internal representation. -**Exceptions **are declared after the word **raises**. -**Example** +**Exceptions** are declared after the word **raises**. +**Example** +~~~~~ class Line from GeomPack usesPoint, Direction, Transformation raisesNullDirection, IdenticalPoints @@ -473,180 +511,165 @@ is-- class definition follows here -- NullDirection and Identical- -- -Points exceptions. end Line; +~~~~~ The elements, which make up the definition of a class, are divided into four parts: - * the behavior * the invariants * the internal representation * the friend methods and friend classes. - @image html /dev_guides/cdl/images/cdl_image009.png - @image latex /dev_guides/cdl/images/cdl_image009.png - -**Figure 7. Contents of a class** -*** a deferred class does not have to contain a constructor** - + @image html /dev_guides/cdl/images/cdl_image009.png "Contents of a class" + @image latex /dev_guides/cdl/images/cdl_image009.png "Contents of a class" -@subsubsection occt_1819379591_1718435309322 Categories of classes +@subsubsection occt_cdl_3_2_2 Categories of classes Classes fall into three categories: - * Ordinary classes * Deferred classes * Generic classes -

Deferred classes

+#### Deferred classes -The principal characteristic of a **deferred class **is that you cannot instantiate it. Its purpose is to provide you with a given behavior shared by a hierarchy of classes and dependent on the implementation of the descendents. This allows you to guarantee a certain base of inherited behavior common to all classes based on a particular deferred class. Deferred classes are declared as in the following syntax: -**Example** +The principal characteristic of a **deferred class** is that you cannot instantiate it. Its purpose is to provide a given behavior shared by a hierarchy of classes and dependent on the implementation of the descendents. This allows guaranteeing a certain base of inherited behavior common to all classes based on a particular deferred class. Deferred classes are declared as in the following syntax: --- declaration-of-a-deferred-class ::= -deferred class class-name +~~~~~ +-- declaration-of-a-deferred-class ::= deferred class class-name [inherits class-name {’,’ class-name}] [uses data-type {’,’ data-type}] [raises exception-name {’,’ exception-name}] -is class-definition -end [class-name]’;’ - + is class-definition + end [class-name]’;’ +~~~~~ +Please, note that a deferred class does not have to contain a constructor

Generic classes

-The principal characteristic of a **generic class **is that it offers you a set of functional behavior allowing you to manipulate other data types. To instantiate a generic class you need to pass a data type in argument. Generic classes are declared as in the following syntax: -**Example** +The principal characteristic of a **generic class** is that it offers a set of functional behavior to manipulate other data types. To instantiate a generic class you need to pass a data type in argument. Generic classes are declared as in the following syntax: --- declaration-of-a-generic-class ::= -[deferred] generic class class-name ’(’generic-type -{’,’ generic-type}’)’ +~~~~~ +-- declaration-of-a-generic-class ::= [deferred] generic class class-name ’(’generic-type {’,’generic-type}’)’ [inheritsclass-name {’,’ class-name}] [usesdata-type {’,’ data-type}] [raisesexception-name {’,’ exception-name}] [{[visibility] declaration-of-a-class}] -is class-definition -end [class-name]’;’ + is class-definition + end [class-name]’;’ generic-type ::= identifier as type-constraint identifier ::= letter{[underscore]alphanumeric} -type-constraint ::= any | class-name [’(’data-type {’,’ -data-type}’)’] +type-constraint ::= any | class-name [’(’data-type {’,’ data-type}’)’] +~~~~~ +@subsection occt_cdl_3_3 Packages -@subsection occt_1819379591_171843530933 Packages +@subsubsection occt_cdl_3_3_1 Package declaration -@subsubsection occt_1819379591_1718435309331 Package declaration +**Packages** are used to group classes, which have some logical coherence. For example, the Standard Package groups together all the predefined resources of the language. In its simplest form, a package contains the declaration of all data types, which it introduces. You may also use a package to offer public methods and hide its internal classes by declaring them private. - **Packages** are used to group classes, which have some logical coherence. For example, the Standard Package groups together all the predefined resources of the language. In its simplest form, a package contains the declaration of all data types, which it introduces. You may also use a package to offer public methods and hide its internal classes by declaring them private. -** ** **Example** --- package-declaration ::= -**package **package-name -[**uses **package-name {’,’ package-name}] -**is **package-definition -**end **[package-name]’;’ --- package-name ::= -identifier +~~~~~ +-- package-declaration ::= package package-name + [uses package-name {’,’ package-name}] + is package-definition + end [package-name]’;’ +-- package-name ::= identifier -- package-definition ::= -[{type-declaration}] -[{package-method}] + [{type-declaration}] + [{package-method}] -- type-declaration ::= -[**private**] declaration-of-an-enumeration | -[**private**] declaration-of-a-class | -declaration-of-an-exception --- package-method ::= -identifier [simple-formal-part][returned-type --declaration] + [private] declaration-of-an-enumeration | [private] declaration-of-a-class | declaration-of-an-exception +-- package-method ::= identifier [simple-formal-part][returned-type -declaration] [error-declaration] -[***is private***]’;’ - -The data types described in a package *may *include one or more of the following data types: +[is private]’;’ +~~~~~ +The data types described in a package *may* include one or more of the following data types: * Enumerations * Object classes * Exceptions * Pointers to other object classes. -Inside a package, two data types *cannot *have the same name. +Inside a package, two data types *cannot* have the same name. You declare data types before using them in the definition of other data types. -When two classes are **mutually recursive**, one of the two *must *be first declared in an incomplete fashion. +When two classes are **mutually recursive**, one of the two must be first declared in an incomplete fashion. -Grouped behind the keyword **uses **are the names of all the packages containing definitions of classes of which the newly introduced data types are clients. +Grouped behind the keyword **uses** are the names of all the packages containing definitions of classes of which the newly introduced data types are clients. -The methods you declare in a package do not belong to any particular class. **Package methods ***must *carry a name different from the data types contained in the package. Like any other method, they can be overloaded. With the exception of the keyword **me **and the visibility (a package method can *only *be either public or private) package methods are described in the same way as **instance methods**. +The methods you declare in a package do not belong to any particular class. **Package methods** must carry a name different from the data types contained in the package. Like any other method, they can be overloaded. With the exception of the keyword **me** and the visibility (a package method can *only* be either public or private) package methods are described in the same way as **instance methods**. -@image html /dev_guides/cdl/images/cdl_image010.png -@image latex /dev_guides/cdl/images/cdl_image010.png -Figure 8. Contents of a package +@image html /dev_guides/cdl/images/cdl_image010.png "Contents of a package" +@image latex /dev_guides/cdl/images/cdl_image010.png "Contents of a package" -The example of the package below includes some of the basic data structures: -**Example** +The example of the package below includes some of the basic data structures: + +~~~~~ package Collection -uses -Standard -is + uses + Standard + is exception NoSuchObject inherits Failure; exception NoMoreObject inherits Failure; generic class SingleList; generic class Set; end Collection; +~~~~~ -Note that the class Set is declared after the declarations of the NoSuchObject and NoMoreObject exceptions and the SingleList class of which Set is a client. In the same way, the classes Failure, Persistent, and the exception NoSuchObject are defined before they are used. They are defined in the Standard package, which appears after the keyword **uses**. +Note that the class *Set* is declared after the declarations of the *NoSuchObject* and *NoMoreObject* exceptions and the *SingleList* class of which Set is a client. In the same way, the classes *Failure*, *Persistent*, and the exception *NoSuchObject* are defined before they are used. They are defined in the *Standard* package, which appears after the keyword **uses**. -@subsubsection occt_1819379591_1718435309332 Name space +@subsubsection occt_cdl_3_3_2 Name space -The **name space **or **scope **of a class extends from the beginning of its declaration up to the end of the package in which it appears. +The **name space** or **scope** of a class extends from the beginning of its declaration up to the end of the package in which it appears. -Sometimes, two classes, which come from separate packages, are both visible to a third package and carry the same name. For example, there might be two different classes both called “Window” in a screen generator package and in an architectural package. As a client of a data type, you can find yourself in the position of having to remove the ambiguity over the origin of this type; you do this by means of the keyword **from**. -**Example** +Sometimes, two classes, which come from separate packages, are both visible to a third package and carry the same name. For example, there might be two different classes both called “Window” in a screen generator package and in an architectural package. As a client of a data type, you can find yourself in the position of having to remove the ambiguity over the origin of this type; you do this by means of the keyword **from**. + --- class-name ::= -identifier [**from **package-name] --- exception-name ::= -identifier [**from **package-name] --- enumeration-name ::= -identifier [**from **package-name] +~~~~~ +-- class-name ::= identifier [from package-name] +-- exception-name ::= identifier [from package-name] +-- enumeration-name ::= identifier [from package-name] +~~~~~ -You can use the keyword **from **everywhere the name of a class, exception, or enumeration appears. As a consequence, as a client of the class “Window” you could write wherever necessary: -**Example** +You can use the keyword **from** everywhere the name of a class, exception, or enumeration appears. As a consequence, as a client of the class “Window” you could write wherever necessary: +~~~~~ Window from ScreenGenerator -- or Window from ArchitecturalFeatures +~~~~~ -NOTES -***Within the description of a package the keyword *****from**** *must be used when referencing any data type that is not defined in this package.*** +**Note** that within the description of a package the keyword **from** must be used when referencing any data type that is not defined in this package. Here is a further example: -**Example** +~~~~~ class Line from Geom uses -Point from Geom2d, -Point from Geom3d + Point from Geom2d, + Point from Geom3d is --- class definition using --- Point from AppropriatePackage --- wherever Point appears + -- class definition using Point from AppropriatePackage wherever Point appears end; +~~~~~ - -@subsubsection occt_1819379591_1718435309333 Declaration of classes +@subsubsection occt_cdl_3_3_3 Declaration of classes You cannot describe a package in one single file. You need to describe it in different units and send them separately to the CDL compiler. Each compilation unit can contain the declaration of a class or of a package. When you describe a class in a unit different than that, which describes its package, you need to specify which package the class belongs to. You do this using the keyword **from**. -If the **from **clause appears in the **uses **clause of the package, it does not need to be repeated elsewhere. +If the **from** clause appears in the **uses** clause of the package, it does not need to be repeated elsewhere. The following example takes the package “Collection” which was presented above, but this time it is divided into three compilation units. -**Example** +~~~~~ -- First compilation unit, the package “Collection” : package Collection -uses -Standard -is + uses + Standard + is exception NoMoreObject inherits Failure from Standard; exception NoSuchObject inherits Failure from Standard; generic class SingleList; @@ -655,251 +678,264 @@ end Collection; -- Second compilation unit, the class “SingleList” : generic class SingleList from Collection (Item as Storable) -inherits -Persistent from Standard -raises -NoSuchObject from Collection -is --- definition of the SingleList class -end SingleList; + inherits + Persistent from Standard + raises + NoSuchObject from Collection + is + -- definition of the SingleList class + end SingleList; -- Third compilation unit, the class “Set” : generic class Set from Collection (Item as Storable) - inherits -Persistent from Standard; -raises -NoSuchObject from Collection, -NoMoreObject from Collection -private class Node instantiates SingleList -from Collection (Item); --- etc.... + inherits + Persistent from Standard; + raises + NoSuchObject from Collection, + NoMoreObject from Collection + private class Node instantiates SingleList + from Collection (Item); end Set; - +~~~~~ NOTE -It is not explicitly stated that the “Node” class belongs to the “Collection” package. In fact any nested class necessarily belongs to the package of the class, which encompasses it. +It is not explicitly stated that the *Node* class belongs to the *Collection* package. In fact any nested class necessarily belongs to the package of the class, which encompasses it. + +Note that a package can hide certain classes (just as it can hide methods) by declaring them **private**. To make a class private, you prefix its description with the keyword **private**. In the example of the *Collection* package, the *SingleList* class serves only to implement the *Set* class. It is recommended to make it private. You write this as in the following syntax: -Note that a package can hide certain classes (just as it can hide methods) by declaring them **private**. To make a class private, you prefix its description with the keyword **private**. In the example of the “Collection” package, the “SingleList” class serves only to implement the “Set” class. It is recommended to make it private. You write this as in the following syntax: -**Example** +**Example** +~~~~~ package Collection -uses -Standard -is + uses + Standard + is generic class Set, Node, Iterator; private generic class SingleList; exception NoMoreObject inherits Failure from Standard; end Collection; +~~~~~ +@subsection occt_cdl_3_4 Other Data Types -@subsection occt_1819379591_171843530934 Other Data Types - -These are: - +The other data types are: * Enumerations * Imports * Aliases * Exceptions * Pointers -@subsubsection occt_1819379591_1718435309341 Enumerations +@subsubsection occt_cdl_3_4_1 Enumerations -The **enumerated types **are the second type, which is manipulated by value. Unlike the primitive types they are extensible because they are defined by the user under the form of enumerations. An enumeration is an ordered sequence of named whole constant values called enumeration constants. -**Example** +The **enumerated types** are the second type, which is manipulated by value. Unlike the primitive types they are extensible because they are defined by the user under the form of enumerations. An enumeration is an ordered sequence of named whole constant values called enumeration constants. +**Example** +~~~~~ declaration-of-an-enumeration ::= -**numeration **enumeration-name -**is **identifier {’,’ identifier} -[**end **[enumeration-name]]’;’ +enumeration enumeration-name +is identifier {’,’ identifier} +[end [enumeration-name]]’;’ enumeration-name ::= identifier - +~~~~~ The declaration of an enumeration creates an enumerated type. An object of this type can successively take the value of any one of the constants cited in the list. -**Example** +**Example** +~~~~~ enumeration MagnitudeSign is Negative, Null, Positive; +~~~~~ - -Inside a package, two enumeration constants cannot have the same name, even if they belong to different enumerated types. +Inside a package, two enumeration constants cannot have the same name, even if they belong to different enumerated types. + **Example** - +~~~~~ enumeration Cars is -Honda, -Ford, -Volkswagen, -Renault + Honda, + Ford, + Volkswagen, + Renault end; enumeration AmericanPresidents is -Nixon, -Reagan, -Ford, -- Error: ‘Ford’ already defined -Carter + Nixon, + Reagan, + Ford, -- Error: ‘Ford’ already defined + Carter end; +~~~~~ +@subsubsection occt_cdl_3_4_2 Imports -@subsubsection occt_1819379591_1718435309342 Imports - -An **imported type **is one of which which has not been defined in CDL. It is up to the supplier of this data type to ensure compatibility with the CDL language by providing services which allow CDL to recognize the imported data type. +An **imported type** is one of which which has not been defined in CDL. It is up to the supplier of this data type to ensure compatibility with the CDL language by providing services which allow CDL to recognize the imported data type. The CDL syntax for declaring an imported type is: - -declaration-of-an-imported-type::= -[**private**] **imported **typename ; -**Example** - --- You can define an imported type as follows: --- In the MyPack.cdl file, you declare the imported -type: --- package MyPack -.... -imported MyImport; -.... -end Mypack; --- In the MyPack_MyImport.hxx file, you write the -following --- C++ code: +~~~~~ +declaration-of-an-imported-type::=[private] imported typename ; +~~~~~ + +Let us try to define an imported type: + +* In the *MyPack.cdl* file, you declare the imported type: +~~~~~ +package MyPack + .... + imported MyImport; + .... + end Mypack; +~~~~~ +* In the *MyPack_MyImport.hxx* file, you write the following C++ code: +~~~~~ #ifndef _MyPack_MyImport_HeaderFile #define _MyPack_MyImport_HeaderFile #include Standard_Type.hxx typedef unsigned long MyPack_MyImport; extern const Handle(Standard_Type)& TYPE (MyPack_MyImport); --- In the MyPack_MyImport.cxx file, you write the -following --- C++ code: +~~~~~ +* In the *MyPack_MyImport.cxx* file, you write the following C++ code: +~~~~~ #ifndef _MyPack_MyImport_HeaderFile #include MyPack_MyImport.hxx #endif const Handle(Standard_Type)& TYPE (MyPack_MyImport) - { -static Handle(Standard_Type) _aType = -new Standard_Type (“MyPack_MyImport”,sizeof -(MyPack_MyImport)) - return _aType; -} + static Handle(Standard_Type) _aType = + new Standard_Type (“MyPack_MyImport”,sizeof + (MyPack_MyImport)) + return _aType; + } +~~~~~ -Then, add the names of these two files (MyPack_MyImport.hxx, MyPack_MyImport.cxx) to a file called FILES in the src subdirectory of the package. If the file does not exist you must create it. +Then, add the names of these two files (MyPack_MyImport.hxx, MyPack_MyImport.cxx) to a file called FILES in the src subdirectory of the package. If the file does not exist you must create it. -@subsubsection occt_1819379591_1718435309343 Aliases +@subsubsection occt_cdl_3_4_3 Aliases -An **alias **is an extra name for a type, which is already known. It is declared as in the following syntax: +An **alias** is an extra name for a type, which is already known. It is declared as in the following syntax: -declaration-of-an-alias::= -[**private**] **alias **type1 **is **type2 [**from **apackage] ; -**Example** +~~~~~ +declaration-of-an-alias::= [private] alias type1 is type2 [from apackage] ; +~~~~~ +**Example** +~~~~~ alias Mass is Real; ---Purpose: -- Defined as a quantity of matter. -- Gives rise to the inertial and -- gravitational properties of a body. -- It is measured in kilograms. +~~~~~ -Having defined *Mass *as a type of *Real*, you can use either *Mass *or *Real *to type an argument when defining a method. +Having defined *Mass* as a type of *Real*, you can use either *Mass* or *Real* to type an argument when defining a method. -@subsubsection occt_1819379591_1718435309344 Exceptions +@subsubsection occt_cdl_3_4_4 Exceptions In the model recommended by CDL, the principal characteristic of errors is that they are treated in a different place from the place where they appear. In other words, the methods recovering and those raising a given exception are written independently from each other. Subsequently this poses the problem of communication between the two programs. The principle adopted consists in viewing the exception as both a class and an object. The exception class (by means of one of its instances) is used to take control of an exception, which has been raised. -Consequently, error conditions are defined by means of **classes of exceptions**. Exception classes are arranged hierarchically so as to be able to recover them in groups. They are all descendents of a single root class called “Failure”, and it is at the level of this class that the behavior linked to the raising of exceptions is implemented. - -declaration-of-an-exception ::= -**exception **exception-name **inherits **exception-name +Consequently, error conditions are defined by means of **classes of exceptions**. Exception classes are arranged hierarchically so as to be able to recover them in groups. They are all descendents of a single root class called *Failure*, and it is at the level of this class that the behavior linked to the raising of exceptions is implemented. +~~~~~ +declaration-of-an-exception ::=exception exception-name inherits exception-name +~~~~~ -All exceptions share identical behavior, that of the class “Failure”. Here are some examples of exception classes: +All exceptions share identical behavior, that of the class *Failure*. Here are some examples of exception classes: +~~~~~ exception NumericError inherits Failure; exception Overflow inherits NumericError; exception Underflow inherits NumericError; +~~~~~ -The use of exceptions as a means to interrupt the normal execution of one program and then take control of another one depends on the programming language used to implement the methods. See the following chapter “Defining the Software Components” on page 32. +The use of exceptions as a means to interrupt the normal execution of one program and then take control of another one depends on the programming language used to implement the methods. See the following chapter “Defining the Software Components” on page 32. -@subsection occt_1819379591_171843530935 Schemas +@subsection occt_cdl_3_5 Schemas -The purpose of a **schema **is to list persistent data types, which will be stored in files by the application. A schema groups together persistent packages. A persistent package is one, which contains at least one persistent class. +The purpose of a **schema** is to list persistent data types, which will be stored in files by the application. A schema groups together persistent packages. A persistent package is one, which contains at least one persistent class. +~~~~~ declaration-of-a-schema ::= -**schema **SchemaName +schema SchemaName is -{**package **PackageName;} -{**class **ClassName;} -**end**; -**Example** - +{package PackageName;} +{class ClassName;} +end; +~~~~~ + +For example +~~~~~ schema Bicycle ---Purpose: Defines the Bicycle schema. is package FrameComponents; package WheelComponents; end; +~~~~~ -***NOTE*** -Note that it is unnecessary to specify all the dependencies of the packages. It is sufficient to specify the highest level ones. The others on which they depend are automatically supplied. -@subsection occt_1819379591_171843530936 Executables -The purpose of an **executable **is to make an executable program without a front-end. It can be used to test more than one package at a time. An executable is written in a .cdl file as a set of packages. -**Example** +**Note** that it is unnecessary to specify all the dependencies of the packages. It is sufficient to specify the highest level ones. The others on which they depend are automatically supplied. +@subsection occt_cdl_3_6 Executables + +The purpose of an **executable** is to make an executable program without a front-end. It can be used to test more than one package at a time. An executable is written in a .cdl file as a set of packages. +**Example** +~~~~~ definition-of-an-executable ::= -executable ExecutableName -is + executable ExecutableName + is { executable ExecutablePart -[uses [Identifier as external] -[{’,’ Identifier as external}] -[UnitName as library] -[{’,’ UnitName as library}] -is -{FileName [as C++|c|fortran|object];} + [uses [Identifier as external] + [{’,’ Identifier as external}] + [UnitName as library] + [{’,’ UnitName as library}] + is + {FileName [as C++|c|fortran|object];} + end; + } end; -} -end; -**Example** +~~~~~ +**Example** +~~~~~ executable MyExecUnit ----Purpose: --- Describes the executable MyExecUnit -is -executable myexec --- the binary file -uses -Tcl_Lib as external -is -myexec; --- the C++ file -end; --- several binaries can be specified in one .cdl file. -executable myex2 -is -myex2; + ---Purpose: + -- Describes the executable MyExecUnit + is + executable myexec + -- the binary file + uses + Tcl_Lib as external + is + myexec; + -- the C++ file + end; + -- several binaries can be specified in one .cdl file. + executable myex2 + is + myex2; end; end; +~~~~~ -@section occt_1819379591_1972310108 4. Defining the Software Components +@section occt_cdl_4 Defining the Software Components -@subsection occt_1819379591_197231010841 Behavior +@subsection occt_cdl_4_1 Behavior -The behavior of an object class is defined by a list of **methods, **which are either **functions **or **procedures**. Functions return an object, whereas procedures only communicate by passing arguments. In both cases, when the transmitted object is an instance manipulated by a handle, its identifier is passed. There are three categories of methods: +The behavior of an object class is defined by a list of **methods**, which are either **functions** or **procedures**. Functions return an object, whereas procedures only communicate by passing arguments. In both cases, when the transmitted object is an instance manipulated by a handle, its identifier is passed. There are three categories of methods: -**Object constructor **Creates an instance of the described class. A class will have one or more object constructors with various arguments or none. +* **Object constructor** Creates an instance of the described class. A class will have one or more object constructors with various arguments or none. +* **Instance method** Operates on the instance which owns it. +* **Class method** Does not work on individual instances, only on the class itself. -**Instance method **Operates on the instance which owns it. +@subsubsection occt_cdl_4_11 Object Constructors -**Class method **Does not work on individual instances, only on the class itself. - -@subsubsection occt_1819379591_1972310108411 Object Constructors - -A constructor is a function, which allows the **creation of instances **of the class it describes. -**Example** +A constructor is a function, which allows the **creation of instances** of the class it describes. +~~~~~ constructor-declaration ::= -Create [ simple-formal-part ] declaration-ofconstructed- -type +Create [ simple-formal-part ] declaration-ofconstructed-type [ exception-declarations ] simple-formal-part ::= ’(’ initialization-parameter {’;’ initialization parameter}’)’ @@ -907,86 +943,84 @@ initialization-parameter ::= identifier {’,’ identifier} ’:’ parameter-access datatype [ ’=’ initial-value ] parameter-access ::= -**mutable **| [ **immutable **] +mutable | [ immutable ] initial_value ::= numeric-constant | literal-constant | named-constant declaration-of-constructed-type ::= -**returns **[ **mutable **] class-name +returns [ mutable ] class-name +~~~~~ -The name of the constructors is fixed: “Create”. The object returned by a constructor is always of the type of the described class. If that type is manipulated by a handle, you *must *declare it as **mutable**, in which case the content of the instance it references is accessible for further modification. +The name of the constructors is fixed: “Create”. The object returned by a constructor is always of the type of the described class. If that type is manipulated by a handle, you *must* declare it as **mutable**, in which case the content of the instance it references is accessible for further modification. For example, the constructor of the class “Point” -**Example** - +~~~~~ Create (X, Y, Z : Real) returns mutable Point; +~~~~~ -With the exception of the types predefined by the language, all types of initialization parameters *must *appear in the **uses **clause of the class of which the constructor is a member. +With the exception of the types predefined by the language, all types of initialization parameters *must* appear in the **uses** clause of the class of which the constructor is a member. -When an initialization parameter is of a type which is manipulated by a handle, an access right *must *be associated with it so as to express if the internal representation of the referenced object is modifiable (**mutable**) or not (**immutable**). The default option is **immutable**. For example, the constructor of the persistent class “Line”. -**Example** +When an initialization parameter is of a type which is manipulated by a handle, an access right *must* be associated with it so as to express if the internal representation of the referenced object is modifiable (**mutable**) or not (**immutable**). The default option is **immutable**. Let, for example, take the constructor of the persistent class “Line”. +~~~~~ Create (P : mutable Point; D : mutable Direction) returns mutable Line; +~~~~~ In the above example “P” and “D” must be mutable because the constructor stores them in the internal representation of the created line, which is mutable itself. An alternative would be to accept immutable initialization parameters and then copy them into the constructor in a mutable form. -The parameters of a native type can have a default value: this is expressed by assigning a constant of the same type to the parameter concerned. Parameters, which have a default value, may not be present when the call to the constructor is made, in which case they take the value specified in the declaration. For this reason, they must all be grouped at the end of the list. For example, the constructor of the persistent class “Vector”. -**Example** +The parameters of a native type can have a default value: this is expressed by assigning a constant of the same type to the parameter concerned. Parameters, which have a default value, may not be present when the call to the constructor is made, in which case they take the value specified in the declaration. For this reason, they must all be grouped at the end of the list. Let, for example, take the constructor of the persistent class “Vector”. +~~~~~ Create (D : mutable Direction; M : Real = 1.0) returns mutable Vector; +~~~~~ A class can have many constructors (in this case, you say they are **overloaded**) provided that they differ in their syntax and that the presence of parameters having default values does not create ambiguities. -The restrictions on their use are expressed by a list of **exceptions **against which each constructor is protected. +The restrictions on their use are expressed by a list of **exceptions** against which each constructor is protected. Each class must have at least one constructor to be able to create objects of its type. -@subsubsection occt_1819379591_1972310108412 Instance Methods + +@subsubsection occt_cdl_4_1_2 Instance Methods An instance method is a function or procedure, which applies to any instance of the class, which describes it. -**Example** -declaration-of-an-instance-method ::= -identifier formal-part-of-instance-method +**Example** +~~~~~ +declaration-of-an-instance-method ::= identifier formal-part-of-instance-method [ declaration-of-returned-type ] [ exception-declaration ] -formal-part-of-instance-method ::= - ’(’ me [’:’ passing-mode parameter-access ] {’;’ -parameter}’)’ -parameter ::= -identifier {’,’ identifier} ’:’ passing-mode +formal-part-of-instance-method ::= ’(’ me [’:’ passing-mode parameter-access ] {’;’ parameter}’)’ +parameter ::= identifier {’,’ identifier} ’:’ passing-mode parameter-access data-type [ ’=’ initial-value ] -passing-mode ::= -[ in ] | out | in out -parameter-access ::= -mutable | [immutable] -declaration-of-returned-type ::= -returns return-access data-type -return-access ::= -mutable |[ immutable ]| any +passing-mode ::= [ in ] | out | in out +parameter-access ::= mutable | [immutable] +declaration-of-returned-type ::= returns return-access data-type +return-access ::= mutable |[ immutable ]| any +~~~~~ -The name **me **denotes the object to which the method is applied: you call this the “principal object” of the method. The passing mode expresses whether the direct content of the principal object or a parameter is either: +The name **me** denotes the object to which the method is applied: you call this the “principal object” of the method. The passing mode expresses whether the direct content of the principal object or a parameter is either: * read * created and returned * read then updated and returned by the method. -Remember that the direct content of an argument of a type which is manipulated by value contains the internal representation of the object itself. Thus, when the argument is of this type, **out **and **in out **mean that the content of the object will undergo a modification. When the method is a function (as is the case for constructors), all the arguments must be **in **(read). This is the default mode. +Remember that the direct content of an argument of a type which is manipulated by value contains the internal representation of the object itself. Thus, when the argument is of this type, **out** and **in out** mean that the content of the object will undergo a modification. When the method is a function (as is the case for constructors), all the arguments must be **in** (read). This is the default mode. -In case of an argument of a type manipulated by a handle, the direct content being an object identifier, the passing mode addresses itself to the handle, and no longer to the internal representation of the object, the modification of which is controlled by the access right. An argument of this type declared **mutable **may see its internal representation modified. If declared **immutable**, it is protected. When a parameter is both **in out **and **mutable**, the identifiers passed and returned denote two distinct modifiable objects. +In case of an argument of a type manipulated by a handle, the direct content being an object identifier, the passing mode addresses itself to the handle, and no longer to the internal representation of the object, the modification of which is controlled by the access right. An argument of this type declared **mutable** may see its internal representation modified. If declared **immutable**, it is protected. When a parameter is both **in out** and **mutable**, the identifiers passed and returned denote two distinct modifiable objects. When the returned object is manipulated by a handle it can be declared modifiable or not, or indeterminate (**any**). To return an object with an indeterminate access right means that the method transmits the identifier without changing its state and that the method has no right to alter the access right. This functionality is particularly useful in the case of collections; temporarily storing an object in a structure and unable to modify its state. -With the exception of the types predefined by the language, all types of parameters and returned objects, whether manipulated by a handle or by value, *must *appear in the **uses **clause of the class of which the method is a member. -As is the case for constructors, some parameters can have a default value, provided that they are of primitive or enumerated type. They are passed in the **in **mode, and they are found at the end of the list of arguments. +With the exception of the types predefined by the language, all types of parameters and returned objects, whether manipulated by a handle or by value, *must* appear in the **uses** clause of the class of which the method is a member. +As is the case for constructors, some parameters can have a default value, provided that they are of primitive or enumerated type. They are passed in the **in** mode, and they are found at the end of the list of arguments. Overloading of instance methods and use of exceptions and post-conditions is allowed and respects the same rules than constructors. Note the overloading of “Coord” in the following example of instance methods associated with the persistent class “Point”: -**Example** +~~~~~ Coord (me; X, Y, Z : out Real); ---Purpose: returns the coordinates of me @@ -999,90 +1033,91 @@ SetCoord (me : mutable; X, Y, Z : Real); Distance (me; P : Point) returns Real ---Purpose: returns the distance to a point +~~~~~ -In all these cases, **me **is implicitly an object of type Point. Only “SetCoord” is able to modify the internal representation of a point. +In all these cases, **me** is implicitly an object of type *Point*. Only “SetCoord” is able to modify the internal representation of a point. -@subsubsection occt_1819379591_1972310108413 Class Methods +@subsubsection occt_cdl_4_1_3 Class Methods A class method is a function or procedure relative to the class it describes, but does not apply to a particular instance of the class. -declaration-of-a-class-method ::= -identifier formal-part-of-class-method +~~~~~ +declaration-of-a-class-method ::= identifier formal-part-of-class-method [ declaration-of-returned-type ] [ exception-declaration ] -formal-part-of-class-method ::= -’(’ **myclass **{’;’ parameter}’)’ +formal-part-of-class-method ::= ’(’ myclass {’;’ parameter}’)’ +~~~~~ + +The first parameter **myclass** indicates that the method does not apply to a previously created instance, but to the class itself. The rest of the syntax is identical to that of the instance methods. In particular, access rights (**mutable**, **immutable**, **any**) and the argument passing mode (**in**, **out**, **in out**) must remain unchanged. With the exception of the types predefined by the language, all types of parameters must appear in the **uses** clause of the class of which the method is a member. Overloading of class methods and the use of exceptions and post-conditions is allowed, and it follows the same rules as for constructors and instance methods. -The first parameter **myclass **indicates that the method does not apply to a previously created instance, but to the class itself. The rest of the syntax is identical to that of the instance methods. In particular, access rights (**mutable**, **immutable**, **any**) and the argument passing mode (**in**, **out**, **in out**) must remain unchanged. With the exception of the types predefined by the language, all types of parameters must appear in the **uses **clause of the class of which the method is a member. Overloading of class methods and the use of exceptions and post-conditions is allowed, and it follows the same rules as for constructors and instance methods. Examples of class methods associated with the class “Real”: -**Example** +~~~~~ First (myclass) returns Real; ---Purpose: returns lower limit of reals Last (myclass) returns Real; ---Purpose: returns upper limit of reals +~~~~~ - -@subsubsection occt_1819379591_1972310108414 Package Methods +@subsubsection occt_cdl_4_1_4 Package Methods Package methods are methods which are members of a package. They are frequently used for library or application initialization, or for offering an application programming interface to the sources to the package. They are sometimes methods used for development purposes but which are not made available to final end-users of the package. -package-method ::= -identifier [simple-formal-part][returned-type-declaration] +~~~~~ +package-method ::= identifier [simple-formal-part][returned-type-declaration] [exception-declaration] -[**is private**]’;’ - +[is private]’;’ +~~~~~ -@subsubsection occt_1819379591_1972310108415 Sensitivity to Overloading +@subsubsection occt_cdl_4_1_5 Sensitivity to Overloading When there is more than one method of a class, several methods share the same name but have different syntax, you say the method is overloaded. -In order that the methods can be considered distinct, they must differ either in the number of parameters, or one of their parameters must be of a different type. In particular, you *cannot *overload a method if you merely modify it as follows: +In order that the methods can be considered distinct, they must differ either in the number of parameters, or one of their parameters must be of a different type. In particular, you *cannot* overload a method if you merely modify it as follows: * The type of the returned object when the method behaves as a function - * The name or the mode of passing a parameter -(**in**, **out**, or **in out**) - * The mutability of passed objects -(**mutable**, **immutable**, **any**) + * The name or the mode of passing a parameter (**in**, **out**, or **in out**) + * The mutability of passed objects (**mutable**, **immutable**, **any**) * Default value of a parameter. -@subsection occt_1819379591_197231010842 Internal Representation + +@subsection occt_cdl_4_2 Internal Representation -Each object contains its own state in a private space in the memory. This state consists of a set of **fields**,** **which include or reference other objects. -**Example** +Each object contains its own state in a private space in the memory. This state consists of a set of **fields**, which include or reference other objects. -declaration-of-the-internal-representation-of-a-class -::= -**fields **field {field} -field ::= -identifier {’,’ identifier} ’:’ data-type [’[’integer -{’,’integer}’]’]’;’ +**Example** +~~~~~ +declaration-of-the-internal-representation-of-a-class ::= fields field {field} +field ::= identifier {’,’ identifier} ’:’ data-type [’[’integer {’,’integer}’]’]’;’ +~~~~~ A copy of all the defined fields exists locally in each instance of the class. This group of fields will be initialized by the class constructors when the object is instantiated. -Fields *must not *have the same name as any method of the class in which they appear. When the field type is followed by a list of integer constants between square brackets, the data will take the form of a multi-dimensional array containing objects of this type. +Fields *must not* have the same name as any method of the class in which they appear. When the field type is followed by a list of integer constants between square brackets, the data will take the form of a multi-dimensional array containing objects of this type. The following example shows two equivalent ways of describing three fields of the “Real” type: -**Example** +**Example** +~~~~~ fields x, y, z: Real; coord: Real[3]; +~~~~~ + Depending on their type, Object fields have one of the two forms. When the field is of the “manipulated by handle” type, it corresponds to an identifier. In this case, the contents of the object can be shared by other objects or by a handle in a program. When the field is of a “manipulated by value” type, it contains the value of the object. In this case you say the object is **embedded**. -@subsection occt_1819379591_197231010843 Exceptions +@subsection occt_cdl_4_3 Exceptions Exceptions describe exceptional situations, which can arise during the execution of a method. With the raising of an exception, the normal course of program execution is interrupted. The actions carried out in response to this situation are called treatment of exception. - -exception-treatment ::= **raises **exception-name {’,’ -exception-name} - -Each exception name corresponds to a class of exceptions previously defined as being susceptible to being raised by the method under which it appears. Exception classes must all appear in the **raises **clause of the class of which the method is a member. The class of exceptions is analogous to the class of objects described in this manual. +~~~~~ +exception-treatment ::= raises exception-name {’,’ exception-name} +~~~~~ +Each exception name corresponds to a class of exceptions previously defined as being susceptible to being raised by the method under which it appears. Exception classes must all appear in the **raises** clause of the class of which the method is a member. The class of exceptions is analogous to the class of objects described in this manual. Take for example the method which returns the x, y, or z coordinate of a point. -**Example** +~~~~~ Coord (me; i : Integer) returns Real ---Purpose: -- Returns the abscissa (i=1) @@ -1091,112 +1126,117 @@ Coord (me; i : Integer) returns Real -- of me. raises OutOfRange; -- if i is not equal to 1, 2, or 3. +~~~~~ -Instance methods are likely to raise certain exceptions called **systematic exceptions **which do not have to appear. They are: - -**NullObject **Raised when the principal object does not exist. -**ImmutableObject **Raised when a method tries to modify an immutable principal object. +Instance methods are likely to raise certain exceptions called **systematic exceptions** which do not have to appear. They are: -**TypeMismatch **Raised if an argument typed by association is of an unsuitable type. +* *NullObject* - raised when the principal object does not exist. +* *ImmutableObject* - raised when a method tries to modify an immutable principal object. +* *TypeMismatch* - raised if an argument typed by association is of an unsuitable type. These exceptions are described in the Standard Package (System Toolkits). -@subsection occt_1819379591_197231010844 Inheritance +@subsection occt_cdl_4_4 Inheritance -@subsubsection occt_1819379591_1972310108441 Overview +@subsubsection occt_cdl_4_4_1 Overview The notion of inheritance comes from a development strategy according to which you begin by modeling data in the most general fashion. Then you specialize it more and more so as to correspond to more and more precise cases. -For example, to develop a basic geometry, you can first of all consider the group of geometric objects, and then differentiate the points, vectors, and curves. You can specialize the latter into conic sections, and then decompose them into circles, ellipses, and hyperbolae. Then, the class of conics is considered as a sub-class of curves, and a super-class of circles. +For example, to develop a basic geometry, you can first of all consider the group of geometric objects, and then differentiate the points, vectors, and curves. You can specialize the latter into conic sections, and then decompose them into circles, ellipses, and hyperbolas. Then, the class of conics is considered as a sub-class of curves, and a super-class of circles. A sub-class has at least the behavior of its super-classes. Thus, a circle could be viewed as a conic, a curve, or even as a geometric object. In each case, the applicable methods belong to the level where you view the class. In this case, you say that the sub-class inherits the behavior from its super-classes. -**Example** -declaration-of-a-sub-class ::= -**class **class-name -**inherits **class-name -[**uses **data-type {’,’ data-type}] -[**raises **exception-name {’,’ exception-name}] -**is **class-definition -**end **[class-name]’;’ -A class cannot inherit one of its descendent classes; nor can it inherit a native type. All the classes of a system can be described in a non-cyclic diagram called the **inheritance graph**. +**Example** +~~~~~ +declaration-of-a-sub-class ::= class class-name +inherits class-name +[uses data-type {’,’ data-type}] +[raises exception-name {’,’ exception-name}] +is class-definition +end [class-name]’;’ +~~~~~ -The definition of a sub-class is identical to that of a simple class. Note that a super-class *must not *appear in the **uses **clause of the sub-class, even if it appears in the definition of the sub-class. The behavior of a sub-class includes as a minimum all instance methods and protected methods of its super-classes. +A class cannot inherit one of its descendent classes; nor can it inherit a native type. All the classes of a system can be described in a non-cyclic diagram called the **inheritance graph**. -NOTE -Note that constructors and class methods are never inherited. +The definition of a sub-class is identical to that of a simple class. Note that a super-class must not appear in the **uses** clause of the sub-class, even if it appears in the definition of the sub-class. The behavior of a sub-class includes as a minimum all instance methods and protected methods of its super-classes. +**Note** that constructors and class methods are never inherited. -@subsubsection occt_1819379591_1972310108442 Redefining methods +@subsubsection occt_cdl_4_4_2 Redefining methods Certain inherited methods can be redefined. + **Example** -declaration-of-a-redefined-method ::= -identifier formal-part-of-instance-method [returnedtype- -declaration] +~~~~~ +declaration-of-a-redefined-method ::= identifier formal-part-of-instance-method [returnedtype- declaration] [declaration-of-exceptions] -** is redefined **[visibility]’;’ +is redefined [visibility]’;’ +~~~~~ A redefined method must conform to the syntax described in the super-class where it appears. The exceptions contained in the super-class can be renewed, and others may be added as long as they inherit from an ancestor class. -The **redefined **attribute can be applied neither to a constructor, nor to a class method, since neither of them can be inherited. If the redefined method is private or protected, the visibility must be exactly repeated in the redefinition. For further details on visibility, refer to “Visibility” on page 48. -**Example** +The redefined attribute can be applied neither to a constructor, nor to a class method, since neither of them can be inherited. If the redefined method is private or protected, the visibility must be exactly repeated in the redefinition. For further details on visibility, refer to Visibility section. + +**Example** +~~~~~ SquareDistance (me; P : Point) returns Real is redefined private; +~~~~~ With regards to the internal representation, all fields defined in the super-classes are, by default, inherited, but they can also be redefined. -@subsubsection occt_1819379591_1972310108443 Non-redefinable methods +@subsubsection occt_cdl_4_4_3 Non-redefinable methods -Instance methods, which are declared virtual are redefinable in descendent classes, and you can force this redefinition by making a method **deferred**. For more details, see the next section. +Instance methods, which are declared virtual are redefinable in descendent classes, and you can force this redefinition by making a method **deferred**. For more details, see the next section. + **Example** -declaration-of-a-non-redefinable-method ::= -identifier formal-part-of-instance-method [returnedtype- -declaration] +~~~~~ +declaration-of-a-non-redefinable-method ::= identifier formal-part-of-instance-method [returnedtype- declaration] [declaration-of-exceptions] -** is virtual **[visibility]’;’ + is virtual [visibility]’;’ +~~~~~ -All methods are static by default. To enable redefinition in all the child classes, add “**is virtual;**“ when declaring the method. +All methods are static by default. To enable redefinition in all the child classes, add **is virtual** when declaring the method. You must also be able to forbid redefinition. A redefinable method can become non-redefinable if you declare: **is redefined static**. -@subsubsection occt_1819379591_1972310108444 Deferred Classes and Methods +@subsubsection occt_cdl_4_4_4 Deferred Classes and Methods The presence of certain classes in the inheritance graph can be justified purely by their ability to force certain behavior on other classes, in other words, to make other classes provide various services. The CDL language allows you to describe a class, which introduces methods without implementing them, so as to force its descendent classes to define them. These are called **deferred classes**; the non-implemented methods are also termed **deferred methods**. -**Example** -declaration-of-a-deferred-class ::= -**deferred class **class-name - [**inherits **class-name -[**uses **data-type {’,’ data-type}] -[**raises **exception-name {’,’ exception-name}] -**is **class-definition -**end **[class-name]’;’ -declaration-of-a-deferred-method ::= -identifier formal-part-of-instance-method [returnedtype- -declaration] + +**Example** +~~~~~ +declaration-of-a-deferred-class ::= deferred class class-name +[inherits class-name [uses data-type {’,’ data-type}] +[raises exception-name {’,’ exception-name}] +is class-definition +end [class-name]’;’ +declaration-of-a-deferred-method ::= identifier formal-part-of-instance-method [returnedtype- declaration] [declaration-of-exceptions] -**is deferred **[visibility]’;’ +is deferred [visibility]’;’ +~~~~~ Only instance methods can be deferred. It is sufficient for a class to contain one deferred method for it to be a deferred class. It can contain any number of deferred methods (or none). -A deferred class may still have an internal representation but one or more **non-** **protected **constructors would be necessary to initialize them. The constructors must be visible in the sub-classes. +A deferred class may still have an internal representation but one or more **non-protected** constructors would be necessary to initialize them. The constructors must be visible in the sub-classes. -The constructors of a deferred class are called **Initialize **(not **Create**). They are **protected **by default, and do not return any object. You cannot create an object of a deferred class type. -For example, consider the class “Point”, and its declaration as deferred. -**Example** +The constructors of a deferred class are called **Initialize** (not **Create**). They are **protected** by default, and do not return any object. You cannot create an object of a deferred class type. +For example, consider the class *Point*, and its declaration as deferred. +**Example** +~~~~~ deferred class Point inherits Geometry is Initialize; ---Purpose: Initializes the point. @@ -1209,103 +1249,99 @@ is deferred; Distance (me; P : Point) returns Real; ---Purpose: Returns the distance from the point P end Point; +~~~~~ -Notice that the function “Distance” is not deferred. Although this class contains no representation, this method is programmable by calling “Coord”. +Notice that the function *Distance* is not deferred. Although this class contains no representation, this method is programmable by calling *Coord*. -In a sub-class of a deferred class, all deferred methods, which have been inherited, *must *be implemented, then redeclared (the attribute **redefined **is useless for this purpose), unless the sub-class is itself deferred. +In a sub-class of a deferred class, all deferred methods, which have been inherited, must be implemented, then redeclared (the attribute **redefined** is useless for this purpose), unless the sub-class is itself deferred. A non-deferred method can be redefined as a deferred one, in which case it will be declared as follows: **is redefined deferred**. -The notion of deferred class is very useful. The advantage of introducing it, as was previously shown in the deferred class “Point”, is that the corresponding resources will be available even before being implemented. Later, you can add different representations to Point (for example, spherical or Cartesian coordinates) without having to modify client programs. +The notion of deferred class is very useful. The advantage of introducing it, as was previously shown in the deferred class *Point*, is that the corresponding resources will be available even before being implemented. Later, you can add different representations to Point (for example, spherical or Cartesian coordinates) without having to modify client programs. Thanks to the possibility of redefining methods, this approach does not have any negative impact on performance: a method implemented at the level of a deferred class can be reprogrammed in one of its sub-classes while taking into account the data representation. -@subsubsection occt_1819379591_1972310108445 Declaration by Association - -At the heart of a class hierarchy, object identifiers are compatible in the ascendant sense. Since the Conic class is descended from the Curve class, an identifier of type Curve can reference an object of type Conic (remember that the behavior of Curve is applicable to Conic). In other words, you can assign a reference to a Conic to an identifier of type Curve, but *not *vice versa. -For example, once the classes have been compiled you could write a C++ test program in which you instantiate a Conic but reference it with a handle to a Curve: +@subsubsection occt_cdl_4_4_5 Declaration by Association -**Example** +At the heart of a class hierarchy, object identifiers are compatible in the ascendant sense. Since the *Conic* class is descended from the *Curve* class, an identifier of type *Curve* can reference an object of type *Conic* (remember that the behavior of *Curve* is applicable to *Conic*). In other words, you can assign a reference to a *Conic* to an identifier of type *Curve*, but not vice versa. +For example, once the classes have been compiled you could write a C++ test program in which you instantiate a Conic but reference it with a handle to a Curve: +~~~~~ Handle(Curve) c = new Conic +~~~~~ +This same rule applies to parameters of methods; that is to say, you can call a method with identifiers corresponding to a sub-type of that specified in its declaration. To illustrate this, let us go back to the “Distance” method of the “Point” class: -This same rule applies to parameters of methods; that is to say, you can call a method with identifiers corresponding to a sub-type of that specified in its declaration. To illustrate this, you go back to the “Distance” method of the “Point” class: -**Example** - +~~~~~ Distance (me; P : point) returns Real; - +~~~~~ Conforming to the rule of type compatibility, you could make a call to the method “Distance” with reference to an object from a class descended from “Point”. Consequently, if “SphericPoint” is a sub-class of “Point” and therefore inherits this method, it will be possible to calculate the distance between two “SphericPoint”, or between a “SphericPoint” and a “Point”, without having to redefine the method. On the other hand, sometimes you may want to force two parameters to be exactly of the same type, and thus not apply the rule of type compatibility. To do this, you need to associate the type of the concerned parameters in the method declaration. -**Example** - -association-typing ::= -**like **associated-parameter -associated-parameter ::= -**me **| identifier +~~~~~ +association-typing ::= like associated-parameter +associated-parameter ::= me | identifier +~~~~~ -NOTE -***Note that identifier is the name of a parameter, which appears*** -***first in the formal part of the declaration of the method.*** +Note that identifier is the name of a parameter, which appears first in the formal part of the declaration of the method. You can use this technique, which consists in declaring by association, to declare a method that will exchange the content of two objects, or a method, which copies another object: -**Example** +~~~~~ Swap (me : mutable; With : mutable like me); DeepCopy (me) returns mutable like me; +~~~~~ -Make sure *not *to write the Swap method as in the syntax below: +Make sure not to write the Swap method as in the syntax below: -**Example** +~~~~~ Swap (me : mutable; With : mutable Point); +~~~~~ + +In this case **me** may be a CartesianPoint or a SphericalPoint, while *With* can only be a Point. -In this case **me **may be a CartesianPoint or a SphericalPoint, while “With” can only be a Point. -@subsubsection occt_1819379591_1972310108446 Redefinition of Fields +@subsubsection occt_cdl_4_4_6 Redefinition of Fields The creation of a hierarchy of classes should be viewed as a means to specialize their behavior, (e.g. a circle is more specialized than a conic section). The more you specialize the object classes, the more it is justified to call into question the inherited fields in order to obtain greater optimization. So, in the description of the internal representation of a sub-class, it is possible not to inherit all of the fields of the super-classes. You then say the fields have been redefined. -**Example** -redefinition-of-the-representation-of-a-class ::= -**redefined **redefinition-of-a-field {’,’ redefinition-of-a- +~~~~~ +redefinition-of-the-representation-of-a-class ::= redefined redefinition-of-a-field {’,’ redefinition-of-a- field}’,’ -redefinition-of-a-field ::= -[field-name] **from **[**class**] class-name +redefinition-of-a-field ::= [field-name] from [class] class-name +~~~~~ -Redefinition of fields can *only *be done in classes manipulated by a handle. +Redefinition of fields can only be done in classes manipulated by a handle. This declaration appears at the beginning of the definition of the internal representation of the sub-class, which breaks the field inheritance. The non-inherited fields are all those which come from the class specified behind the rubric **from**. -@subsection occt_1819379591_197231010845 Genericity +@subsection occt_cdl_4_5 Genericity -@subsubsection occt_1819379591_1972310108451 Overview +@subsubsection occt_cdl_4_5_1 Overview Inheritance is a powerful mechanism for extending a system, but it does not always allow you to avoid code duplication, particularly in the case where two classes differ only in the type of objects they manipulate (you certainly encounter this phenomenon in all basic structures). In such cases, it is convenient to send arbitrary parameters representing types to a class. Such a class is called a **generic class**. Its parameters are the generic types of the class. Generic classes are implemented in two steps. You first declare the generic class to establish the model, and then instantiate this class by giving information about the generic types. -@subsubsection occt_1819379591_1972310108452 Declaration of a Generic Class +@subsubsection occt_cdl_4_5_2 Declaration of a Generic Class The syntax is as follows: -**Example** -declaration-of-a-generic-class ::= -[**deferred**] **generic class **class-name ’(’generic-type -{’,’generic-type}’)’ -[**inherits **class-name -[**uses **data-type {’,’ data-type}] -[**raises **exception-name {’,’ exception-name}] -**is **class-definition -**end **[class-name]’;’ -generic-type ::= -identifier **as **type-constraint -type-constraint ::= -**any **| class-name [’(’data-type {’,’data-type}’)’] +~~~~~ +declaration-of-a-generic-class ::= [deferred] generic class class-name ’(’generic-type {’,’generic-type}’)’ +[inherits class-name +[uses data-type {’,’ data-type}] +[raises exception-name {’,’ exception-name}] + is class-definition + end [class-name]’;’ +generic-type ::= identifier as type-constraint +type-constraint ::= any | class-name [’(’data-type {’,’data-type}’)’] +~~~~~ The names of generic types become new types, which are usable in the definition of a class, both in its behavior (methods) and its representation (fields). The generic type is only visible inside the generic class introducing it. As a result, it is possible to have another generic class using the same generic type within the same package. + When you specify the type constraint under the form of a class name, you impose a minimum set of behavior on the manipulated object. This shows that the generic type has as a minimum the services defined in the class. This can be any kind of a previously defined class, including another generic class, in which case you state exactly with what types they are instantiated. @@ -1316,484 +1352,495 @@ No class can inherit from a generic class. A generic class can be a deferred class. A generic class can also accept a deferred class as its argument. In both these cases any class instantiated from it will also be deferred. The resulting class can then be inherited by another class. -Below is a partial example of a generic class: a persistent singly linked list. -**Example** - +Below is a partial example of a generic class: a persistent singly linked list. + +~~~~~ generic class SingleList (Item as Storable) -inherits Persistent -raises NoSuchObject -is -Create returns mutable SingleList; + inherits Persistent + raises NoSuchObject + is + Create returns mutable SingleList; ---Purpose: Creates an empty list -IsEmpty (me) returns Boolean; - ---Purpose: Returns true if the list me is empty -SwapTail (me : mutable; S : in out mutable -SingleList) - ---Purpose: Exchanges the tail of list me with S --- Exception NoSuchObject raised when me is -empty -raises NoSuchObject; - Value (me) returns Item - ---Purpose: Returns first element of the list me --- Exception NoSuchObject raised when me is -empty -raises NoSuchObject; - Tail (me) returns mutable SingleList ----Purpose: Returns the tail of the list me --- Exception NoSuchObject raised when me is -empty -raises NoSuchObject; - fields -Data : Item; - Next : SingleList; - end SingleList; + IsEmpty (me) returns Boolean; + ---Purpose: Returns true if the list me is empty + SwapTail (me : mutable; S : in out mutable + SingleList) + ---Purpose: Exchanges the tail of list me with S + -- Exception NoSuchObject raised when me is empty + raises NoSuchObject; + Value (me) returns Item + ---Purpose: Returns first element of the list me + -- Exception NoSuchObject raised when me is empty + raises NoSuchObject; + Tail (me) returns mutable SingleList + ---Purpose: Returns the tail of the list me + -- Exception NoSuchObject raised when me is empty + raises NoSuchObject; + fields + Data : Item; + Next : SingleList; + end SingleList; +~~~~~ Even though no object of the type “SingleList” IS created, the class contains a constructor. This class constitutes a model, which will be recopied at instantiation time to create a new class which will generate objects. The constructor will then be required. -**Example** +**Example** +~~~~~ generic class Sequence(Item as any, Node as SingleList(Item)) inherits Object . . . end Sequence +~~~~~ -In the above example, there are two generic types: Item & Node. The first imposes no restriction. The second must at least have available the services of the class SingleList instantiated with the type with which Sequence will itself be instantiated. +In the above example, there are two generic types: *Item* and *Node*. The first imposes no restriction. The second must at least have available the services of the class *SingleList* instantiated with the type with which *Sequence* will itself be instantiated. -In the **incomplete declaration of a generic class**, the keyword **generic **must appear. -**Example** +In the incomplete declaration of a generic class, the keyword **generic** must appear. +**Example** +~~~~~ generic class SingleList; generic class Sequence; -@subsubsection occt_1819379591_1972310108453 Instantiation of a Generic Class +~~~~~ + +@subsubsection occt_cdl_4_5_3 Instantiation of a Generic Class The syntax is as follows: -**Example** -instantiation-of-a-generic-class ::= -[**deferred**] **class **class-name -** instantiates **class-name ’(’data-type {’,’ -data-type}’);’ +~~~~~ +instantiation-of-a-generic-class ::= [deferred] class class-name + instantiates class-name ’(’data-type {’,’ data-type}’);’ +~~~~~ Instantiation is said to be **static**. In other words, it must take place before any use can be made of the type of the instantiated class. Each data type is associated term by term with those declared at the definition of the generic class. These latter ones, when they are not of the type **any**, restrict instantiation to those classes, which have a behavior at least equal to that of the class specified in the type constraint, including constructors. Note that this is not guaranteed by inheritance itself. -For example, let’s instantiate the class “Sequence” for the type “Point”: -**Example** +For example, let’s instantiate the class *Sequence* for the type *Point*: +~~~~~ class SingleListOfPoint instantiates SingleList(Point); class Sequence instantiates -Sequence(Point,SingleListOfPoint); + Sequence(Point,SingleListOfPoint); +~~~~~ -The instantiation of a generic deferred class is a deferred class (the **deferred **attribute must be present during instantiation). An instantiated class cannot be declared in an incomplete fashion. +The instantiation of a generic deferred class is a deferred class (the **deferred** attribute must be present during instantiation). An instantiated class cannot be declared in an incomplete fashion. -@subsubsection occt_1819379591_1972310108454 Nested Generic Classes +@subsubsection occt_cdl_4_5_4 Nested Generic Classes + +It often happens that many classes are linked by a common generic type. This is the case when a base structure provides an iterator, for example, in the class *Graph*. A graph is made up of arcs, which join together the nodes, which reference objects of any type. This type is generic both for the graph and for the node. In this context, it is necessary to make sure that the group of linked generic classes is indeed instantiated for the same type of object. So as to group the instantiation, CDL allows the declaration of certain classes to be nested. -It often happens that many classes are linked by a common generic type. This is the case when a base structure provides an iterator, for example, in the class “Graph”. A graph is made up of arcs, which join together the nodes, which reference objects of any type. This type is generic both for the graph and for the node. In this context, it is necessary to make sure that the group of linked generic classes is indeed instantiated for the same type of object. So as to group the instantiation, CDL allows the declaration of certain classes to be nested. **Example** -declaration-of-a-generic-class ::= - [**deferred**] **generic class **class-name ’(’generic- -type{’,’generic-type}’)’ - [**inherits **class-name {’,’ class-name}] - [**uses **data-type {’,’ data-type}] - [**raises **exception-name {’,’ exception-name}] +~~~~~ +declaration-of-a-generic-class ::= [deferred] generic class class-name ’(’generic-type{’,’generic-type}’)’ + [inherits class-name {’,’ class-name}] + [uses data-type {’,’ data-type}] + [raises exception-name {’,’ exception-name}] [{[visibility] class-declaration}] -** is **class-definition -**end **[class-name]’;’ - class-declaration ::= - incomplete-declaration-of-a-class | - declaration-of-a-non-generic-class | - instantiation-of-a-generic-class + is class-definition +end [class-name]’;’ + class-declaration ::= incomplete-declaration-of-a-class | declaration-of-a-non-generic-class | instantiation-of-a-generic-class +~~~~~ -**Nested classes**, even though they are described as non-generic classes, are generic by construction, being inside the class of which they are a part. As a consequence, the generic types introduced by the **encompassing class **can be used in the definition of the nested class. This is true even if the generic type is only used in a nested class. The generic types still* must *appear as an argument of the encompassing class. All other types used by a nested class *must *appear in its **uses **or **raises **clauses, just as if it were an independent class. +**Nested classes**, even though they are described as non-generic classes, are generic by construction, being inside the class of which they are a part. As a consequence, the generic types introduced by the **encompassing class** can be used in the definition of the nested class. This is true even if the generic type is only used in a nested class. The generic types still must appear as an argument of the encompassing class. All other types used by a nested class must appear in its **uses** or **raises** clauses, just as if it were an independent class. -Nested classes are, by default, **public**. In other words, they can be used by the clients of the encompassing class. On the other hand, when one of the nested classes is declared **private **or **protected**, this class *must not *appear in any of the public methods of the other classes. It cannot be used in a protected field because then it could be used in a sub-class, which implies it would not be private. +Nested classes are, by default, **public**. In other words, they can be used by the clients of the encompassing class. On the other hand, when one of the nested classes is declared **private** or **protected**, this class must not appear in any of the public methods of the other classes. It cannot be used in a protected field because then it could be used in a sub-class, which implies it would not be private. The following example shows how to write the Set class with its iterator. -**Example** +~~~~~ generic class Set (Item as Storable) -inherits Persistent -private class Node instantiates SingleList (Item); -class Iterator - uses Set, Node - raises NoSuchObject, NoMoreObject - is - Create (S : Set) returns mutable Iterator; ----Purpose: Creates an iterator on the group S - More (me) returns Boolean; ----Purpose: Returns true if there are still elements - -- to explore - Next (me) raises NoMoreObject; ----Purpose: Passes to the following element - Value (me) returns any Item raises NoSuchObject; ----Purpose: Returns the current element - fields - Current : Node; -end Iterator; -is - Create returns mutable Set; ----Purpose: Creates an empty group - IsEmpty (me) returns Boolean; ----Purpose: Returns true if the group is empty - Add (me : mutable; T : Item); ----Purpose: Adds an item to the group me - Remove (me : mutable; T : item) raises -NoSuchObject; ----Purpose: Removes an item from the group me - etc. - fields - Head : Node; -end Set; - -Note that in their fields, both “Set” and “Iterator” are clients of another class, “Node”. This last can be effectively declared **private **for it only appears in fields which are themselves private. + inherits Persistent + private class Node instantiates SingleList (Item); + class Iterator + uses Set, Node + raises NoSuchObject, NoMoreObject + is + Create (S : Set) returns mutable Iterator; + ---Purpose: Creates an iterator on the group S + More (me) returns Boolean; + ---Purpose: Returns true if there are still elements + -- to explore + Next (me) raises NoMoreObject; + ---Purpose: Passes to the following element + Value (me) returns any Item raises NoSuchObject; + ---Purpose: Returns the current element + fields + Current : Node; + end Iterator; + is + Create returns mutable Set; + ---Purpose: Creates an empty group + IsEmpty (me) returns Boolean; + ---Purpose: Returns true if the group is empty + Add (me : mutable; T : Item); + ---Purpose: Adds an item to the group me + Remove (me : mutable; T : item) raises + NoSuchObject; + ---Purpose: Removes an item from the group me + etc. + fields + Head : Node; + end Set; +~~~~~ + +Note that in their fields, both “Set” and “Iterator” are clients of another class, “Node”. This last can be effectively declared **private** for it only appears in fields which are themselves private. The instantiation of a generic class containing nested classes remains unchanged. The same declaration is used to instantiate the encompassing class and the nested classes. These latter will have their name suffixed by the name supplied at instantiation, separated by “Of”. For example, you instantiate the class “Set” described above for the type “Point” as follows: -**Example** +~~~~~ class SetOfPoint instantiates Set(Point); - +~~~~~ In doing so, you implicitly describe the classes “NodeOfSetOfPoint” and “IteratorOfSetOfPoint”, which are respectively the result of the concatenation of “Node” and “Iterator” with “Of” then “SetOfPoint”. -Note that in the incomplete declaration of an encompassing class, all the names of the nested classes *must *appear behind that of the encompassing class. +Note that in the incomplete declaration of an encompassing class, all the names of the nested classes *must* appear behind that of the encompassing class. -incomplete-declaration-of-a-generic-class ::= -[**deferred**] **generic **class-name {’,’ class-name}; +~~~~~ +incomplete-declaration-of-a-generic-class ::= [deferred] generic class-name {’,’ class-name}; +~~~~~ For example, an incomplete declaration of the above class “Set” would be as in the example below: -**Example** +~~~~~ generic class Set, Node, Iterator; +~~~~~ Only the encompassing class can be deferred. In the above example only the class “Set” can be deferred. -@subsection occt_1819379591_197231010846 Visibility +@subsection occt_cdl_4_6 Visibility -@subsubsection occt_1819379591_1972310108461 Overview +@subsubsection occt_cdl_4_6_1 Overview A field, method, class, or package method is only available for use if it is **visible**. Each of these components has a default visibility, which can be explicitly modified during class or package declaration. The three possible states of visibility are: - * Public * Private * Protected -@subsubsection occt_1819379591_1972310108462 Visibility of Fields +@subsubsection occt_cdl_4_6_2 Visibility of Fields -A field is **private**. It can never be public - this would destroy the whole concept of data encapsulation. The attribute **private **is redundant when it is applied to a field. This means that a field is only visible to methods within its own class. -A field can be declared **protected **which means that it becomes visible in subclasses of its own class. Its contents can be modified by methods in subclasses. +A field is **private**. It can never be public - this would destroy the whole concept of data encapsulation. The attribute **private** is redundant when it is applied to a field. This means that a field is only visible to methods within its own class. +A field can be declared **protected**, which means that it becomes visible in subclasses of its own class. Its contents can be modified by methods in subclasses. -field ::= -identifier {’,’ identifier} ’:’ data-type +~~~~~ +field ::= identifier {’,’ identifier} ’:’ data-type [’[’integer{’,’integer}’]’] -[**is protected**]’;’ -Example +[is protected]’;’ +~~~~~ + +**Example** +~~~~~ fields Phi, Delta, Gamma : AngularMomenta [3] is protected ; +~~~~~ +@subsubsection occt_cdl_4_6_3 Visibility of Methods -@subsubsection occt_1819379591_1972310108463 Visibility of Methods +Methods act on fields. Only methods belonging to a class can act on the fields of the class; this stems from the principle of object encapsulation. Methods can be characterized in three ways: by default, methods are **public**. Methods can be declared **private** or **protected** to restrict their usage. -Methods act on fields. Only methods belonging to a class can act on the fields of the class; this stems from the principle of object encapsulation. Methods can be characterized in three ways: by default, methods are **public**. Methods can be declared **private **or **protected **to restrict their usage. - -**Public methods **Are the default and are generally the most common. They describe the behavior of a class or a package, and they are callable by any part of a program. - -**Private methods **Exist only for the internal structuring of their class or their package. Private class methods can only be called by methods belonging to the same class. Private package methods can only be called by all methods belonging to the same package and its classes. - -**Protected methods **Are private methods, which are also callable from the interior of descendent classes. +* **Public** methods are the default and generally the most common. They describe the behavior of a class or a package, and they are callable by any part of a program. +* **Private** methods exist only for the internal structuring of their class or their package. Private class methods can only be called by methods belonging to the same class. Private package methods can only be called by all methods belonging to the same package and its classes. +* **Protected** methods are private methods, which are also callable from the interior of descendent classes. If you want to restrict the usage of a method, you associate with it a visibility as follows : +~~~~~ +-- declaration-of-the-visibility ::= is visibility +visibility ::= private | protected +~~~~~ --- declaration-of-the-visibility ::= -**is **visibility -visibility ::= **private **| **protected** - -The declaration of the visibility of a method appears at the end of its definition, before the final semi-colon. The attribute **private **indicates that the method will only be visible to the behavior of the class of which the method is a member; **protected **will propagate the visibility among the sub-classes of this class. +The declaration of the visibility of a method appears at the end of its definition, before the final semi-colon. The attribute **private** indicates that the method will only be visible to the behavior of the class of which the method is a member; **protected** will propagate the visibility among the sub-classes of this class. For example, add to the class “Line” an internal method allowing the calculation of the perpendicular distance to the power of two, from the line to a point. -**Example** +~~~~~ SquareDistance (me; P : Point) returns Real -@subsubsection occt_1819379591_1972310108464 Visibility of Classes, Exceptions, & Enumerations +is private; +~~~~~ + +@subsubsection occt_cdl_4_6_4 Visibility of Classes, Exceptions and Enumerations -The visibility of a class is the facility to be able to use this class in the definition of another class. The visibility of a class extends from the beginning of its declaration up to the end of the package in which it appears. You have seen that the keyword **uses **allows extension of this visibility to other packages. +The visibility of a class is the facility to be able to use this class in the definition of another class. The visibility of a class extends from the beginning of its declaration up to the end of the package in which it appears. You have seen that the keyword **uses** allows extension of this visibility to other packages. -As was explained in the section on “Name Space”, any ambiguity, which arises from having two classes with the same name coming from different packages, is dealt with by the use of the keyword **from**. +As was explained in the section on “Name Space”, any ambiguity, which arises from having two classes with the same name coming from different packages, is dealt with by the use of the keyword **from**. -A class declared **private **is only available within its own package. +A class declared **private** is only available within its own package. -@subsubsection occt_1819379591_1972310108465 Friend Classes & Methods +@subsubsection occt_cdl_4_6_5 Friend Classes and Methods -In certain cases, methods need to have direct access to the private or protected parts of classes of which they are clients. Such a method is called a **friend **of the class, which is accessed. For example, you declare a method to be a friend when a service can only be obtained via the use of another non-descendent class, or perhaps when this will help to improve performance. +In certain cases, methods need to have direct access to the private or protected parts of classes of which they are clients. Such a method is called a **friend** of the class, which is accessed. For example, you declare a method to be a friend when a service can only be obtained via the use of another non-descendent class, or perhaps when this will help to improve performance. Classes can also be declared friends of other classes. In this case all the methods of the friend class will have access to the fields and methods of the host class. The right is **not reciprocal**. Friend classes or methods are declared inside the class, which reveals its private and protected data or methods to them. This helps in managing the continuing evolution of a class, helping to recognize and to avoid the creation of side effects. -**Example** -declaration-of-friends ::= -**friends **friend {’,’friend} - friend ::= - identifier **from **[**class**] class-name [formal-part] | -**Defining the Software Components 67** -identifier **from **[**package**] package-name [formal-part] | -** class**] class-name - formal-part ::= - simple-formal-part | - formal-part-of-instance-method | - formal-part-of-class-method +**Example** +~~~~~ +declaration-of-friends ::= friends friend {’,’friend} + friend ::= identifier from [class] class-name [formal-part] | +-- Defining the Software Components 67 +identifier from [package] package-name [formal-part] | class] class-name + formal-part ::= simple-formal-part | formal-part-of-instance-method | formal-part-of-class-method +~~~~~ -The formal part *must *be presented if the method contains one; thus this can be overloaded without necessarily propagating the friend relationship among its homonyms. The keyword **class **allows you to avoid certain ambiguities. For example, it removes any confusion between “method M from class C” and “method M from package P”. +The formal part must be present if the method contains one; thus this can be overloaded without necessarily propagating the friend relationship among its homonyms. The keyword **class** allows you to avoid certain ambiguities. For example, it removes any confusion between “method M from class C” and “method M from package P”. As an example, take a method, which calculates the perpendicular distance between a line and a point. Suppose this method needs to access the fields of the point. In the class “Point” you would write: -**Example** +~~~~~ friends Distance from Line (me; P : Point) +~~~~~ -A method can be a friend to many classes. The class to which the method belongs does *not *need to appear in the **uses **clause of other classes of which it is a friend. - - @image html /dev_guides/cdl/images/cdl_image011.png - @image latex /dev_guides/cdl/images/cdl_image011.png +A method can be a friend to many classes. The class to which the method belongs does not need to appear in the **uses** clause of other classes of which it is a friend. When the methods of a class are all friends of another class, you can establish the friendship at the level of the class. -Figure 9. Visibility of various components -@section occt_1819379591_858765726 Appendix A. Syntax Summary + +| | Public | Private | Protected | +| :---- | :---- | :---- | :----- | +| Field | Does not exist | **Default** - Visible to methods in its own class and in friend classes | Visible to methods in its own class, sub-classes and friend classes | +| Method | **Default** - Callable anywhere | Callable by methods in its own class and in friend classes | Callable by methods in its own class, sub-classes and friend classes | +| Class | **Default** - Visible everywhere with the use of **from** rubric | Visible to classes in its own package | Does not exist | +| Package method | **Default** - Callable everywhere with the use of **from** rubric | Visible to classes in its own package | Does not exist | +| Nested Class | **Default** - Visible to the clients of the encompassing class | Visible to the encompassing class and other classes nested in the encompassing class | Does not exist | +@section occt_cdl_5 Appendix A. Syntax Summary -This summary of the CDL syntax will aid in the comprehension of the language, but does *not *constitute an exact definition thereof. In particular, the grammar described here accepts a super-set of CDL constructors semantically validated. -(1) capital ::= -’A’ | ’B’ | ’C’ | ’D’ | ’E’ | ’F’ | ’G’ | ’H’ | -’I’ | ’J’ | ’K’ | ’L’ | ’M’ | ’N’ | -’O’ | ’P’ | ’Q’ | ’R’ | ’S’ | ’T’ | ’U’ | ’V’ | -’W’ | ’X’ | ’Y’ | ’Z’ +This summary of the CDL syntax will aid in the comprehension of the language, but does *not* constitute an exact definition thereof. In particular, the grammar described here accepts a super-set of CDL constructors semantically validated. -(2) non-capital ::= -’a’ | ’b’ | ’c’ | ’d’ | ’e’ | ’f’ | ’g’ | ’h’ | -’i’ | ’j’ | ’k’ | ’l’ | ’m’ | ’n’ | -’o’ | ’p’ | ’q’ | ’r’ | ’s’ | ’t’ | ’u’ | ’v’ | -’w’ | ’x’ | ’y’ | ’z’ +(1) capital ::= ’A’ | ’B’ | ’C’ | ’D’ | ’E’ | ’F’ | ’G’ | ’H’ | ’I’ | ’J’ | ’K’ | ’L’ | ’M’ | ’N’ | +’O’ | ’P’ | ’Q’ | ’R’ | ’S’ | ’T’ | ’U’ | ’V’ | ’W’ | ’X’ | ’Y’ | ’Z’ -(3) digit ::= -’0’ | ’1’ | ’2’ | ’3’ | ’4’ | ’5’ | ’6’ | ’7’ | -’8’ | ’9’ +(2) non-capital ::= ’a’ | ’b’ | ’c’ | ’d’ | ’e’ | ’f’ | ’g’ | ’h’ | ’i’ | ’j’ | ’k’ | ’l’ | ’m’ | ’n’ | +’o’ | ’p’ | ’q’ | ’r’ | ’s’ | ’t’ | ’u’ | ’v’ | ’w’ | ’x’ | ’y’ | ’z’ -(4) underscore ::= -’_’ +(3) digit ::= ’0’ | ’1’ | ’2’ | ’3’ | ’4’ | ’5’ | ’6’ | ’7’ | ’8’ | ’9’ -(5) special character ::= -’ ’ | ’!’ | ’”’ | ’#’ | ’$’ | ’%’ | ’&’ | ’’’ | -’(’ | ’)’ | ’*’ | ’+’ | ’,’ | ’-’ | -’.’ | ’/’ | ’:’ | ’;’ | ’’ | ’=’ | ’’ | ’?’ | -’@’ | ’[’ | ’\’ | ’]’ | ’^’ | ’‘’ | -’{’ | ’|’ | ’}’ | ’~’ +(4) underscore ::= ’_’ -(6) printable character::= -capitals | non-capitals | digits | underscore | -special characters +(5) special character ::= ’ ’ | ’!’ | ’”’ | ’#’ | ’$’ | ’%’ | ’&’ | ’’’ | ’(’ | ’)’ | ’*’ | ’+’ | ’,’ | ’-’ | ’.’ | ’/’ | ’:’ | ’;’ | ’’ | ’=’ | ’’ | ’?’ | ’@’ | ’[’ | ’\’ | ’]’ | ’^’ | ’‘’ | ’{’ | ’|’ | ’}’ | ’~’ -(7) letter ::= -capital | non-capital +(6) printable character::= capitals | non-capitals | digits | underscore | special characters -(8) alphanumeric ::= -letter | digit +(7) letter ::= capital | non-capital -(9) identifier ::= -letter{[underscore]alphanumeric} +(8) alphanumeric ::= letter | digit -(10) integer ::= -digit{digit} +(9) identifier ::= letter{[underscore]alphanumeric} -(11) exponent ::= -’E’[’+’]integer | ’E-’integer +(10) integer ::= digit{digit} -(12) numeric-constant ::= -[’+’]integer ’.’ integer[exponent] | ’-’integer -’.’ integer[exponent] +(11) exponent ::= ’E’[’+’]integer | ’E-’integer +(12) numeric-constant ::= [’+’]integer ’.’ integer[exponent] | ’-’integer ’.’ integer[exponent] -(13) literal-constant ::= -’’’printable character’’’ | ’~’{printable + +(13) literal-constant ::= ’’’printable character’’’ | ’~’{printable character}’~’ -(14) package-name ::= -identifier +(14) package-name ::= identifier + +(15) enumeration-name ::= identifier [**from** package-name] + +(16) class-name ::= identifier [**from** package-name] -(15) enumeration-name ::= -identifier [**from**** **package-name] +(17) exception-name ::= identifier [**from** package-name] -(16) class-name ::= -identifier [**from**** **package-name] +(18) constructor-name ::= ’Create’ | ’Initialize’ -(17) exception-name ::= -identifier [**from**** **package-name] +(19) primitive-type ::= ’Boolean’ | ’Character’ | ’Integer’ | ’Real’ -(18) constructor-name ::= -’Create’ | ’Initialize’ +(20) data-type ::= enumeration-name | class-name | exception-name | primitive-type -(19) primitive-type ::= -’Boolean’ | ’Character’ | ’Integer’ | ’Real’ +(21) passed-type ::= data-type | **like me** | **like** identifier -(20) data-type ::= -enumeration-name | class-name | exception-name -| primitive-type +(22) passing-mode ::= [**in**] | **out** | **in out** -(21) passed-type ::= -data-type | **like me**** **| **like**** **identifier +(23) parameter-access ::= **mutable** | [**immutable**] -(22) passing-mode ::= -[**in**] | **out**** **| **in out** +(23A) return-access ::= **mutable** | [**immutable**]| **any** -(23) parameter-access ::= -**mutable**** **| [**immutable**] +(24) value ::= numeric-constant | literal-constant | identifier -(23A) return-access ::= -**mutable**** **| [**immutable**]| **any** +(25) parameter ::= identifier {’,’ identifier} ’:’ passing-mode access-right passed-type [’=’ value] -(24) value ::= -numeric-constant | literal-constant | -identifier +(26) simple-formal-part ::= ’(’parameter {’;’ parameter}’)’ -(25) parameter ::= -identifier {’,’ identifier} ’:’ passing-mode -access-right passed-type [’=’ value] +(27) formal-part-of-instance-method ::= ’(’ **me** [’:’ passing-mode access-right] {’;’ parameter}’)’ -(26) simple-formal-part ::= -’(’parameter {’;’ parameter}’)’ +(28) formal-part-of-class-method ::= ’(’ **myclass** {’;’ parameter}’)’ -(27) formal-part-of-instance-method ::= -’(’**me**** **[’:’ passing-mode access-right] {’;’ -parameter}’)’ +(29) visibility ::= **private** | **protected** -(28) formal-part-of-class-method ::= -’(’**myclass**** **{’;’ parameter}’)’ +(30) redefinition ::= **static** | **deferred** -(29) visibility ::= -**private**** **| **protected** -(30) redefinition ::= -**static**** **| **deferred** -(31) definition-level ::= -redefinition |** ****redefined**** **[redefinition] +(31) definition-level ::= redefinition | **redefined** [redefinition] -(32) declaration-of-constructed-type ::= -**returns**** **[**mutable**] class-name +(32) declaration-of-constructed-type ::= **returns** [**mutable**] class-name -(33) declaration-of-returned-type ::= -**returns**** **return-access passed-type +(33) declaration-of-returned-type ::= **returns** return-access passed-type -(34) declaration-of-errors ::= -**raises**** **exception-name {’,’ exception-name} +(34) declaration-of-errors ::= **raises** exception-name {’,’ exception-name} -(35) declaration-of-visibility ::= -**is**** **visibility +(35) declaration-of-visibility ::= **is** visibility -(36) declaration-of-attributes-of-instance-method ::= -**is**** **visibility | **is **definition-of-level -[visibility] +(36) declaration-of-attributes-of-instance-method ::= **is** visibility | **is** definition-of-level [visibility] -(37) constructor ::= -constructor-name [simple-formal-part] +(37) constructor ::= constructor-name [simple-formal-part] [declaration-of-constructed-type] [declaration-of-errors] [declaration-of-visibility]’;’ -(38) instance-method ::= -identifier formal-part-of-instance-method +(38) instance-method ::= identifier formal-part-of-instance-method [declaration of returned type] [declaration-of-errors] [declaration-of-attributes-of-instancemethod]’;’ -(39) class-method ::= -identifier formal-part-of-the-class-method +(39) class-method ::= identifier formal-part-of-the-class-method [declaration of returned type] [declaration-of-errors] [declaration-of-visibility]’;’ -(40) package-method ::= -identifier [simple-formal-part] +(40) package-method ::= identifier [simple-formal-part] [declaration-of-returned-type] [declaration-of-errors] [**is private**]’;’ -(41) member-method ::= -constructor | instance-method | class-method +(41) member-method ::= constructor | instance-method | class-method -(42) formal-part ::= -simple-formal-part | -formal-part-of-instance-method| -formal-part-of-class-method +(42) formal-part ::= simple-formal-part | formal-part-of-instance-method| formal-part-of-class-method -(43) friend ::= -identifier **from**** **[**class**] class-name [formal-part] -| -identifier **from**** **[**package**] package-name [formal- -part] | +(43) friend ::= identifier **from** [**class**] class-name [formal-part] +| identifier **from** [**package**] package-name [formal-part] | [**class**] class-name -(44) field ::= -identifier {’,’ identifier} ’:’ data-type +(44) field ::= identifier {’,’ identifier} ’:’ data-type [’[’integer {’,’ integer}’]’] [**is protected**]’;’ -45) redefinition-of-field ::= -[field-name] **from**** **[**class**] class-name +45) redefinition-of-field ::= [field-name] **from** [**class**] class-name -(46) declaration-of-fields ::= -**fields**** **[**redefined**** **redefinition-of-field {’,’ -redefinition-of-field}’;’] +(46) declaration-of-fields ::= **fields** [**redefined** redefinition-of-field {’,’ redefinition-of-field}’;’] field {field} -(47) declaration-of-an-alias::= -[**private**] **alias**** **class-name1 **is**** **class-name2 [**from** -package-name] +(47) declaration-of-an-alias::= [**private**] **alias** class-name1 **is** class-name2 [**from** package-name] -(48) declaration-of-friends ::= -**friends**** **friend {’,’ friend} +(48) declaration-of-friends ::= **friends** friend {’,’ friend} -(49) class-definition ::= -[{member-method}] +(49) class-definition ::= [{member-method}] [declaration-of-fields] [declaration-of-friends] -(50) declaration-of-an-exception ::= -**exception**** **exception-name -**inherits**** **exception-name +(50) declaration-of-an-exception ::= **exception** exception-name **inherits** exception-name -(51) declaration-of-an-enumeration ::= -**enumeration**** **enumeration-name -**is**** **identifier {’,’ identifier} -[**end**** **[enumeration-name]]’;’ +(51) declaration-of-an-enumeration ::= **enumeration** enumeration-name +**is** identifier {’,’ identifier} +[**end** [enumeration-name]]’;’ (52) incomplete-declaration-of-a-non-generic-class ::= -[**deferred**] **class**** **class-name’;’ +[**deferred**] **class** class-name’;’ (53) incomplete-declaration-of-a-generic-class ::= -[**deferred**] **generic class**** **class-name {’,’ class-name}’;’ +[**deferred**] **generic class** class-name {’,’ class-name}’;’ (54) declaration-of-a-non-generic-class ::= -[**deferred**] **class**** **class-name -[**inherits**** **class-name -[**uses**** **data-type {’,’ data-type}] -[**raises**** **exception-name {’,’ exception-name}] -** is **definition-of-a-class -**end **[class-name]’;’ - -(55) type-constraint ::= -**any**** **| class-name [’(’data-type {’,’ data-type}’)’] - -(56) generic-type ::= -identifier **as**** **type-constraint -@section occt_1819379591_2139552861 Appendix B. - - - -@subsection occt_1819379591_213955286151 Comparison of CDL & C++ Syntax for Data Types manipulated by Handle and by Value - - @image html /dev_guides/cdl/images/cdl_image012.png - @image latex /dev_guides/cdl/images/cdl_image012.png - \ No newline at end of file +[**deferred**] **class** class-name +[**inherits** class-name +[**uses** data-type {’,’ data-type}] +[**raises** exception-name {’,’ exception-name}] +**is** definition-of-a-class +**end** [class-name]’;’ + +(55) type-constraint ::= **any** | class-name [’(’data-type {’,’ data-type}’)’] + +(56) generic-type ::= identifier **as** type-constraint + +(57) declaration-of-a-generic-class ::= +[**deferred**] **generic class** class-name ’(’generic-type +{’,’ generic-type}’)’ +[**inherits** class-name +[**uses** data-type {’,’ data-type}] +[**raises** exception-name {’,’ exception-name}] +[{[visibility] declaration-of-a-class}] +**is** class-definition +**end** [class-name]’;’ + +(58) instantiation-of-a-generic-class::= +[**deferred**] **class** class-name +**instantiates** class-name ’(’data-type +{’,’ data-type}’);’ + +(59) declaration-of-a-class::= +incomplete-declaration-of-a-non-generic-class +| +incomplete-declaration-of-a-generic-class | +declaration-of-a-non-generic-class | +declaration-of-a-generic-class | +instantiation-of-a-generic-class + +(60) type-declaration ::= +[private] declaration-of-an-enumeration | [**private**] class-declaration | declaration-of-an-exception + +(61) package-definition ::= +[{type-declaration}] +[{package-method}] + +(62) package-declaration ::= **package** package-name +[**uses** package-name {’,’ package-name}] + **is** package-definition +**end** [package-name]’;’ + +(63) executable-declaration ::= + **executable** executable-name + **is** + { + **executable** executable-part +[**uses** [identifier **as external**] + [{’,’ identifier **as external**}] + [unit-name **as library**] + [{’,’ unit-name **as library**}] + **is** + {file-name [as C++|c|fortran|object];} + **end** ’;’ + } + **end** ’;’ + +(64) schema-declaration ::= + **schema** schema-name + **is** +[{**package** package-name ’;’ }] +[{**class** class-name ’;’ }] +**end** ’;’ + + + + + +@section occt_cdl_6 Appendix B Comparison of CDL and C++ + +## Syntax for Data Types manipulated by Handle and by Value in CDL + +| | Handle | Value | +| :---- | :---- | :---- | +| Permanent | Persistent | Storable | +| Temporary | Transient | Any | +| Reading | Immutable | In | +| Writing | Mutable | Out | +| Read/Write | Mutable | In out | +| Return | Not specified : any | Without copy: --C++ return const& | + +## Syntax for Data Types manipulated by Handle and by Value in C++ + +| | Handle | Value | +| :---- | :---- | :--- | +| C++ Declaration | Handle(PGeom_Point) p1; | gp_Pnt p2; | +| C++ Constructor | p1 = newPGeom_Point(p2); | p2(0.,0.,0.); | +| C++ Method | x=p1 -> XCoord(); | x=p2.XCoord(); | + + + + \ No newline at end of file diff --git a/dox/dev_guides/contribution_workflow/contribution_workflow.md b/dox/dev_guides/contribution_workflow/contribution_workflow.md new file mode 100644 index 0000000000..8db8e35c85 --- /dev/null +++ b/dox/dev_guides/contribution_workflow/contribution_workflow.md @@ -0,0 +1,283 @@ +Contribution Workflow {#dev_guides_contribution_workflow} +==================================== +@tableofcontents + +@section occt_contribution_workflow_1 Introduction + +The purpose of this document is to describe standard workflow for processing contributions to certified version of OCCT. + +@subsection occt_contribution_workflow_1_1 Use of issue tracker system + +Each contribution should have corresponding issue (bug, or feature, or integration request) +registered in the MantisBT issue tracker system accessible by URL +http://tracker.dev.opencascade.org. +The issue is processed further according to the described workflow. + +@subsection occt_contribution_workflow_1_2 Access Levels + + Access level defines the permissions of the user to view, + register and modify issues in a Mantis bugtracker. + The correspondence of access level and user permissions + is defined in accordance with the table below. + +| Access level | Granted to | Permissions | Can set statuses | +|:------------- | :--------- | :-------------- | :----------------------- | +| Viewer | Everyone (anonymous access) | View public issues only | No | +| Reporter | Users registered on dev.opencascade.com | View, report, and comment issues | New, Resolved | +| Updater | Users of dev.opencascade.com in publicly visible projects | View and comment issues | New, Resolved | +| Developer | OCC developers and external contributors who signed the CLA | View, report, modify, and handle issues | New, Assigned, Resolved, Reviewed | +| Tester | OCC engineer devoted to certification testing | View, report, modify, and handle issues | Assigned, Tested | +| Manager | Person responsible for a project or OCCT component | View, report, modify, and handle issues | New, Resolved, Reviewed, Tested, Closed | + +According to his access level, the user can participate in the issue handling process under different roles, as described below. + +@section occt_contribution_workflow_2 Typical workflow for an issue + +@subsection occt_contribution_workflow_2_1 General scheme + +@image html OCCT_ContributionWorkflow_V3_image001.png "Standard life cycle of an issue" +@image latex OCCT_ContributionWorkflow_V3_image001.png "Standard life cycle of an issue" + +@subsection occt_contribution_workflow_2_2 Issue registration + +An issue is registered in Mantis bugtracker by the Reporter with definition of the necessary attributes. +The definition of the following attributes is obligatory: + + * **Category** - indicates component of OCCT to which the issue relates. If in doubt, assign OCCT:Foundation Classes. + * **Reproducibility** + * **Severity** + * **Priority** + * **Profile** - allows defining the platform on which the problem was detected from the list of predefined platforms. If a platform is absent in the list of predefined platforms it is possible to use Or Fill In option to define the platform manually. + * **Platform** + * **OS** + * **OS Version** + * **Products Version** - defines the version of Open CASCADE on which the problem has been detected. + * **Summary** - a short, one sentence description of the issue. It has a limit of 128 characters. It should be informative and useful for the developers. It is advisable to avoid vague or misleading phrases, such as "it doesn't work" or "it crashed". It is not allowed to mention the issue originator, and in particular the customer, in the name of the registered issue. + * **Description** - should contain a detailed definition of the nature of the registered issue depending on its type. For a bug it is required to submit a detailed description of the incorrect behavior, including the indication of the cause of the problem (if possible at this stage) or any inputs from the originator. For a feature or integration request it is recommended to describe the proposed feature in details (as possible at that stage), including the changes required for its implementation and the main features of the new functionality. Filling the bug description is obligatory. + * **Steps To Reproduce** - in this field it is possible to describe in detail how to reproduce the issue. This field considerably helps to find the cause of the problem, to eliminate it and to create the test case. + * *Upload File* field allows attaching the shapes, scripts or modified source files of OCCT. It is recommended to attach a prototype test case in form of a Tcl script for DRAW, using either existing DRAW commands, or a C++ code which can be organized in DRAW commands, as well as sample shapes or other input data (if applicable), immediately after the issue registration. + + The newly registered issue gets status **NEW** and is assigned to the developer responsible for the OCCT component indicated in the Category field (Maintainer). + +@subsection occt_contribution_workflow_2_3 Assigning the issue + + The description of the new issue is checked by the **Maintainer** and if it is feasible, + he may assign the issue to a **Developer**. Alternatively, any user with **Developer** access level + or higher can assign the issue to himself if he wants to provide a solution. + + The recommended way to handle contributions is that the **Reporter** assigns the issue to himself and provides a solution. + + The **Maintainer, Technical Project Manager,** or **Bugmaster** can close or reassign the issue + (in **FEEDBACK** state) to the **Reporter** after it has been registered, if its description does not contain sufficient details to reproduce the bug or explain the purpose of the new feature. + That decision shall be documented in the comments to the issue in the Bugtracker. + + The assigned issue should have state **ASSIGNED**. + +@subsection occt_contribution_workflow_2_4 Resolving the issue + + The **Developer** responsible for the issue assigned to him provides a solution + as a change on the version of OCCT indicated in the issue attributes, or the last development version. + + The modified sources should be submitted for review and testing to the dedicated branch of the official OCCT Git repository: + + * Branch should be created for the issue with name composed of letters ‘CR’ followed by issue ID number (without leading zeroes). + Optional suffix can be added to the branch name after issue ID, + e.g. to distinguish between several version of the fix. + * The branch should be based on recent version of the master branch + (not later than commit tagged as last OCCT release). + * The first line of the first commit message should contain + the Summary of the issue (starting with its ID followed by colon, e.g. "0022943: Bug TDataXtd_PatternStd"). + The consequent lines should contain a description of the changes made. + If more than one commit has been made, the commit messages should contain description of the changes made. + * The amount of the code affected by the change should be limited + to only the changes required for the bug fix or improvement. + Change of layout or re-formatting of the existing code is allowed + only in the parts where meaningful changes related to the issue have been made. + * The name of the branch where the fix is submitted should be given + in the note to the Mantis issue + (providing the direct link to relevant branch view in GitWeb is encouraged). + * The description of the changes made should be put to the field + "Additional information and documentation updates" of the Mantis issue. + + In some cases (if Git is not accessible for the contributor), + external contributions can be submitted as patch (diff) files or sources + attached to the Mantis issue, with indication of OCCT version on which the fix is made. + Such contributions should be put to Git for processing by someone else, + and hence they have less priority in processing than the ones submitted directly through Git. + + The issue for which solution is provided should be switched to **RESOLVED** state + and assigned to the developer who is expected to make a code review + (the **Reviewer**; by default, can be set to the **Maintainer** of the component). + +@subsection occt_contribution_workflow_2_5 Code review + + The **Reviewer** analyzes the proposed solution for applicability in accordance with OCCT Code reviewing rules and examines all changes in the sources to detect obvious and possible errors, misprints, conformity to coding style. + + * If Reviewer detects some problems, he can either: + * Fix these issues and provide new solution, reassigning the issue (in **RESOLVED** state) to the **Developer**, who then becomes a **Reviewer**. + Possible disagreements should be resolved through discussion, which is done normally within issue notes (or on the OCCT developer’s forum if necessary). + * Reassign the issue back to the **Developer**, providing detailed list of remarks. The issue then gets status **ASSIGNED** and a new solution should be provided. + * If Reviewer does not detect any problems, he changes status to **REVIEWED**. + +@subsection occt_contribution_workflow_2_6 Testing + + The issues that are in **REVIEWED** state are subject of certification (non-regression) testing. + The issue is assigned to OCC **Tester** when he starts processing it. + The results of tests are checked by the **Tester**: + * If the **Tester** detects build problems or regressions, he changes the status to **ASSIGNED** and reassigns the issue to the **Developer** with a detailed description of the problem. The **Developer** should produce a new solution. + * If the **Tester** does not detect build problems or regressions, he changes the status to **TESTED** for further integration. + +@subsection occt_contribution_workflow_2_7 Integration of a solution + + Before integration into the master branch of the repository the **Integrator** checks the following conditions: + * the change has been reviewed; + * the change has been tested without regressions (or with regressions treated properly); + * the test case has been created for this issue (when applicable), and the change has been rechecked on this test case; + * "Additional information and documentation updates" field is filled by the developer; + * the change does not conflict with other changes integrated previously. + + If the result of check is successful the Integrator integrates solution + into the master branch of the repository. Each change is integrated into the master branch + as a single commit without preserving the history of changes made in the branch + (by rebase, squashing all intermediate commits), however, preserving the author when possible. + This is done to have the master branch history plain and clean. + The following picture illustrates the process: + +@image html OCCT_ContributionWorkflow_V3_image002.jpg "Integration of several branches" +@image latex OCCT_ContributionWorkflow_V3_image002.jpg "Integration of several branches" + + The new master branch is tested against possible regressions that might appear due to interference between separate changes. When the tests are Ok, the new master is pushed to the official repository + and the original branches are removed from it. + The issue status is set then to **VERIFIED** and is assigned to the **Reporter** so that he could check the fix as-integrated. + +@subsection occt_contribution_workflow_2_8 Closing a bug + + The **Bugmaster** closes the issue after regular OCCT Release provided that the issue status is **VERIFIED** and that issue was really solved in that release, by rechecking the corresponding test case. The final issue state is **CLOSED**. + +@subsection occt_contribution_workflow_2_9 Reopening a bug + + If a regression is detected, the **Bugmaster** may reopen and reassign the **CLOSED** issue to the appropriate developer with comprehensive comments about the reason of reopening. The issue then becomes **ASSIGNED** again. + +@section occt_contribution_workflow_3 Appendix + +@subsection occt_contribution_workflow_3_1 Issue attributes + +@subsubsection occt_contribution_workflow_3_1_1 Severity + + Severity shows at which extent the issue affects the product. + The list of used severities is given in the table below in the descending order. + + | Severity | Description | Weight for Bug Score | + | :---------- | :------------------------------------------------ | :------------------: | + | crash | Crash of the application or OS, loss of data | 5 | + | block | Regression corresponding to the previously delivered official version. Impossible operation of a function on any data with no work-around. Missing function previously requested in software requirements specification. Destroyed data. | 4 | + | major | Impossible operation of a function with existing work-around. Incorrect operation of a function on a particular dataset. Impossible operation of a function after intentional input of incorrect data. Incorrect behavior of a function after intentional input of incorrect data. | 3 | + | minor | Incorrect behavior of a function corresponding to the description in software requirements specification. Insufficient performance of a function. | 2 | + | tweak | Ergonomic inconvenience, need of light updates. | 1 | + | text | Inconsistence of program code to the Coding Standard. Errors in source text (e.g. unnecessary variable declarations, missing comments, grammatical errors in user manuals). | 1 | + | trivial | Cosmetic bugs. | 1 | + | feature | Bug fix, new feature, improvement that requires workload estimation and validation. | 1 | + | integration request | Requested integration of an existing feature into the product. | 0 | + | Just a question | A question to be processed, without need of any changes in the product. | 0 | + +@subsubsection occt_contribution_workflow_3_1_2 Statuses of issues + + The bug statuses that can be applied to the issues are listed in the table below. + + | Status | Description | + | :------------------- | :----------------------------------------- | + | New | New just registered issue. Testing case should be created by Reporter. | + | Feedback | The issue requires more information; the original posters should pay attention. | + | Assigned | Assigned to a developer. | + | Resolved + a resolution | The issue has been fixed, and now is waiting for revision. | + |Revised + a resolution | The issue has been revised, and now is waiting for testing. | + | Tested | The fix has been internally tested by the tester with success on the full non-regression database or its part and a test case has been created for this issue. | + | Verified | The fix has been integrated into the master of the corresponding repository | + | Closed | The fix has been integrated to the master. The corresponding test case has been executed successfully. The issue is no longer reproduced. | + +@subsubsection occt_contribution_workflow_3_1_3 Resolutions + + **Resolution** is set when the bug is resolved. "Reopen" resolution is added automatically when the bug is reopened. + + | Resolution | Description | + |:--------------------- | :--------------------------------------------------------------------------- | + | Open | The issue is being processed. | + | Fixed | The issue has been successfully fixed. | + | Reopened | The bug has been reopened because of insufficient fix or regression. | + | | Unable to reproduceThe bug is not reproduced. | + | Not fixable | The bug cannot be fixed because it is a bug of third party software, or because it requires more workload than it can be allowed. | + | Duplicate | The bug for the same issue already exists in the tracker. | + | Not a bug | It is a normal behavior in accordance with the specification of the product | + | No change required | The issue didn’t require any change of the product, such as a question issue | + | Suspended | This resolution is set for Acknowledged status only. It means that the issue is waiting for fix until a special administrative decision is taken (e.g. a budget is not yet set in accordance with the contract) | + | Documentation updated | The issue was a normal behavior of the product, but the actions of the user were wrong. The specification and the user manual have been updated to reflect this issue. | + | Won’t fix | An administrative/contractual decision has been taken to not fix the bug | + +@subsection occt_contribution_workflow_3_2 Update and evolution of documentation + + The documentation on Open CASCADE Technology currently exists in three forms: + + * OCCT Technical Documentation generated automatically with Doxygen tool on the basis of comments in CDL or HXX files. + * User’s Reference Documentation on OCCT packages and Products supplied in the form of PDF User’s guides + * OCCT Release Documentation supplied in the form of Release Notes with each release. + + It is strictly required to properly report the improvements and changes introduced in OCCT in all three forms of Documentation. + +@subsubsection occt_contribution_workflow_3_2_1 Maintenance of CDL files + + Every developer providing a contribution to the source code of OCC + should make a relevant change in the corresponding header file, including CDL. + + Making the appropriate comments is mandatory in the following cases: + + * Development of a new package / class / method / enumeration; + * Modification of an existing package / class / method / enumeration that changes its behavior; + * Modification / new development impacts at other packages / classes / methods / enumerations, the documentation which of should be modified correspondingly. + + The only case when the comments may be not required is introducing + a modification that does not change the existing behavior in any noticeable way + or brings the behavior in accordance with the existing description. + + CDL description must be in good English, containing as much relevant + information and as clear as possible. If the developer is unable to properly formulate + his ideas in English or suspects that his description can be misunderstood, + he should address to the Documentation Engineer for language assistance. + Such action is completely subject to the discretion of the developer; however, + the Documentation Engineer can require that the developer should provide a relevant + technical documentation and reopen a bug until all documentation satisfies the requirements above. + +@subsubsection occt_contribution_workflow_3_2_2 Maintenance of the User’s Reference Documentation + + The User’s Reference Documentation is distributed among a number of User’s Guides, + each describing a certain module of OCCT. + The User's Guides do not cover the entire functionality of OCCT; + however, they describe most widely used and important packages. + + In most aspects the User's Guides present the information that is contained in CDL descriptions for methods, classes, etc., only from a different point of view. Thus, it is required that any developer who implements a new or modifies an existing package / class / method / enumeration and adds a description of new development or changes in the corresponding CDL file should also check if this class package / class / method / enumeration or the package / class, to which the added class / method belongs is already described in the documentation and update the User’s Reference Documentation correspondingly. + +3.2.3. Preparation of the Release Documentation + + Before changing the bug Status to RESOLVED, the developer should provide a description of the implemented work using the "Additional information and documentation updates" field of Mantis bugtracker. + + This description is used for the Release Documentation and has the following purposes: + + * to inform the OCCT users about the main features and improvements implemented in the platform in the release; + * to give a complete and useable list of changes introduced into the OCCT since the latest version. + + The changes should be described from the user’s viewpoint so that the text + could be comprehensible even for beginners having a very vague idea about OCCT. + If the developer is unable to properly formulate his ideas in English or suspects + that his description can be misunderstood, he should address to the Documentation Engineer + for language assistance. Such action is completely subject to the discretion of the developer; + however, the Documentation Engineer can require that the developer + should provide a relevant technical documentation and reopen a bug + until all documentation satisfies the requirements. + + **Note**, that it is required to single out the changes in the OCCT behavior as compared to the previous versions and especially the changes to be considered when porting from the previous version of OCCT. + +For example: +* If global macros XXX() was used in the code of your application, revise it for direct use of the argument stream object. +* You might need to revise the code related to text display in 3d viewer to take into account new approach of using system fonts via XXX library. + + The **Documentation Engineer** is responsible for preparation of the version Release Notes + and update of the User’s Guides. If the **Documentation Engineer** considers that the description currently provided by the **Developer** is somehow inadequate or unsatisfactory he can demand the **Developer** to rewrite the documentation with the **Documentation Engineer’s** assistance. diff --git a/dox/dev_guides/contribution_workflow/images/OCCT_ContributionWorkflow_V3_image001.png b/dox/dev_guides/contribution_workflow/images/OCCT_ContributionWorkflow_V3_image001.png new file mode 100644 index 0000000000000000000000000000000000000000..110b38a6b3ab0c8915c7ad742481e9b7ba7a6005 GIT binary patch literal 22946 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 Programs -> TortoiseGit Settings to configure TortoiseGit. + + Select Git->Config to add your user name and Email address to the local .gitconfig file + + @image html OCCT_GitGuide_V2_image006.png + @image latex OCCT_GitGuide_V2_image006.png + +@subsection occt_gitguide_2_2 Linux platform + + We assume that Linux users have Git already installed and available in the PATH. + + Make sure to configure Git so that the user name is equal to your username + on the OCCT development portal, and set SafeCrLf option to true: + +~~~~~ + > git config --global user.name "Your User Name" + > git config --global user.email your@mail.address + > git config --global your@mail.address +~~~~~ + +@section occt_gitguide_3 Getting access to the repository + +@subsection occt_gitguide_3_1 Prerequisites + + Access to the repository is granted to the users who have signed the Contributor License Agreement. + + The repository is accessed by SSH protocol, thus you need to register your public SSH key + on the development portal to get access to the repository. + + SSH keys are used for secure authentication of the user when accessing the Git server. + Private key is the one stored on the user workstation (optionally encrypted). + Open (or public) key is stored in the user account page on the web site. + When Git client accesses the remote repository through SSH, + it uses this key pair to identify the user and acquire relevant access rights. + + Normally when you have Git installed, you should have also SSH client available. + On Unix/Linux it is installed by default in the system. + On Windows it is typical to have several SSH clients installed; + in particular they are included with Cygwin, Git, TortoiseGit. + + It is highly recommended to use the tools that come + with the chosen Git client for generation of SSH keys. + Using incompatible tools (e.g. ssh-keygen.exe from Cygwin for code generation, + and TortoiseGit GUI with a default Putty client for connection to server) + may lead to authentication problems. + +@subsection occt_gitguide_3_2 How to generate a key + +@subsubsection occt_gitguide_3_2_1 Generating key with Putty + + Use this option if you have installed TortoiseGit (or other GUI Git client on Windows) + and have chosen “TortoisePLink” (or other Putty client) as SSH client during installation. + + To generate the key with this client, run Puttygen (e.g. from Start menu -> TortoiseGit -> Puttygen), + then click Generate and move mouse cursor over the blank area until the key is generated. + +@image html OCCT_GitGuide_V2_image007.png "Putty key generator" +@image latex OCCT_GitGuide_V2_image007.png "Putty key generator" + + After the key is generated, you will see GUI controls to define the public key comment + and / or specify the password for the private key protection. + When done, save both the public and the private key to the files of your choice + (make sure to store your private key in a secure place!). + + Copy the public key as shown by Puttygen to the clipboard to add it in your account. + Do not copy the Putty public key file content -- it is formatted in a way not suitable for the web site. + +@subsubsection occt_gitguide_3_2_2 Generating key with command-line tools + + Use this option if you work on Linux or if you have chosen “OpenSSH” as SSH client + during installation of TortoiseGit (or other Windows tool). + + Make sure that you have *ssh* and *ssh-keygen* commands in the path. + On Windows, you might need to start 'Git Bash' command prompt window provided by Git for Windows. + + Use the following command to generate SSH keys: +~~~~~ + > ssh-keygen -t rsa -C "your@mail.address" +~~~~~ + + The last argument is an optional comment, which can be included with the public key and used to distinguish between different keys (if you have many). The common practice is to put here your mail address or workstation name. + + The command will ask you where to store the keys. It is recommended to accept the default path *$HOME/.ssh/id_rsa*. Just press Enter for that. You will be warned if a key is already present in the specified file; you can either overwrite it by the new one, or stop generation and use the old key. + + If you want to be on the safe side, enter password to encrypt the private key. You will be asked to enter this password each time you use that key (e.g. access a remote Git repository), unless you use the tool that caches the key (like TortoiseGit). If you do not want to bother, enter an empty string. + + On Windows, make sure to note the complete path to the generated files (the location of your $HOME might be not obvious). Two key files will be created in the specified location (by default in $HOME/.ssh/): + + * *id_rsa* - private key + * id_rsa.pub - public key + + The content of the public key file (one text line) is the key to be added to the user account on the site (see below). + +@subsubsection occt_gitguide_3_2_3 Generating key with Git GUI + + GitGUI (standard GUI interface included with Git) provides the option + to either generate the SSH key (if not present yet) or show the existing one. + Click Help/Show SSH key and copy the public key content for adding to the user account page (see below). + +@subsection occt_gitguide_3_3 Adding public key in your account + + Log in on the portal http://dev.opencascade.org and click on 'My account' link to the right. + If you have a Contributor status, you will see 'SSH keys' tab to the right. + Click on that tab, then click 'Add a public key', and paste the text of the public key + (see above sections on how to generate the key) into the text box. + Click "Save" to input the key to the system. + + Note that a user can have several SSH keys. + You can distinguish between these keys by the Title field ID; by default it is taken from SSH key comment. + It is typical to use your e-mail address or workstation name for this field; no restrictions are set by the portal. + +@image html OCCT_GitGuide_V2_image008.png +@image latex OCCT_GitGuide_V2_image008.png + + Please note that some time (5-10 min) is needed for the system + to update the configuration after the new key is added. + After that time, you can try accessing Git. + +@section occt_gitguide_4 WORK WITH REPOSITORY: DEVELOPER OPERATIONS + +@subsection occt_gitguide_4_1 General workflow + + To start working with OCCT source repository, you need to create its clone in your local system. + This cloned repository will manage your working copy of the sources + and provide you the means to exchange code between your clone and the origin. + + In most cases it is sufficient to have one clone of the repository; + your working copy will be updated automatically by Git when you switch branches. + + The typical development cycle for an issue is as follows: + + * Create a new branch for your development, basing on the selected version of the sources + (usually the current master) and switch your working copy to it + * Develop and test your change. Note that for the first time, and after any changes + made in CDL files you will have to re-generate build scripts or Visual Studio projects using WOK. + * Do as many commits in your branch as you feel convenient; + the general recommendation is to commit every stable state (even incomplete), to record the history of your development. + * Push your branch to the repository when your development is complete or when you need to share it with other people (e.g. for review) + * Before the first push, rebase your local branch on the latest master; + consider collapsing the history in one commit unless you think the history of your commits is interesting for others. + Make sure to provide a good commit message. + * Do not amend the commits that have been already pushed in the remote repository, + If you need to rebase your branch, commit the rebased branch under a different name, and remove the old branch. + + You can switch to another branch at any moment + (unless you have some uncommitted changes in the working copy) + and return back to the branch when necessary (e.g. to take into account review remarks). + Note that only the sources that are different between the switched branches will be modified, + thus required recompilation should be reasonably small in most cases. + +@subsection occt_gitguide_4_2 Cloning official repository + + Clone the official OCCT repository in one of following ways: + + * From command line by command: + +~~~~~ + > git clone gitolite@git.dev.opencascade.org:occt +~~~~~ + + where is the path to the new folder which will be created for the repository. + + * In TortoiseGit: right-click in the Explorer window, then choose "Git Clone": + +@image html OCCT_GitGuide_V2_image009.png +@image latex OCCT_GitGuide_V2_image009.png + + If you have chosen Putty as SSH client during TortoiseGit installation, check the “Load Putty Key” option and specify the location of the private key file saved by PuttyGen (see 3.2.1). This shall be done for the first time only. + + Note that on the first connection to the repository server you may be requested to enter a password for your private SSH key; further you can get a message that the authenticity of the host cannot be established and will be asked if you want to continue connecting or not: + +@image html OCCT_GitGuide_V2_image010.png +@image latex OCCT_GitGuide_V2_image010.png + + Choose “Yes” to continue. Then the host’s key will be stored in $HOME/.ssh/known_hosts file. + +@subsection occt_gitguide_4_3 Branch creation + + You need to create a branch when you are going to start development of a new change, + apply a patch, etc. It is recommended to fetch updates from the remote repository + before this operation, to make sure you work with the up-to-date version. + + Create a branch from the current master branch unless you need to base your development on a particular version or revision. + +In the console: + +~~~~~ + > git checkout -b CR12345 origin/master +~~~~~ + +In TortoiseGit: + * Go to the local copy of the repository. + * Right-click in the Explorer window, then choose "Git Create Branch". + +@image html OCCT_GitGuide_V2_image011.png +@image latex OCCT_GitGuide_V2_image011.png + + * Select “Base On” Branch remotes/origin/master + +@image html OCCT_GitGuide_V2_image012.png +@image latex OCCT_GitGuide_V2_image012.png + + Check option ‘Switch to new branch’ if you are going to start working with the newly created branch immediately. + +@subsection occt_gitguide_4_4 Branch switching + + If you need to switch to another branch, use Git command checkout for that. + In the console: + +~~~~~ + > git checkout CR12345 +~~~~~ + + In TortoiseGit: right-click, TortoiseGit -> Checkout/switch + +@image html OCCT_GitGuide_V2_image013.png +@image latex OCCT_GitGuide_V2_image013.png + + Note that in order to work with the branch locally you need to set option + “Create new branch” when you checkout the branch from the remote repository for the first time. + Option “Track” stores association between the local branch and the original branch in a remote repository. + +@subsection occt_gitguide_4_5 Committing branch changes + + Commit your changes locally as soon as a stable status of the work is reached. + Make sure to review carefully the committed changes beforehand to avoid unintentional commit of a wrong code. + + * In the console: + +~~~~~ + > git diff + … + > git commit -a -m "Write meaningful commit message here" +~~~~~ + + Option –a tells the command to automatically include (stage) files + that have been modified or deleted, but it will omit the new files that might have been added by you. + To commit such new files, you must add (stage) them before commit command. + + To find new unstaged files and them to commit, use commands: + +~~~~~ + > git status -s + ?? file1.hxx + ?? file2.cxx + > git add file1.hxx file2.cxx +~~~~~ + + * In TortoiseGit: right-click, choose “Git Commit -> CR…”: + +@image html OCCT_GitGuide_V2_image014.png +@image latex OCCT_GitGuide_V2_image014.png + + Unstaged files will be shown if you check the option ‘Show Unversioned Files’. + Double-clock on each modified file to see the changes to be committed (as a difference vs. the base version). + +@subsection occt_gitguide_4_6 Pushing branch to the remote repository + + When the code developed in your local branch is ready for review, + or you need to share it with others, push your local changes to the remote repository. + + * In the console: + +~~~~~ + > git push "origin" CR12345:CR12345 +~~~~~ + + * In TortoiseGit: right-click, TortoiseGit -> Push + +@image html OCCT_GitGuide_V2_image015.png +@image latex OCCT_GitGuide_V2_image015.png + +Note that Git will forbid pushing a branch if the corresponding remote branch already exists and has some changes, which are not in the history of your local branch. This may happen in different situations: + * You have amended the last commit which is already in the remote repository. + If you are sure that nobody else uses your branch, push again with ‘force’ option. + * You have rebased your branch, so that now it is completely different + from the branch in the remote repository. In this case, push it under a different name (add a suffix): + +@image html OCCT_GitGuide_V2_image016.png +@image latex OCCT_GitGuide_V2_image016.png + + Then remove the original remote branch so that other people recognize that it has been replaced by the new one. For that, select TortoiseGit -> Push again, then select an empty line for your local branch name, + and enter the name of the branch to be removed in ‘Remote’ field: + +@image html OCCT_GitGuide_V2_image017.png +@image latex OCCT_GitGuide_V2_image017.png + + * The other developer has committed some changes in the remote branch. + In this case, pull changes from the remote repository to have them merged + with your version, and push your branch after it is successfully merged. + +@subsection occt_gitguide_4_7 Synchronizing with remote repository + + Maintain your repository synchronized with the remote one and clean unnecessary stuff regularly. + Use Git command fetch with option prune to get update of all branches + from the remote repository and to clean your local repository from the remote branches that have been deleted. + + * In the console: + +~~~~~ + > git fetch --prune +~~~~~ + + * In TortoiseGit: + +@image html OCCT_GitGuide_V2_image018.png +@image latex OCCT_GitGuide_V2_image018.png + + If some changes have been made to the branch you are working with in the remote repository, + use Git command pull to get the remote changes and merge them with your local branch. + This operation is required in particular to update your local master branch when the remote master changes. + + * In console: +~~~~~ + > git pull +~~~~~ + * In TortoiseGit: + +@image html OCCT_GitGuide_V2_image019.png +@image latex OCCT_GitGuide_V2_image019.png + + Note that the local branches of your repository are the primary place + where your changes are stored until they get integrated to the official version + of OCCT (master branch). The branches submitted to official repository + are for collaborative work, review, and integration; + that repository should not be used for long-term storage of incomplete changes. + +Remove the local branches that you do not need any more. Note that you cannot delete the current branch, thus you need to switch to another one (e.g. master) if the branch you are going to delete is the current one. + + * In the console: +~~~~~ + > git branch -d CR12345 +~~~~~ + + * In TortoiseGit: right-click, select TortoiseGit -> Show log + +@image html OCCT_GitGuide_V2_image020.png +@image latex OCCT_GitGuide_V2_image020.png + + Select “All branches” to view all branches. + Right-click on the branch you want to delete and select Delete… menu item corresponding to this branch. + + Note that the log view in TortoiseGit is a convenient tool + to visualize and manage branches; it provides short-cuts to many functions described above. + +@subsection occt_gitguide_4_8 Applying a fix made on older version of OCCT + + If you have a fix made on a previous version of OCCT, + perform the following sequence of operations to prepare it + for testing and integration to the current development version. + + * Identify the version of OCCT on which the fix has been made. + In most cases, this will be an OCCT release, e.g. OCCT 6.7.0.; + then just find a tag or a commit corresponding to this version in the Git history log of the master branch. + * Create a branch basing on this tag or commit. In TortoiseGit history log: right-click on the base commit, then select **Create branch at this version**. + +@image html OCCT_GitGuide_V2_image021.png +@image latex OCCT_GitGuide_V2_image021.png + + Check option **Switch to the new branch** to start working within the new branch immediately, or switch to it separately afterwards. + + * Put your fix in the working copy, build and check that it works, then commit to the branch. + * Rebase the branch on the current master. + + In TortoiseGit: right-click on the working directory, + then choose TortoiseGit->Rebase; then select *remotes/origin/master* as UpStream revision, and click **Start**: + +@image html OCCT_GitGuide_V2_image022.png +@image latex OCCT_GitGuide_V2_image022.png + + Note that you can get some conflicts during rebase. + To resolve the conflicts double-click on each conflicted file + (highlighted by red in the file list) to open visual merge tool. + Switch between conflicting fragments by red arrows, and for each one + decide if the code of one or both conflicting versions is to be taken. + Use the toolbar. + +@subsection occt_gitguide_4_9 Rebasing with history clean-up + + At some moments you might need to rebase your branch on the latest version of the master. + + We recommend rebasing before the first submission of the branch + for review or when the master has diverged substantially from your branch. + + Rebasing is a good occasion to clean-up the history of commits in the branch. + Consider collapsing (squashing, in terms of Git) the history of your branch + into a single commit unless you deem that having separate commits is important + for your future work with the branch or its code reviewing. + Git also allows you to change the order of commits, edit commit contents and messages, etc. + + Here is the sequence of actions to rebase your branch into a single commit: + + * Switch to your branch (e.g. “CR12345”) + * In TortoiseGit history log, select a branch to rebase on (usually remotes/origin/master) + and in the context menu choose **Rebase “CR12345” onto this**. + * In the Rebase dialog, check **Squash All**. + +@image html OCCT_GitGuide_V2_image023.png +@image latex OCCT_GitGuide_V2_image023.png + + **Note** that you can also change the order of commits and define for each commit + whether it should be kept (“pick”), edited, or just skipped. + + * Click **Start**. + * The process will stop if a conflict is detected. + In such case, find files with status ‘Conflicted’ in the list (marked by red), + and double-click on them to resolve the conflict. + When all conflicts are resolved, click ‘Continue’. + +@image html OCCT_GitGuide_V2_image024.png +@image latex OCCT_GitGuide_V2_image024.png + + * At the end of the process, edit the final commit message (it should start from the issue ID and a description from Mantis in the first line, followed by a summary of actual changes), and click **Commit**. + +@image html OCCT_GitGuide_V2_image025.png +@image latex OCCT_GitGuide_V2_image025.png + +@section occt_gitguide_5 Work with repository: Reviewer operations + +@subsection occt_gitguide_5_1 Review branch changes using GitWeb + + The changes made in the branch can be reviewed without direct access to Git, using GitWeb interface: + + * Open GitWeb in your web browser: http://git.dev.opencascade.org/gitweb/?p=occt.git + * Locate the branch you want to review among heads (click ‘…’ at the bottom of the page to see the full list). + * Click log (or shortlog) to see the history of the branch. + + **Note** that the branch can contain more than one commit, and you need to distinguish commits + that belong to that branch (those to be reviewed) from the commits + corresponding to the previous state of the master branch. + Normally the first commit in the list that starts from the ID + of the other issue indicates the branching point; + commits above it are the ones to be reviewed. + + * Click *commitdiff* on each log entry to review the changes (highlighted with color format). + +@subsection occt_gitguide_5_2 Review branch changes with TortoiseGit + + Use of TortoiseGit is recommended for convenient code review: + + * Fetch the changes from the remote repository as described in 4.7; + * Right-click on the repository, choose TortoiseGit -> Show log; + * Locate the remote branch you need to review; + * To review commits one-by-one, select each commit in the log. + The list of changed files is shown at the bottom of the window; + double-click on the file will open visual compare tool. + * To review all changes made in the branch at once, or to compare + two arbitrary revisions, select the corresponding commits in the log + (e.g. the last commit in the branch and the branching point), + right-click for the context menu, and choose **Compare revisions**. + +@image html OCCT_GitGuide_V2_image026.png +@image latex OCCT_GitGuide_V2_image026.png + diff --git a/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image001.png b/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image001.png new file mode 100644 index 0000000000000000000000000000000000000000..8152cc9dff81eeecee887b635948235c15b0c3ef GIT binary patch literal 41708 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 Xwz@2z8-KEc%w3V)tRgY||8D{SQ9H}R literal 0 HcmV?d00001 diff --git a/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image002.png b/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image002.png new file mode 100644 index 0000000000000000000000000000000000000000..33894e21c9028a303d15619746d8503455685b65 GIT binary patch literal 43978 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 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image004.png b/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image004.png new file mode 100644 index 0000000000000000000000000000000000000000..7c13d476053b54eb91172f402ae49af045cb1338 GIT binary patch literal 21560 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 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image005.png b/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image005.png new file mode 100644 index 0000000000000000000000000000000000000000..c57045660df349b45743431955d2708bb53b3a43 GIT binary patch literal 21707 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 Rtw<0iPI<(O(UyFf_+Ks=aIF9U literal 0 HcmV?d00001 diff --git a/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image007.png b/dox/dev_guides/git_guide/images/OCCT_GitGuide_V2_image007.png new file mode 100644 index 0000000000000000000000000000000000000000..9ed5e9d13a4db9a28bb44db0d5d783b849cf5369 GIT binary patch literal 31926 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