For all issues regarding the Forums use, please, refer to the Forum Rules.

Our Solutions

Need professional assistance?
Consider our:

Support Offerings


Need to speed up your development?
Have a look at our:

Samples & Tools


Need some functionality extending standard OCCT capabilities?
Check out our:

Adv. Components

Related pages

all-in-one docs?

Cory Riddell's picture

How difficult would it be to copy and merge all of the doxygen docs into a single module? Right now they are organized my module:
* FoundationClasses
* ModelingData
* ModelingAlgorithms
* ...

When looking for documentation on a class, I find my self opening a module, clicking on class hierarchy and searching for the class name. If I picked the wrong module, I have to navigate to a different one and start over.

I understand the value of having them grouped like this, especially for browsing. But there are times when I just want an easy way to jump to the docs for a specific class.

The CDL browser at is good for this, but it's out of date.


Roman Lygin's picture

Hi Cory,

I believe current classification per module is helpful as it reflects OCC own structure. What is missing is a global class and function index that would lead to a class list. This is done in Qt for example - Its title bar also shows global index and module list for either access.

Imho, the OCC team just needs to slightly polish Doxygen configuration file to enable this. Another annoying thing for me was Standard_EXPORT before each method. Doxygen allows to define it to empty.

My 2 cents ...

--- - blog on Open CASCADE

Rob Bachrach's picture

I have updated versions of these files on my local system. If someone can update these on the site, I would be happy to send a ZIP file. Unfortunately, my company firewall blocks this site.


Jun WANG's picture

can it be downloaded ???

Rob Bachrach's picture

Sorry, I have no public web space. I am including the Perl script I use to generate the files (note that the forum will probably remove the line indentations). Just copy all the CDL files to a directory and run the perl script from within that same directory. It will generate an HTML file for each CDL and the frames.html file that you load into your browser. If anyone wants to donate the web space, I would be happy to send a ZIP file for posting.


######################## Perl Script ##############################
my @cdl_files;

sub WriteFrameset {
open(FRAMESET, ">frames.html");


sub WriteIndex {
# list patterns to be omitted from the index
my @index_files;
foreach $cdl_file (@cdl_files) {
next if ($cdl_file =~ /^draw/i);
next if ($cdl_file =~ /^Plugin$/);
next if ($cdl_file =~ /^swdraw/i);
next if ($cdl_file =~ /^testtopope/i);
next if ($cdl_file =~ /^xdedraw/i);
next if ($cdl_file =~ /^xsdraw/i);
next if ($cdl_file =~ /^wok/i);
next if ($cdl_file =~ /^test[_.]/i);
push(@index_files, $cdl_file);
print "CDL files: " . ($#cdl_files+1) . "\n";
print "Index files: " . ($#index_files+1) . "\n";

open(INDEX, ">index.html");
print INDEX

CDL File Index

CDL File Index


my $firstitem = 1;
sub LinkFrom {
my ($item, $from, $package) = @_;
if ($package eq "class") {
return "$item$from$package";

my $cdl = "${package}_${item}.cdl";
my $found = 0;
my $myfile;
foreach $myfile (@cdl_files) {
if ("$myfile" eq "$cdl") {
$found = 1;

if ($found) {
return "$item$from$package";
else {
return "$item$from$package";

sub Convert {
my ($cdl_file) = @_;
my $html_file = $cdl_file;
$html_file =~ s/\.cdl$/.html/;

open(HTML, ">$html_file");

print HTML


CDL File Index


  open(CDL, ") {
    if (/^\s*--/) {
      $_ = "$_";
    else {
    print HTML "$_
"; } close(CDL); print HTML



# open the current directory and read all the CDL files
print "Building file list...\n";
opendir(DIR, ".");
@cdl_files = grep(/\.cdl$/, readdir(DIR));

# generate the frames file
print "Generating frame set (frames.html)...\n";

# write the index file
print "Generating file index (index.html)...\n";

# convert the CDL files to HTML
foreach $cdl_file (@cdl_files) {
print "Converting: $cdl_file...\n";

print "Done\n";

Fernando Ghedin's picture

Hi folks,

I'm not sure if this is the best way to do it, but I used the following command line to get all the CDL files into a single directory:

$ cd $CASROOT; mkdir cdl_docu; cd $CASROOT/src; for u in `find -iname *.cdl`; do cp -v $u $CASROOT/cdl_docu ; done;

* Please note: I assume you have the environment variable $CASROOT properly defined to your OpenCASCADE's root directory.

You will get all the CDL Files into the directory `$CASROOT/cdl_docu'. Then, copy the PERL script to that same directory and just call it. The result is pretty helpful! Thanks for sharing it Rob ;-)

By the way, it would be great if someone could host the file somewhere on the web. I had troubles with the Copy/Pasting. Here goes some hints:
1) At the end of the two `document.write' statements, the "\n" caused a new line when I pasted it in my text-editor, so it toked some time to find out what was happening.
2) There was a syntax error on the line 131, that can be fixed like this:

== copy/pasted code ==
s/ if (/^\s*--/) {
$_ = "$_";

== fixed code ========
if (/^\s*--/) {
$_ = "$_";

I hope it can help everyone else interested in Rob's script.

Best regards,

Fernando Ghedin's picture

Hi again,

Unfortunately my "fixed code" is not shown properly on the Forum. BUT, if you click on REPLY on this topic, you will get it right! (it is displayed properly when you reach the text-field for writing your answer)

Kind regards,

Rob Bachrach's picture

I have created a uuencoded version of the file. It was created on the PC, so you may have to mess with line endings after decoding it. Hopefully, this helps with copy/paste problems.


begin 644
M;7D@0&-D;%]F:6QE M04U%4T54+"`B/F9R86UE M3D1?3T9?2$5!1$52.PH\:'1M;#X*/&9R86UE M/&9R86UE('-R8STB:6YD97@N:'1M;"(@;F%M93TB:6YD97@B('1A M8V]N=&5N=',B/@H\9G)A;64@;F%M93TB8V]N=&5N=',B/@H\+V9R86UE M/@H\+VAT;6P^"D5.1%]/1E](14%$15(*("!C;&]S92A&4D%-15-%5"D["GT*
M"G-U8B!7 M='1E9"!F`H@(&UY($!I;F1E>%]F:6QE M86-H("1C9&Q?9FEL92`H0&-D;%]F:6QEPH@("`@;F5X="!I9B`H)&-D
M9')A=R]I*3L*("`@(&YE>'0@:68@*"1C9&Q?9FEL92`]?B`O7G1E M M.PH@("`@;F5X="!I9B`H)&-D;%]F:6QE(#U^("]>>'-D M;F5X="!I9B`H)&-D;%]F:6QE(#U^("]>=V]K+VDI.PH@("`@;F5X="!I9B`H
M:6QE M("@D(V-D;%]F:6QE M.B`B("X@*"0C:6YD97A?9FEL97,K,2D@+B`B7&XB.PH*("!O M+"`B/FEN9&5X+FAT;6PB*3L*("!P M15(["CQH=&UL/@H\:&5A9#X\=&ET;&4^0T1,($9I;&4@26YD97@\+W1I=&QE
M(C$X(CX*/&EN M9F]R;3X*/'-C M(&EN:70H*2!["B`@=F%R(&9I;&5S(#T@6PI%3D1?3T9?2$5!1$52"@H@(&UY
M("1I.PH@(&UY("1C;&%S M7V9I;&5S.R`D:2LK*2!["B`@("`D8VQA M.PH@("`@)&-L87-S(#U^(',O7"YC9&PD+R\["B`@("!P M7"(D8VQA M;F1E>%]F:6QE M24Y$15@@(EPB)&-L87-S7"(B.PH*("!P M3T]415(["B`@73L*("!V87(@9FEL=&5R4F4@/2`O7%P_9FEL=&5R/2A M*2\["B`@=F%R(')E M M;'0I('L*("`@('9A M(FDB*3L*("`@(&9O M>PH@("`@("!I9B`H M9&]C=6UE;G0N=W)I=&4H(CQA(&AR968])R(@*R!F:6QE M;" M("!]"B`@?0H@(&5LPH@("`@9F]R("AV87(@:3TP.R!I/&9I;&5S+FQE
M;F=T:#L@:2LK*2!["B`@("`@(&1O8W5M96YT+G=R:71E*"(\82!H M("L@9FEL97-;:5T@*R`B+FAT;6PG/B(@*R!F:6QE M+SY M/@H\+VAT;6P^"D5.1%]/1E]&3T]415(*"B`@8VQO M("1F:7)S=&ET96T@/2`Q.PIS=6(@3&EN:T9R;VT@>PH@(&UY("@D:71E;2P@
M)&9R;VTL("1P86-K86=E*2`]($!?.PH@(&EF("@D M M("!M>2`D8V1L(#T@(B1[ M;W5N9"`](#`["B`@;7D@)&UY9FEL93L*("!F;W)E86-H("1M>69I;&4@*$!C
M("`@("1F;W5N9"`](#$["B`@("`@(&QA M)&9O=6YD*2!["B`@("!R971U M=&5M?2YH=&UL)SXD:71E;3PO83XD9G)O;3QA(&AR968])R1P86-K86=E+FAT
M;6PG/B1P86-K86=E/"]A/B(["B`@?0H@(&5LPH@("`@ M:71E;21F M(CL*("!]"GT*"G-U8B!#;VYV97)T('L*("!M>2`H)&-D;%]F:6QE*2`]($!?
M9&5X/"]A/CPO M(CPD8V1L7V9I;&4B*3L*("!W:&EL92`H/$-$3#XI('L*("`@(',O/B] M.R]G.PH@("`@ M("`@)%\@/2`B/&9O;G0@8V]L;W(]=VAI=&4^)%\\+V9O;G0^(CL*("`@('T*
M("`@(&5LPH@("`@("!S+RA M:T9R;VTH)#$L)#(L)#,I+V5G.PH@("`@?0H@("`@ M8G(O/B(["B`@?0H@(&-L;W-E*$-$3"D["@H@('!R:6YT($A434P@/#Q%3D1?
M15(*"B`@8VQO M8W1O M:6YG(&9I;&4@;&ES="XN+EQN(CL*;W!E;F1I M9FEL97,@/2!G M M;F5R871I;F M1G)A;65S970H*3L*"B,@=W)I=&4@=&AE(&EN9&5X(&9I;&4* M;F5R871I;F"`H:6YD97@N:'1M;"DN+BY M26YD97@H0&-D;%]F:6QE M;R!(5$U,"F9O M;G0@(D-O;G9E =9&Q?9FEL92D["GT*"G!R:6YT(")$;VYE7&XB.PH`

Jun WANG's picture

By the way, for your requirements, "SourceInsight" should be an good option. It really works perfectly.

Kazumasa Uno's picture

I also feel hard to explore the documents and sources.
So I created a simple tool to list up the files.

After execution, Input the OCC install path and editor you usally use.
Select the category, and input the first part of filenames ( such as gp, GeomAP or put it empty),
and push the find button.
The double click of item will launch the editor.
At first search, it takes lengthy times but second execution will be very fast.


Attention: DO NOT use this form for all kind of request for the removal of your personal data. Please follow this link for such cases.