Commit 1194971d authored by jcfr's avatar jcfr

ENH: Modernize doxygen Documentation generation mechanism

git-svn-id: http://svn.slicer.org/Slicer4/trunk@16173 3bd1e089-480b-0410-8dfb-8563597acbee
parent e439d30e
......@@ -131,7 +131,6 @@ ENDIF()
#-----------------------------------------------------------------------------
# Additional Slicer Options
#-----------------------------------------------------------------------------
OPTION(BUILD_DOCUMENTATION "Build Slicer Documentation" OFF)
OPTION(BUILD_TESTING "Test the project" ON)
OPTION(WITH_MEMCHECK "Run tests through valgrind." OFF)
OPTION(WITH_COVERAGE "Enable/Disable coverage" OFF)
......@@ -165,6 +164,20 @@ MARK_AS_ADVANCED(Slicer_ITK_GIT_TAG)
# Slicer implicitly uses Qt
SET(Slicer_USE_QT ON CACHE INTERNAL "Build Slicer with Qt")
#-----------------------------------------------------------------------------
# Documentation
#-----------------------------------------------------------------------------
OPTION(DOCUMENTATION_TARGET_IN_ALL "Include the custom target for building documentation in 'all'" OFF)
MARK_AS_ADVANCED(DOCUMENTATION_TARGET_IN_ALL)
SET(DOCUMENTATION_ARCHIVES_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
CACHE PATH "Where documentation archives should be stored")
MARK_AS_ADVANCED(DOCUMENTATION_ARCHIVES_OUTPUT_DIRECTORY)
# Attempt to discover Doxygen so that DOXYGEN_EXECUTABLE is set to an appropriate default value
FIND_PACKAGE(Doxygen QUIET)
#-----------------------------------------------------------------------------
# CTestCustom
#-----------------------------------------------------------------------------
......@@ -810,9 +823,7 @@ ADD_SUBDIRECTORY(Utilities/Package)
# Documentation
#-----------------------------------------------------------------------------
IF(BUILD_DOCUMENTATION)
ADD_SUBDIRECTORY(Utilities/Doxygen)
ENDIF()
ADD_SUBDIRECTORY(Utilities/Doxygen)
# Add CMake directory so that install rules associated with *.cmake files are evaluated
ADD_SUBDIRECTORY(CMake)
......
......@@ -201,7 +201,7 @@ endif()
#
SET(slicer_cmake_boolean_args
BUILD_DOCUMENTATION
DOCUMENTATION_TARGET_IN_ALL
BUILD_TESTING
BUILD_SHARED_LIBS
WITH_COVERAGE
......@@ -254,6 +254,8 @@ ExternalProject_Add(${proj}
-DSlicer_C_FLAGS:STRING=${Slicer_C_FLAGS}
-DSlicer_CXX_FLAGS:STRING=${Slicer_CXX_FLAGS}
-DCTEST_CONFIGURATION_TYPE:STRING=${CTEST_CONFIGURATION_TYPE}
-DDOCUMENTATION_ARCHIVES_OUTPUT_DIRECTORY:PATH=${DOCUMENTATION_ARCHIVES_OUTPUT_DIRECTORY}
-DDOXYGEN_EXECUTABLE:FILEPATH=${DOXYGEN_EXECUTABLE}
# ITK
-DITK_DIR:PATH=${ITK_DIR}
# Teem
......
#
# Build the documentation
#
INCLUDE (Documentation)
FIND_PACKAGE( Doxygen QUIET)
IF (BUILD_DOCUMENTATION)
SET(BUILD_DOXYGEN ON)
SET(DOCUMENTATION_DOWNLOAD_VTK_TAGFILE ON)
SET(DOCUMENTATION_HTML_TARZ ON)
SET(DOCUMENTATION_DOWNLOAD_EXTRA_TAGFILE ON)
SET(DOXYGEN_EXTRA_TAGFILENAME "ParaViewNightlyDoc.tag")
SET(DOXYGEN_EXTRA_TAGFILE_REMOTE_DIR "http://www.paraview.org/doc/nightly")
SET(DOXYGEN_EXTRA_TAGFILENAME1 "InsightDoxygen.tag")
SET(DOXYGEN_EXTRA_TAGFILE_REMOTE_DIR1 "http://www.itk.org/Doxygen/")
SET(DOXYGEN_PROJECT_NAME "Slicer4")
SET(DOXYGEN_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
SET(DOXYGEN_PROJECT_SOURCE_DIR "${Slicer_SOURCE_DIR}")
SET(VTK_DOXYGEN_HOME "${CMAKE_CURRENT_SOURCE_DIR}")
#SET(DOXYGEN_CVSWEB_CHECKOUT "http://public.kitware.com/cgi-bin/cvsweb.cgi/~checkout~/Slicer/")
#SET(DOXYGEN_CVSWEB_CHECKOUT_SUFFIX "?cvsroot=Slicer")
SET(DOXYGEN_SOURCE_LOCATIONS_DIR "${Slicer_SOURCE_DIR}")
IF( DOXYGEN_FOUND )
IF( DOXYGEN_DOT_FOUND )
FILE(GLOB_RECURSE modules_glob RELATIVE "${Slicer_SOURCE_DIR}"
"${Slicer_SOURCE_DIR}/*/*.h")
SET(modules)
SET(modules_paths)
FOREACH(mod ${modules_glob})
GET_FILENAME_COMPONENT(module_path "${mod}" PATH)
SET(modules ${modules} "${module_path}")
IF("${modules}" MATCHES ";")
LIST(REMOVE_ITEM modules "${module_path}")
ENDIF("${modules}" MATCHES ";")
SET(modules ${modules} "${module_path}")
SET(modules_paths ${modules_paths} "${module_path}")
ENDFOREACH(mod)
#LIST(SORT modules)
#MESSAGE("Found modules: ${modules}")
# Automatically generate documentation at build time
SET(all_arg)
IF (DOCUMENTATION_TARGET_IN_ALL)
SET(all_arg "ALL")
ENDIF()
SET(DOXYGEN_SOURCE_LOCATIONS)
FOREACH(module ${modules})
SET(DOXYGEN_SOURCE_LOCATIONS
"${DOXYGEN_SOURCE_LOCATIONS} \\
\"${Slicer_SOURCE_DIR}/${module}\"")
ENDFOREACH(module)
SET(DOXYGEN_PARSED_INPUT_DIRS)
FOREACH(module ${modules})
SET(DOXYGEN_PARSED_INPUT_DIRS
"${DOXYGEN_PARSED_INPUT_DIRS} \\
\"${CMAKE_CURRENT_BINARY_DIR}/dox/${module}\"")
ENDFOREACH(module)
#
# User documentation
#
SET( Slicer_USER_DOCUMENTATION "NO" )
SET( Slicer_ADDITIONAL_EXCLUDE_PATTERN "*_p.h\ *Private.*" )
SET( Slicer_DOCUMENTATION_HTML_TARZ TRUE)
SET(DOXYGEN_IGNORE_PREFIX "vtkKW vtkPV vtkSM vtk vtkITK vtkMRML vtkKW vtkSlicer itk")
SET(DOXYGEN_TAG_FILES
"\"@CMAKE_CURRENT_BINARY_DIR@/vtkNightlyDoc.tag=http://www.vtk.org/doc/nightly/html\"\\
\"@CMAKE_CURRENT_BINARY_DIR@/InsightDoxygen.tag=http://www.itk.org/Doxygen/html\"\\
\"@CMAKE_CURRENT_BINARY_DIR@/ParaViewNightlyDoc.tag=http://www.paraview.org/doc/nightly/html\"")
CONFIGURE_FILE( Doxyfile.txt.in
${CMAKE_CURRENT_BINARY_DIR}/UserDoxyfile.txt
)
#
# Configure the script and the doxyfile, then add target
#
IF(NOT DOT_PATH)
GET_FILENAME_COMPONENT(DOT_PATH ${DOT} PATH)
ENDIF(NOT DOT_PATH)
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/generate_doc.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/generate_userdoc.cmake
@ONLY
)
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/doxyfile @ONLY)
SET(userdoc_output "${CMAKE_CURRENT_BINARY_DIR}/doc/html/index.html")
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/doc_makeall.sh.in
${CMAKE_CURRENT_BINARY_DIR}/doc_makeall.sh @ONLY)
# Run doxygen as a custom command driven by a custom target.
ADD_CUSTOM_COMMAND(
OUTPUT ${userdoc_output}
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/generate_userdoc.cmake"
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/generate_userdoc.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/UserDoxyfile.txt"
)
ADD_CUSTOM_TARGET(${DOXYGEN_PROJECT_NAME}DoxygenDoc
${BASH}
${CMAKE_CURRENT_BINARY_DIR}/doc_makeall.sh)
ADD_CUSTOM_TARGET(doc ${all_arg} DEPENDS ${userdoc_output})
SET_TARGET_PROPERTIES(doc PROPERTIES LABELS Documentation)
# also a target for the combined documentation
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/combined_doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/combined_doxyfile)
#
# Dev documentation
#
SET( Slicer_USER_DOCUMENTATION "YES" )
SET( Slicer_ADDITIONAL_EXCLUDE_PATTERN "" )
SET( Slicer_ADDITIONAL_FILE_PATTERN "*.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.hxx \ *.hpp \ *.h++ \ *.txx \ *.C \ *.CC \ *.C++ \ *.moc" )
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/doc_combined_makeall.sh.in
${CMAKE_CURRENT_BINARY_DIR}/doc_combined_makeall.sh)
ADD_CUSTOM_TARGET(CombinedDoxygenDoc
${BASH}
${CMAKE_CURRENT_BINARY_DIR}/doc_combined_makeall.sh)
CONFIGURE_FILE( Doxyfile.txt.in
${CMAKE_CURRENT_BINARY_DIR}/DevDoxyfile.txt
)
# TODO Let's disable target 'doc-dev', it crashes using doxygen 1.7.3
#ADD_CUSTOM_TARGET( doc-dev
# ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/DevDoxyfile.txt
# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/DevDoxyfile.txt
# )
#SET_TARGET_PROPERTIES(doc-dev PROPERTIES LABELS Documentation)
ENDIF (BUILD_DOCUMENTATION)
INCLUDE (${Slicer_SOURCE_DIR}/Utilities/Doxygen/LocalUserOptions.cmake OPTIONAL)
ELSE( DOXYGEN_DOT_FOUND )
MESSAGE( WARNING
"Warning: Dot not found - Documentation will not be created"
)
ENDIF( DOXYGEN_DOT_FOUND )
ENDIF( DOXYGEN_FOUND )
This diff is collapsed.
/**
\mainpage
\section intro_sec Introduction
See the <a href="http://www.slicer.org/slicerWiki">Slicer Wiki</a> for more information.
\defgroup Slicer_CLI Slicer Command Line Modules
\defgroup Slicer_QtModules Slicer Qt Loadable Modules
*/
pjcross: Crossno, Pat (pjcross@sandia.gov)
lafisk: Fisk, Lee Ann (lafisk@sandia.gov)
jsjones: Jones, Jake (jones@sandia.gov)
dbkarel: Karelitz, David (dbkarel@sandia.gov)
kmorel: Moreland, Ken (klmorel@sandia.gov)
pppebay: Pebay, Philippe (pppebay@ca.sandia.gov)
daroger: Rogers, David (daroger@sandia.gov)
tjtautg: Tautges, Tim (tjtautg@sandia.gov)
gjtempl: Templet, Gary (gjtempl@sandia.gov)
dcthomp: Thompson, David (dcthomp@sandia.gov)
atwilso: Wilson, Andy (atwilso@sandia.gov)
bnwylie: Wylie, Brian (bnwylie@sandia.gov)
This diff is collapsed.
This diff is collapsed.
#!/usr/bin/env perl
# Time-stamp: <2002-10-25 20:17:59 barre>
#
# Clean the HTML generated by Doxygen to remove some layout quicks
#
# barre : Sebastien Barre <sebastien@barre.nom.fr>
#
# 0.1 (barre)
# - first release
use Carp;
use Getopt::Long;
use Fcntl;
use File::Find;
use strict;
my ($VERSION, $PROGNAME, $AUTHOR) = (0.1, $0, "Sebastien Barre");
$PROGNAME =~ s/^.*[\\\/]//;
print "$PROGNAME $VERSION, by $AUTHOR\n";
# -------------------------------------------------------------------------
# Defaults (add options as you want : "verbose" => 1 for default verbose mode)
my %default =
(
html => "../../../doc/html",
);
# -------------------------------------------------------------------------
# Parse options
my %args;
Getopt::Long::Configure("bundling");
GetOptions (\%args, "help", "verbose|v", "html=s");
if (exists $args{"help"}) {
print <<"EOT";
Usage : $PROGNAME [--help] [--verbose|-v] [--html path]
--help : this message
--verbose|-v : verbose (display filenames while processing)
--html path : 'path' the Doxygen generated HTML doc (default : $default{html})
Example:
$PROGNAME
EOT
exit;
}
$args{"html"} = $default{"html"} if ! exists $args{"html"};
$args{"html"} =~ s/[\\\/]*$// if exists $args{"html"};
my $os_is_win = ($^O =~ m/(MSWin32|Cygwin)/i);
my $open_file_as_text = $os_is_win ? O_TEXT : 0;
my $start_time = time();
# -------------------------------------------------------------------------
# Collect all HTML files
print "Collecting HTML files in ", $args{"html"}, "\n";
my @files;
find sub {
push @files, $File::Find::name
if -f $_ && $_ =~ /\.html$/;
}, $args{"html"};
print " => ", scalar @files, " file(s) collected in ", time() - $start_time, " s.\n";
# -------------------------------------------------------------------------
# Remove path
my $nb_files = 0;
undef $/; # slurp mode
print "Cleaning and writing...\n";
my $intermediate_time = time();
foreach my $filename (@files) {
print " $filename\n" if exists $args{"verbose"};
# Open the file, read it entirely
sysopen(HTMLFILE,
$filename,
O_RDONLY|$open_file_as_text)
or croak "$PROGNAME: unable to open $filename\n";
my $html = <HTMLFILE>;
close(HTMLFILE);
# Clean
my $has_been_cleaned = 0;
if ($html =~ s/<table width="100%" cellpadding="2" cellspacing="0" border="0">/<table class="table-md-params" cellpadding="2" cellspacing="0" border="0">/gms) {
$has_been_cleaned = 1;
}
# Write
if ($has_been_cleaned) {
++$nb_files;
sysopen(HTMLFILE,
$filename,
O_WRONLY|O_TRUNC|O_CREAT|$open_file_as_text)
or croak "$PROGNAME: unable to open destination file $filename\n";
print HTMLFILE $html;
close(HTMLFILE);
}
}
print " => $nb_files file(s) processed and written in ", time() - $intermediate_time, " s.\n";
print "Finished in ", time() - $start_time, " s.\n";
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#!/usr/bin/env perl
# Time-stamp: <2001-10-05 11:49:40 barre>
#
# Remove path to intermediate Doxygen dir from html doc
#
# barre : Sebastien Barre <sebastien@barre.nom.fr>
#
# 0.1 (barre)
# - first release
use Carp;
use Cwd 'abs_path';
use Getopt::Long;
use Fcntl;
use File::Find;
use strict;
my ($VERSION, $PROGNAME, $AUTHOR) = (0.1, $0, "Sebastien Barre");
$PROGNAME =~ s/^.*[\\\/]//;
print "$PROGNAME $VERSION, by $AUTHOR\n";
# -------------------------------------------------------------------------
# Defaults (add options as you want : "verbose" => 1 for default verbose mode)
my %default =
(
html => "../../../doc/html",
to => "../../../VTK-doxygen"
);
# -------------------------------------------------------------------------
# Parse options
my %args;
Getopt::Long::Configure("bundling");
GetOptions (\%args, "help", "verbose|v", "html=s", "to=s");
if (exists $args{"help"}) {
print <<"EOT";
Usage : $PROGNAME [--help] [--verbose|-v] [--html path] [--to path]
--help : this message
--verbose|-v : verbose (display filenames while processing)
--html path : 'path' the Doxygen generated HTML doc (default : $default{html})
--to path : 'path' to intermediate Doxygen dir (default : $default{to})
Example:
$PROGNAME
EOT
exit;
}
$args{"to"} = $default{"to"} if ! exists $args{"to"};
$args{"to"} =~ s/[\\\/]*$// if exists $args{"to"};
$args{"html"} = $default{"html"} if ! exists $args{"html"};
$args{"html"} =~ s/[\\\/]*$// if exists $args{"html"};
my $os_is_win = ($^O =~ m/(MSWin32|Cygwin)/i);
my $open_file_as_text = $os_is_win ? O_TEXT : 0;
my $start_time = time();
# -------------------------------------------------------------------------
# Collect all HTML files
print "Collecting HTML files in ", $args{"html"}, "\n";
my @files;
find sub {
push @files, $File::Find::name
if -f $_ && $_ =~ /\.html$/;
}, $args{"html"};
print " => ", scalar @files, " file(s) collected in ", time() - $start_time, " s.\n";
# -------------------------------------------------------------------------
# Remove path
my ($nb_files, $htmlpath) = (0, abs_path($args{"to"}) . '/');
undef $/; # slurp mode
print "Removing $htmlpath and writing...\n";
my $intermediate_time = time();
foreach my $filename (@files) {
print " $filename\n" if exists $args{"verbose"};
# Open the file, read it entirely
sysopen(HTMLFILE,
$filename,
O_RDONLY|$open_file_as_text)
or croak "$PROGNAME: unable to open $filename\n";
my $html = <HTMLFILE>;
close(HTMLFILE);
# Remove all paths
if ($html =~ s/$htmlpath//gms) {
++$nb_files;
sysopen(HTMLFILE,
$filename,
O_WRONLY|O_TRUNC|O_CREAT|$open_file_as_text)
or croak "$PROGNAME: unable to open destination file $filename\n";
print HTMLFILE $html;
close(HTMLFILE);
}
}
print " => $nb_files file(s) processed and written in ", time() - $intermediate_time, " s.\n";
print "Finished in ", time() - $start_time, " s.\n";
This diff is collapsed.
# -------------------------------------------------------------------------
# doxyfile for generic project
# modified by S. Barre (Time-stamp: <2005-06-17 15:13:59 barre>
# -------------------------------------------------------------------------
PROJECT_NAME = @DOXYGEN_PROJECT_NAME@
FULL_PATH_NAMES = YES
WARN_IF_UNDOCUMENTED = NO
GENERATE_TREEVIEW = NO
GENERATE_TODOLIST = YES
GENERATE_BUGLIST = YES
GENERATE_HTML = YES
GENERATE_HTMLHELP = YES
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
GENERATE_TAGFILE = "@CMAKE_CURRENT_BINARY_DIR@/@DOXYGEN_PROJECT_NAME@.tag"
HAVE_DOT = YES
#HAVE_DOT = NO
DOT_PATH = "@DOT_PATH@"
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CLASS_DIAGRAMS = YES
GENERATE_LEGEND = YES
GRAPHICAL_HIERARCHY = YES
ALLEXTERNALS = NO
IMAGE_PATH = "@CMAKE_CURRENT_SOURCE_DIR@"
OUTPUT_DIRECTORY = "@CMAKE_CURRENT_BINARY_DIR@/doc"
INPUT = \
"@CMAKE_CURRENT_BINARY_DIR@/dox/doc_@DOXYGEN_PROJECT_NAME@_index.dox" \
@DOXYGEN_PARSED_INPUT_DIRS@
TAGFILES = @DOXYGEN_TAG_FILES@
EXTRACT_ALL = YES
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = YES
ALWAYS_DETAILED_SEC = NO
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
CASE_SENSE_NAMES = YES
VERBATIM_HEADERS = NO
SHOW_INCLUDE_FILES = YES
JAVADOC_AUTOBRIEF = YES
SORT_MEMBER_DOCS = NO
DISTRIBUTE_GROUP_DOC = YES
TAB_SIZE = 3
FILE_PATTERNS = *.h
RECURSIVE = NO
EXCLUDE = Common/vtkSetGet.h
EXCLUDE_PATTERNS =
HTML_ALIGN_MEMBERS = YES
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 3
IGNORE_PREFIX = @DOXYGEN_IGNORE_PREFIX@
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
EXPAND_ONLY_PREDEF = YES
PREDEFINED = "vtkSetMacro(name,type)= \
virtual void Set##name (type);" \
"vtkGetMacro(name,type)= \
virtual type Get##name ();" \
"vtkSetStringMacro(name)= \
virtual void Set##name (const char*);" \
"vtkGetStringMacro(name)= \
virtual char* Get##name ();" \
"vtkSetClampMacro(name,type,min,max)= \
virtual void Set##name (type);" \
"vtkSetObjectMacro(name,type)= \
virtual void Set##name (type*);" \
"vtkGetObjectMacro(name,type)= \
virtual type *Get##name ();" \
"vtkBooleanMacro(name,type)= \
virtual void name##On (); \
virtual void name##Off ();" \
"vtkSetVector2Macro(name,type)= \
virtual void Set##name (type, type); \
void Set##name (type [2]);" \
"vtkGetVector2Macro(name,type)= \
virtual type *Get##name (); \
virtual void Get##name (type &, type &); \
virtual void Get##name (type [2]);" \
"vtkSetVector3Macro(name,type)= \
virtual void Set##name (type, type, type); \
virtual void Set##name (type [3]);" \
"vtkGetVector3Macro(name,type)= \
virtual type *Get##name (); \
virtual void Get##name (type &, type &, type &); \
virtual void Get##name (type [3]);" \
"vtkSetVector4Macro(name,type)= \
virtual void Set##name (type, type, type, type); \
virtual void Set##name (type [4]);" \
"vtkGetVector4Macro(name,type)= \
virtual type *Get##name (); \
virtual void Get##name (type &, type &, type &, type &); \
virtual void Get##name (type [4]);" \
"vtkSetVector6Macro(name,type)= \
virtual void Set##name (type, type, type, type, \
type, type); \
virtual void Set##name (type [6]);" \
"vtkGetVector6Macro(name,type)= \
virtual type *Get##name (); \
virtual void Get##name (type &, type &, type &, \
type &, type &, type &); \
virtual void Get##name (type [6]);" \
"vtkSetVectorMacro(name,type,count)= \
virtual void Set##name(type data[]);" \
"vtkGetVectorMacro(name,type,count)= \
virtual type *Get##name (); \
virtual void Get##name(type data[##count]);" \
"vtkWorldCoordinateMacro(name)= \
virtual vtkCoordinate *Get##name##Coordinate (); \
virtual void Set##name(float x[3]); \
virtual void Set##name(float x, float y, float z); \
virtual float *Get##name();" \
"vtkViewportCoordinateMacro(name)= \
virtual vtkCoordinate *Get##name##Coordinate (); \
virtual void Set##name(float x[2]); \
virtual void Set##name(float x, float y); \
virtual float *Get##name();" \
"vtkTypeMacro(thisClass,superclass)= \
virtual const char *GetClassName(); \
static int IsTypeOf(const char *type); \
virtual int IsA(const char *type); \
static thisClass* SafeDownCast(vtkObject *o);"
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment