Name Date Size #Lines LOC

..06-Aug-2020-

include/H26-Aug-2020-

src/H21-Feb-2019-

CODING_STYLE.mdH A D05-Aug-202019.1 KiB662469

COPYING.mdH A D27-Feb-20202.2 KiB4231

LICENSE.txtH A D27-Feb-20202.3 KiB4433

README.mdH A D04-Aug-202010.5 KiB219142

README.md

1PCL - PixInsight Class Library
2------------------------------
3
4[PixInsight](https://pixinsight.com/) is an advanced image processing software platform designed specifically for astronomy and other technical imaging applications. PixInsight is a modular, open-architecture system where the entire processing and file handling capabilities are implemented as external installable modules.
5
6The PixInsight core application provides the infrastructure on top of which external modules can implement processes, image file formats, and their associated user interfaces. The [PixInsight Class Library](https://pixinsight.com/developer/pcl/) (PCL) is a C++ development framework to build PixInsight modules.
7
8PixInsight modules are special shared libraries (.so files on FreeBSD and Linux; .dylib under macOS; .dll files on Windows) that communicate with the PixInsight core application through a high-level API provided by PCL. Along with a core communication API, PCL includes a comprehensive set of image processing algorithms, ranging from geometrical transformations to multiscale analysis algorithms, most of them available as multithreaded parallel implementations. PCL provides also rigorous and efficient implementations of essential astronomical algorithms, including state-of-the-art solar system ephemerides, vector astrometry, and reduction of positions of solar system and stellar objects.
9
10PCL is highly portable code. As of writing this document, it is available on the same platforms supported by the PixInsight core application: 64-bit FreeBSD, Linux, macOS, and Windows. PixInsight modules written around PCL are directly portable to all supported platforms *without changing a single line of source code*. This is possible because PCL is a high-level framework. PCL isolates your module from platform-specific implementation details: all platform-dependent complexities are handled behind the scenes by the PixInsight core application and internal PCL routines.
11
12Starting from version 2.0, which was published in December of 2012, PCL is an open-source library released under the [PixInsight Class Library License](https://pixinsight.com/license/PCL_PJSR_1.0.html) (PCLL). In essence, PCLL is a liberal BSD-like license that allows you to develop open-source and closed-source, free and commercial PixInsight modules without restrictions. As long as you observe all PCLL terms, you can modify PCL and use your modified version with or without releasing your source code.
13
14A good starting point for developing PixInsight modules is the src/modules directory, where you'll find all open-source modules that form part of the official PixInsight distribution. You may also want to take a look at the PCL Reference Documentation mentioned below. PixInsight and PCL are supported by a vibrant community on [PixInsight Forum](https://pixinsight.com/forum/), which also contains a developers section. Join us there!
15
16## PCL Reference Documentation
17
18The official reference documentation for PCL has been generated automatically from PCL source code files with the [Doxygen](http://www.doxygen.nl/) documentation tool.
19
20[PCL Reference Documentation - HTML Format](https://pixinsight.com/developer/pcl/doc/html/index.html)
21
22Currently the PCL documentation is fairly complete, although there are still a few classes lacking detailed descriptions. If you find errors or inaccuracies in our documentation, we'd like to hear you to get them fixed. If you want to collaborate with us to enhance the existing PCL documentation, you are also welcome.
23
24## PCL Repository
25
26This PCL repository includes all standard PCL headers and source code, along with all third-party libraries required to build PCL on the user's machine. The repository also contains the complete source code of all standard PixInsight modules that have been released as open-source products, most of them under PCLL license.
27
28Here is a list of subdirectories, along with descriptions of the files therein. We assume that the PCL distribution has been installed on a <PCL> directory on your local filesystem; for example:
29
30<dl><dd>
31   UNIX and Linux : [PCL] = $HOME/PCL<br/>
32   Windows        : [PCL] = C:\PCL
33</dd></dl>
34
35**[PCL]/include/pcl**
36
37<dl><dd>
38   Standard PCL C++ header files. These files are necessary for development of PixInsight modules.
39</dd></dl>
40
41**[PCL]/src/3rdparty**
42
43<dl><dd>
44   Some third-party libraries, mainly file format, data compression and encryption support libraries, used by the PixInsight modules included in this distribution. The CFITSIO, LibTIFF and JasPer libraries may include custom modifications, which are conveniently identified in the source code (search for the 'CUSTOM CODE' string).
45</dd></dl>
46
47**[PCL]/src/modules/file-formats**
48
49<dl><dd>
50   Open-source PixInsight file format modules with complete source code.
51</dd></dl>
52
53**[PCL]/src/modules/processes**
54
55<dl><dd>
56   Open-source PixInsight process modules, with complete source code. These source codes are ready for compilation and form an excellent body of development reference material.
57</dd></dl>
58
59**[PCL]/src/pcl**
60
61<dl><dd>
62   The complete source code of PixInsight Class Library (PCL). Along with the PCL headers distributed on the [PCL]/include/pcl directory, you can use these source files with the provided makefiles and project files to rebuild PCL on your system.
63</dd></dl>
64
65On subdirectories under the [PCL]/src branch, we provide makefiles and project files that can be used to build and test the supplied libraries and modules. These files have been automatically generated by the standard MakefileGenerator script in the current version of PixInsight. All of these makefiles and project files can be regenerated with the same script to adapt the build process to the user requirements.
66
67For each [module_name] module and third-party or PCL [library_name], makefiles and projects are available on the following subdirectories:
68
69**[PCL]/src/3rdparty/[library_name]/freebsd/g++**<br/>
70**[PCL]/src/modules/file-formats/[module_name]/freebsd/g++**<br/>
71**[PCL]/src/modules/processes/[module_name]/freebsd/g++**<br/>
72**[PCL]/src/pcl/freebsd/g++**
73
74<dl><dd>
75   Makefiles for FreeBSD 12 with the system Clang C++ compiler
76</dd></dl>
77
78**[PCL]/src/3rdparty/[library_name]/linux/g++**<br/>
79**[PCL]/src/modules/file-formats/[module_name]/linux/g++**<br/>
80**[PCL]/src/modules/processes/[module_name]/linux/g++**<br/>
81**[PCL]/src/pcl/linux/g++**
82
83<dl><dd>
84   Makefiles for Linux with GCC >= 7 (GCC 9 or higher recommended)
85</dd></dl>
86
87**[PCL]/src/3rdparty/[library_name]/macosx/g++**<br/>
88**[PCL]/src/modules/file-formats/[module_name]/macosx/g++**<br/>
89**[PCL]/src/modules/processes/[module_name]/macosx/g++**<br/>
90**[PCL]/src/pcl/macosx/g++**
91
92<dl><dd>
93   Makefiles for macOS >= 10.14 with Clang C++ compiler/Xcode version >= 11.0
94</dd></dl>
95
96**[PCL]/src/3rdparty/[library_name]/windows/vc15**<br/>
97**[PCL]/src/modules/file-formats/[module_name]/windows/vc15**<br/>
98**[PCL]/src/modules/processes/[module_name]/windows/vc15**<br/>
99**[PCL]/src/pcl/windows/vc15**<br/>
100
101<dl><dd>
102   Project files (.vcxproj) for Microsoft Visual C++ 2017
103</dd></dl>
104
105**[PCL]/src/3rdparty/[library_name]/windows/vc16**<br/>
106**[PCL]/src/modules/file-formats/[module_name]/windows/vc16**<br/>
107**[PCL]/src/modules/processes/[module_name]/windows/vc16**<br/>
108**[PCL]/src/pcl/windows/vc16**<br/>
109
110<dl><dd>
111   Project files (.vcxproj) for Microsoft Visual C++ 2019
112</dd></dl>
113
114
115
116
117## Supported Compilers
118
119The current version of PCL has been built with:
120
121   * Ubuntu 18.04 LTS: GCC C/C++ compiler 9.3.0.
122   * FreeBSD 12.0: Clang C/C++ compiler, default system compiler version.
123   * macOS 10.15.6: Clang C/C++ compiler with Xcode 11.0, as provided by Apple.
124   * Windows 10: Microsoft Visual C++ 2019 Community Edition.
125
126This version of PCL requires a compiler with C++17 language support.
127
128The GCC and Clang C++ compilers provide higher conformance to ISO C++ standards and are high quality development tools. On FreeBSD and macOS we rely on the Clang/LLVM compiler included with the latest versions of Xcode and FreeBSD.
129
130On Linux and UNIX platforms we support GNU make exclusively, so you must use 'gmake' on FreeBSD instead of the default make utility.
131
132On Windows, we provide project files for the Microsoft Visual Studio integrated development environment (.vcxproj files). As of PCL version 2.4.0 we support Visual C++ 2017 and 2019 exclusively.
133
134
135## Environment Variables
136
137In order to use the PCL build system to compile and link PCL-based code, a number of environment variables must be defined on all platforms.
138
139With the following environment variables correctly defined, you can generate makefiles and project files for your modules on all platforms automatically with the Makefile Generator script, which we have included as a standard tool on all PixInsight core distributions.
140
141**PCLDIR**
142
143<dl><dd>
144   PCL root directory. The value of this variable must be the full directory path where the PCL distribution has been installed on your computer. On FreeBSD, Linux and macOS, this variable should normally be (assuming that you have installed PCL on a 'PCL' subdirectory of your home directory):
145</dd></dl>
146
147<dl><dd><dl><dd>
148   $HOME/PCL
149</dd></dl></dd></dl>
150
151<dl><dd>
152   and on Windows, something like:
153</dd></dl>
154
155<dl><dd><dl><dd>
156   C:\Users\[your-user-name]\PCL
157</dd></dl></dd></dl>
158
159<dl><dd>
160   or maybe something more practical such as:
161</dd></dl>
162
163<dl><dd><dl><dd>
164   C:\PCL
165</dd></dl></dd></dl>
166
167**PCLBINDIR32** (* Obsolete *)
168
169<dl><dd>
170   Binary files subdirectory for 32-bit executables and shared objects. This variable has been deprecated and is no longer necessary. PCL development on 32-bit platforms is no longer supported.
171</dd></dl>
172
173**PCLBINDIR64**
174
175<dl><dd>
176   Binary files subdirectory for 64-bit executables and shared objects. Normally this variable should be equal to $PCLDIR/bin.
177</dd></dl>
178
179**PCLBINDIR**
180
181<dl><dd>
182   PCL binaries directory. This variable should be equal to PCLBINDIR64.
183</dd></dl>
184
185**PCLLIBDIR32** (* Obsolete *)
186
187<dl><dd>
188   32-bit libraries subdirectory. This variable has been deprecated and is no longer necessary. PCL development on 32-bit platforms is no longer supported.
189</dd></dl>
190
191**PCLLIBDIR64**
192
193<dl><dd>
194   64-bit libraries subdirectory. This variable should normally be equal to $PCLDIR/lib/[platform]/x64 on each platform.
195</dd></dl>
196
197**PCLLIBDIR**
198
199<dl><dd>
200   PCL library files directory. This variable should normally be equal to PCLLIBDIR64.
201</dd></dl>
202
203**PCLINCDIR**
204
205<dl><dd>
206   PCL include files directory. Should normally be equal to $PCLDIR/include.
207</dd></dl>
208
209**PCLSRCDIR**
210
211<dl><dd>
212   PCL source files directory. Should normally be equal to $PCLDIR/src.
213</dd></dl>
214
215
216
217******
218###### Copyright (C) 2003-2020 Pleiades Astrophoto
219