asp.net c# view pdf : Cannot select text in pdf SDK control service wpf web page azure dnn OpenSceneGraph.3.0.Beginners.Guide-320829-part878

Saving and Loading Files
[
268 
]
Plugin name
Extensions
Interface
Requirements
o
s
g
d
b
_
j
p
e
g
(JPEG)
*
.
j
p
e
g
*
.
j
p
g
R/W
Needs libjpeg (
h
t
t
p
:
/
/
w
w
w
.
i
j
g
.
o
r
g
)
o
s
g
d
b
_
l
w
o
(Lightwave 3D Object)
*
.
l
w
o
R
-
o
s
g
d
b
_
l
w
s
(Lightwave 3D Scene)
*
.
l
w
s
R
-
o
s
g
d
b
_
m
d
2
(Quake2 models)
*
.
m
d
2
R
-
o
s
g
d
b
_
m
d
l
(Valve MDL)
*
.
m
d
l
R
-
o
s
g
d
b
_
o
b
j
(Wavefront OBJ)
*
.
o
b
j
R/W
-
o
s
g
d
b
_
o
g
r
(OGR)
*
.
o
g
r
(pseudo-loader)
R
Needs OGR (
h
t
t
p
:
/
/
w
w
w
.
g
d
a
l
.
o
r
g
/
o
g
r
)
o
s
g
d
b
_
o
p
e
n
f
l
i
g
h
t
(OpenFlight)
*
.
f
l
t
R/W
-
o
s
g
d
b
_
o
s
g
(OSG extendable 
format)
*
.
o
s
g
*
.
o
s
g
t
*
.
o
s
g
b
*
.
o
s
g
x
R/W
-
o
s
g
d
b
_
p
3
d
(Present3D)
*
.
p
3
d
R
-
o
s
g
d
b
_
p
d
f
(Acrobat PDF)
*
.
p
d
f
R
Needs libpoppler (
h
t
t
p
:
/
/
p
o
p
p
l
e
r
.
f
r
e
e
d
e
s
k
t
o
p
.
o
r
g
)
o
s
g
d
b
_
p
f
b
(Performer)
*
.
p
f
b
,
*
.
p
f
s
,
R
Needs OpenPerformer 
(
h
t
t
p
:
/
/
o
s
s
.
s
g
i
.
c
o
m
/
p
r
o
j
e
c
t
s
/
p
e
r
f
o
r
m
e
r
)
o
s
g
d
b
_
p
i
c
(PC-Paint)
*
.
p
i
c
R
-
o
s
g
d
b
_
p
l
y
(Stanford Triangle 
Format)
*
.
p
l
y
R
-
o
s
g
d
b
_
p
n
g
(Portable Network 
Graphics)
*
.
p
n
g
R/W
Needs libpng (
h
t
t
p
:
/
/
w
w
w
.
l
i
b
p
n
g
.
o
r
g
/
p
u
b
/
p
n
g
)
Cannot select text in pdf - Split, seperate PDF into multiple files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Explain How to Split PDF Document in Visual C#.NET Application
break pdf file into multiple files; acrobat split pdf pages
Cannot select text in pdf - VB.NET PDF File Split Library: Split, seperate PDF into multiple files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Splitter Control to Disassemble PDF Document
acrobat separate pdf pages; pdf split and merge
Chapter 10
[
269 
]
Plugin name
Extensions
Interface
Requirements
o
s
g
d
b
_
p
n
m
(Netpbm)
*
.
p
n
m
R/W
-
o
s
g
d
b
_
p
o
v
(POV-Ray)
*
.
p
o
v
W
-
o
s
g
d
b
_
q
f
o
n
t
(Qt font engine)
*
.
q
f
o
n
t
(pseudo-loader)
R
Needs Qt (
h
t
t
p
:
/
/
q
t
.
n
o
k
i
a
.
c
o
m
)
o
s
g
d
b
_
Q
T
K
i
t
(QTKit media)
*
.
m
o
v
,
*
.
m
p
g
,
R
Available only under Mac OS 
X, needs the QTKit/CoreVideo 
framework
o
s
g
d
b
_
q
u
i
c
k
t
i
m
e
(Apple Quick瑩me)
*
.
m
o
v
,
*
.
a
v
i
,
R
Needs Quick瑩me SDK 
(
h
t
t
p
:
/
/
d
e
v
e
l
o
p
e
r
.
d
o
w
n
l
o
a
d
)
o
s
g
d
b
_
r
g
b
(SGI Images)
*
.
r
g
b
,
*
.
r
g
b
a
,
R/W
-
o
s
g
d
b
_
r
o
t
(Rota瑩on)
*
.
r
o
t
(pseudo-loader)
R
Needs Euler angles as 
parameters
o
s
g
d
b
_
s
c
a
l
e
(Scale)
*
.
s
c
a
l
e
(pseudo-loader)
R
Needs scale values along axes 
as parameters
o
s
g
d
b
_
s
h
p
(ESRI Shapefile)
*
.
s
h
p
R
-
o
s
g
d
b
_
s
t
l
(Stereolithography)
*
.
s
t
l
*
.
s
t
a
R/W
-
o
s
g
d
b
_
s
v
g
(Scalar Vector 
Graphics)
*
.
s
v
g
R
Needs librsvg (
h
t
t
p
:
/
/
l
i
b
r
s
v
g
.
s
o
u
r
c
e
f
o
r
g
e
.
n
e
t
)
o
s
g
d
b
_
t
g
a
(Truevision Targa)
*
.
t
g
a
R/W
-
o
s
g
d
b
_
t
i
f
f
(Tagged Image File)
*
.
t
i
f
f
*
.
t
i
f
R/W
Needs lib瑩ff (
h
t
t
p
:
/
/
w
w
w
.
l
i
b
t
i
f
f
.
o
r
g
)
o
s
g
d
b
_
t
r
a
n
s
(Transla瑩on)
*
.
t
r
a
n
s
(pseudo-loader)
R
Needs transla瑩on values along 
axes as parameters
o
s
g
d
b
_
t
x
f
(Textured Font)
*
.
t
x
f
R
-
o
s
g
d
b
_
t
x
p
(TerraPage)
*
.
t
x
p
R
-
C# HTML5 Viewer: Deployment on AzureCloudService
RasterEdge.XDoc.PDF.dll. RasterEdge.XDoc.PDF.HTML5Editor.dll. Or you can select x86 if you use x86 dlls. (The application cannot to work without this node.).
pdf rotate single page; break pdf
C# HTML5 Viewer: Deployment on ASP.NET MVC
RasterEdge.XDoc.PDF.HTML5Editor.dll. When you select x64 and directly run the application, you may get following error. (The application cannot to work without
split pdf; pdf separate pages
Saving and Loading Files
[
270 
]
Plugin name
Extensions
Interface
Requirements
o
s
g
d
b
_
v
n
c
(VNC Client)
*
.
v
n
c
R
Needs libVNCClient 
(
h
t
t
p
:
/
/
l
i
b
v
n
c
s
e
r
v
e
r
.
s
o
u
r
c
e
f
o
r
g
e
.
n
e
t
)
o
s
g
d
b
_
v
r
m
l
(VRML)
*
.
w
r
l
R
Needs OpenVRML (
h
t
t
p
:
/
/
o
p
e
n
v
r
m
l
.
o
r
g
)
o
s
g
d
b
_
v
t
f
(Valve Texture)
*
.
v
t
f
R/W
-
o
s
g
d
b
_
x
(Microso晴 DirectX)
*
.
x
R
-
o
s
g
d
b
_
x
i
n
e
(Xine)
*
.
x
i
n
e
(pseudo-loader)
R
Needs Xine (
h
t
t
p
:
/
/
w
w
w
.
x
i
n
e
-
p
r
o
j
e
c
t
.
o
r
g
)
Details about configuring third-party dependencies that have been listed for certain plugins 
can be found in the Configuring third-party dependencies sec瑩on of this chapter. Besides, 
there is another important project called Zlib (
h
t
t
p
:
/
/
w
w
w
.
z
l
i
b
.
n
e
t
), which is used as 
an op瑩onal part of the osgDB library and the 
o
s
g
d
b
_
i
v
e
plugin to enable the compression 
of OSG na瑩ve file formats, and is also required by some third-party projects referred into the 
Notes property.
The pseudo-loader
In the previous table, some extensions are marked as pseudo-loader. This means they are 
not actually file extensions, but just add a suffix to the end of the real filename to indicate 
that the file should be read by the specified plugin. For example:
The real file on the disk is 
w
o
r
l
d
m
a
p
.
s
h
p
, which may store the en瑩re world map in ESRI's 
s
h
a
p
e
f
i
l
e
format. The suffix 
.
o
g
r
forces 
o
s
g
d
b
_
o
g
r
to read the 
.
s
h
p
file and construct 
the scene graph; otherwise 
o
s
g
d
b
_
s
h
p
will be automa瑩cally found and used by default.
Another good example is the 
o
s
g
d
b
_
f
f
m
p
e
g
plugin. The FFmpeg library supports over 
100 different codecs. To read any of these, we can simply add a suffix 
.
f
f
m
p
e
g
behind the 
filename and leave the work to FFmpeg itself.
In addi瑩on, we have already seen some other pseudo-loaders in the following form:
The string 
0
,
0
,
9
0
between the real filename and the suffix is the parameter. Some 
pseudo-loaders need specific parameters to make them work properly.
C# PDF: PDF Document Viewer & Reader SDK for Windows Forms
Choose Items", and browse to locate and select "RasterEdge.Imaging open a file dialog and load your PDF document in will be a pop-up window "cannot open your
break a pdf apart; break pdf into smaller files
C# Image: How to Deploy .NET Imaging SDK in Visual C# Applications
RasterEdge.Imaging.MSWordDocx.dll; RasterEdge.Imaging.PDF.dll; in C# Application. Q: Error: Cannot find RasterEdge Right click on projects, and select properties.
how to split pdf file by pages; cannot select text in pdf file
Chapter 10
[
271 
]
Time for action – reading files from the Internet
To understand the use of a pseudo-loader, we will try to read a model from the Internet. 
The 
o
s
g
v
i
e
w
e
r
u瑩lity is enough to perform this example, but you can always make use 
of the 
func瑩on to achieve the same result in your OSG-based 
applica瑩ons.
1. 
The model file already exists at the following URL: 
h
t
t
p
:
/
/
w
w
w
.
.
2. 
Before trying to read files from the Internet or intranet, we'd be瑴er have a check 
of the OSG plugin directory to see if there is an 
o
s
g
d
b
_
c
u
r
l
plugin. It should exist 
if you are installing OSG from the installer described in Chapter 2, Compila瑩on 
and Installa瑩on of OpenSceneGraph. But for developers who build OSG from 
the source code, it may be ignored during the CMake configura瑩on. In this la瑴er 
case, please refer to the next sec瑩on and obtain this important plugin first.
3. 
Start the 
o
s
g
v
i
e
w
e
r
u瑩lity with the following argument:
e
a
r
t
h
.
i
v
e
.
c
u
r
l
4. 
The 
.
c
u
r
l
suffix tells OSG to load the specified file using the 
o
s
g
d
b
_
c
u
r
l
plugin. 
The redundancy will be automa瑩cally removed by the reader-writer interface.
5. 
Now you will see an earth model on the screen. Rotate and scale the view matrix 
using your camera manipulator and try to find your home on the earth:
GIF to PNG Converter | Convert GIF to PNG, Convert PNG to GIF
Imaging SDK; Save the converted list in memory if you cannot convert at Select "Convert to PNG"; Select "Start" to start conversion procedure; Select "Save" to
break a pdf into multiple files; pdf split
C# PowerPoint: Document Viewer Creating in Windows Forms Project
You can select a PowerPoint file to be loaded into the WinViewer control. is not supported by WinViewer control, there will prompt a window "cannot open your
break a pdf into separate pages; pdf print error no pages selected
Saving and Loading Files
[
272 
]
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
Although the whole earth model is rough for naviga瑩on, you can s瑩ll find that some parts of 
it can become more detailed if you zoom in. The model is actually constructed from a tree 
of 
o
s
g
:
:
P
a
g
e
d
L
O
D
nodes, each of which is stored in a separate file on the remote site, and 
manages a piece of terrain geometry of different level. This technique, called the quad-tree, 
is described in detail in the last chapter of this book.
The 
o
s
g
d
b
_
c
u
r
l
plugin helps a lot when parsing and loading files from specified URLs. It 
depends upon a third-party library named libcurl, which provides an easy-to-use client-side 
URL transferring interface. The pseudo-loader mechanism here can quickly decide whether 
the required filename should be directly sent to 
o
s
g
d
b
_
c
u
r
l
; otherwise OSG will check if 
the filename contains a remote address first, and make the final decision.
Pop quiz – getting rid of pseudo-loaders
Somebody may rename a pseudo-loader, for instance, the 
o
s
g
d
b
_
f
f
m
p
e
g
library which can 
read 
.
a
v
i
.
m
p
g
, and many other media formats, to other plugin names like 
o
s
g
d
b
_
a
v
i
A晴er that, the 
.
f
f
m
p
e
g
suffix will become invalid, and only 
.
a
v
i
files can be read directly 
using the 
func瑩on. Now, can you figure out the reason why the 
pseudo-loader lost its ability, and how to make the new 
o
s
g
d
b
_
a
v
i
plugin s瑩ll available for 
.
m
p
g
and other formats that were originally supported?
Configuring third-party dependencies
Have you ever built OSG from source code with your na瑩ve compiler and the CMake 
system introduced in Chapter 2, Compila瑩on and Installa瑩on of OpenSceneGraph? Then 
you may find that there are lots of mis-compiled components in the self-made OSG  
libraries, when compared with the installer provided in the same chapter. For example:
The image 
p
i
c
t
u
r
e
.
j
p
g
may not be displayed even though it exists in the proper search 
path. If you encounter this situa瑩on, look into the plugin directory, and you may find  
that the 
o
s
g
d
b
_
j
p
g
or 
o
s
g
d
b
_
j
p
e
g
library is missed. That is simply because we din't 
configure the op瑩ons for an important third-party library, 
l
i
b
j
p
e
g
, which is required by 
the JPEG reader-writer.
OSG doesn't load most file formats by itself, but delegates the loading of the data to 
third-party dependencies. Especially when handling various kinds of model, image, and 
miscellaneous files, a huge number of excellently-wri瑴en open source projects can be used 
by different plugins as third-party dependencies. This effec瑩ve methodology can share the 
ideas of developers all over the world during the design and implementa瑩on phases of the 
OSG engine, and support a con瑩nuous, stable, and team-style design.
C# Image: Create C#.NET Windows Document Image Viewer | Online
DeleteAnnotation: Delete all selected text or graphical annotations. You can select a file to be loaded into the there will prompt a window "cannot open your
acrobat split pdf; break a pdf file
C# Image: How to Use C# Code to Capture Document from Scanning
installed on the client as browsers cannot interface directly a multi-page document (including PDF, TIFF, Word Select Fill from the Dock property located in
break pdf into single pages; pdf link to specific page
Chapter 10
[
273 
]
Time for action – adding libcurl support for OSG
In this sec瑩on, we will build the 
o
s
g
d
b
_
c
u
r
l
support for compiling and linking OSG binaries 
from the source code. Without the necessary third-party library libcurl, the 
o
s
g
d
b
_
c
u
r
l
plugin will be ignored in the en瑩re solu瑩on and thus will not be generated. In Chapter 2
Compila瑩on and Installa瑩on of OpenSceneGraph, we did not introduce the steps to add libcurl 
to the CMake configura瑩on op瑩ons. But with the CMake cache files and intermediate files kept 
in the build directory, we can quickly restart the configura瑩on and rebuild our OSG libraries and 
development files. The Visual Studio solu瑩on file will be automa瑩cally updated to include the 
new 
o
s
g
d
b
_
c
u
r
l
project.
1. 
Download the libcurl prebuilt package from the following website: 
h
t
t
p
:
/
/
c
u
r
l
.
. Visual Studio users should choose a download link in 
the sec瑩on Win32  MSVC and uncompress the ZIP file into an independent folder.
2. 
The folder includes the most important development files for use: the header files 
in the 
i
n
c
l
u
d
e
sub-directory, the sta瑩c-link file 
l
i
b
c
u
r
l
.
l
i
b
, and the dynamic 
library 
l
i
b
c
u
r
l
.
d
l
l
. Their loca瑩ons will be specified to the CMake system:
3. 
Now it's 瑩me for us to restart the CMake GUI environment. Instead of loading the 
C
M
a
k
e
L
i
s
t
s
.
t
x
t
file in the source directory, we can drag the 
C
M
a
k
e
C
a
c
h
e
.
t
x
t
from the out-of-source build directory and into the main window (you 
didn't remove the whole build directory, did you?) to quickly apply the 
previous se瑴ngs. Change to Grouped View and expand the group 
C
U
R
L
.
C# Word: How to Create C# Word Windows Viewer with .NET DLLs
and browse to find and select RasterEdge.XDoc control, there will prompt a window "cannot open your powerful & profession imaging controls, PDF document, tiff
break apart a pdf in reader; break pdf file into parts
C# Excel: View Excel File in Window Document Viewer Control
Items", and browse to find & select WinViewer DLL; there will prompt a window "cannot open your powerful & profession imaging controls, PDF document, image
cannot print pdf file no pages selected; pdf insert page break
Saving and Loading Files
[
274 
]
4. 
Set the 
C
U
R
L
_
I
N
C
L
U
D
E
_
D
I
R
to the 
i
n
c
l
u
d
e
directory in the uncompressed 
folder. It will be used as the addi瑩onal dependency directories of the generated 
Visual Studio project. 
C
U
R
L
_
L
I
B
R
A
R
Y
and 
C
U
R
L
_
L
I
B
R
A
R
Y
_
D
E
B
U
G
can both be 
set to the 
l
i
b
c
u
r
l
.
l
i
b
file, which is automa瑩cally added to the dependency 
library list of the same project. Our prebuilt libcurl has a dynamic library file 
named 
l
i
b
c
u
r
l
.
d
l
l
, so the op瑩on 
C
U
R
L
_
I
S
_
S
T
A
T
I
C
should be cancelled:
5. 
That is all! Click on Configure and then Generate, open the updated 
O
p
e
n
S
c
e
n
e
G
r
a
p
h
.
s
l
n
, and see if there are any changes. You will soon find 
that a new Plugins curl project has appeared among the plugin projects.
6. 
Repeat the steps of compiling and linking the OSG libraries and plugins. Then 
build the 
A
L
L
_
B
U
I
L
D
project and then 
I
N
S
T
A
L
L
. The 
o
s
g
d
b
_
c
u
r
l
library 
will be created during the en瑩re process.
7. 
It is possible to view models and images from the Internet, now. Let's go back to the 
last example and browse the earth model with our generated 
o
s
g
d
b
_
c
u
r
l
plugin.
Chapter 10
[
275 
]
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
Have a look at the CMake op瑩ons used while configuring the 
C
U
R
L
group; you will find 
a number of op瑩on groups that indicate different third-party dependencies, like 
J
P
E
G
G
I
F
L
I
B
T
I
F
F
, and 
Z
L
I
B
. Some groups will only appear when the necessary precursor 
groups are set up, for instance, the 
P
N
G
group. Most of them require a 
<
P
R
O
J
>
_
I
N
C
L
U
D
E
_
D
I
R
op瑩on to set the include directory, and the 
<
P
R
O
J
>
_
L
I
B
R
A
R
Y
and 
<
P
R
O
J
>
_
L
I
B
R
A
R
Y
_
D
E
B
U
G
op瑩ons to locate the sta瑩c-link libraries (both release and debug). Here, the name 
<
P
R
O
J
>
will vary according to the group name in CMake.
Under Windows, these op瑩ons are then applied to the Visual Studio project proper瑩es for 
correctly compiling and linking it. Under a UNIX system, these can affect the Makefile.
To start from the cmake command-line and configure these third-party dependencies, you 
can add each op瑩on with a 
D
prefix as follows:
You may worry about obtaining so many third-party projects for building different kinds of 
OSG plugins. It is really heavy but interes瑩ng work to compile each of them from the source 
code and learn how to live in the open source world. But for developers who are eager to 
taste the most common OSG file I/O plugins (o晴en including 
o
s
g
d
b
_
j
p
e
g
o
s
g
d
b
_
g
i
f
o
s
g
d
b
_
t
i
f
f
, and 
o
s
g
d
b
_
p
n
g
, for which the zlib library is required as the prerequisite), 
the following website may provide some useful prebuilt libraries and development files: 
.
The following link may also help if you are familiar with SVN tools and the SourceForge 
website (
.
In addi瑩on, OSG also provides a CMake op瑩on 
to avoid manually 
se瑴ng too many include, dir, and library op瑩ons. Developers may first create an empty 
directory called 
3
r
d
p
a
r
t
y
, as well as three subdirectories named 
i
n
c
l
u
d
e
l
i
b
, and 
b
i
n
. Then we have to put all of the headers of third-party dependencies into 
i
n
c
l
u
d
e
all sta瑩c-link libraries (
*
.
l
i
b
) into 
l
i
b
, and all dynamic libraries (
*
.
d
l
l
) into the 
b
i
n
subfolder. A晴er that, open Ungrouped entries, set 
to the 
newly-created 
3
r
d
p
a
r
t
y
directory, click on Configure, and see if OSG could automa瑩cally 
find some of the most common dependencies' include paths and libraries (including 
FreeTypegdalglutlibcurllibjpeglibpnglib瑩fflibungif, and zlib).
Saving and Loading Files
[
276 
]
Have a go hero – adding FreeType support for OSG
FreeType is used by the osgText library to enable the loading and rendering of fonts for 2D 
and 3D texts. It is highly recommended that this is built for the 
o
s
g
d
b
_
f
r
e
e
t
y
p
e
plugin. 
Otherwise the osgText func瑩onali瑩es will not work properly with mul瑩-languages and True 
Type fonts.
OSG requires a FreeType version higher than 2.35. The source code can be downloaded 
from: 
.
The prebuilts can be found at 
f
r
e
e
t
y
p
e
.
h
t
m
.
The 
F
r
e
e
T
y
p
e
group in the CMake GUI window is a li瑴le different from the others. It needs 
two extra op瑩ons: 
and 
f
t
2
b
u
i
l
d
. The first one points to the parent path of the 
f
r
e
e
t
y
p
e
subdirectory, and the 
second points to the loca瑩on of 
f
t
2
b
u
i
l
d
.
h
. All of these should be configured correctly to 
make sure that 
o
s
g
d
b
_
f
r
e
e
t
y
p
e
can be created without errors. We will introduce its usage 
when crea瑩ng scene texts in the next chapter.
Writing your own plugins
Extending the virtual reader-writer interface, OSG allows developers to add 
addi瑩onal customized file formats as plugins. The virtual interface is defined by the 
o
s
g
D
B
:
:
R
e
a
d
e
r
W
r
i
t
e
r
class. It has several important virtual methods to be used or 
re-implemented to achieve reading and wri瑩ng func瑩onali瑩es.
Virtual method
Descrip瑩on
s
u
p
p
o
r
t
s
E
x
t
e
n
s
i
o
n
(
)
This has two string arguments: the extension name and 
the descrip瑩on. It is always called in the constructor of the 
reader-writer subclasses to indicate supported file extensions.
a
c
c
e
p
t
s
E
x
t
e
n
s
i
o
n
(
)
This returns 
t
r
u
e
if a specified extension argument is 
supported by the reader-writer.
f
i
l
e
E
x
i
s
t
s
(
)
This is used to determine if a file exists. It returns 
t
r
u
e
if the 
input filename and op瑩ons indicate that a local or remote file 
is accessible.
r
e
a
d
N
o
d
e
(
)
This accepts a filename and an 
o
s
g
D
B
:
:
O
p
t
i
o
n
object as 
parameters. Developers have to override it in order to read a 
file from the disk with user op瑩ons. The op瑩ons are parsed 
and used by specific plugin implementa瑩ons.
Chapter 10
[
277 
]
Virtual method
Descrip瑩on
w
r
i
t
e
N
o
d
e
(
)
This has an extra 
o
s
g
:
:
N
o
d
e
pointer besides the filename 
and op瑩ons arguments. It can be re-implemented to write the 
scene graph to a file on the disk on the contrary.
r
e
a
d
I
m
a
g
e
(
)
This reads image data from disk files. It is not necessary to 
override this method unless you are developing image file 
reader plugins.
w
r
i
t
e
I
m
a
g
e
(
)
This writes image data to disk. It is not necessary to override this 
method unless you are developing image file writer plugins.
The implementa瑩on of the 
r
e
a
d
N
o
d
e
(
)
method can be described as follows:
{
r
e
t
u
r
n
r
o
o
t
;
}
It is a li瑴le surprising that an 
object is returned 
by the 
r
e
a
d
N
o
d
e
(
)
method, and not an expected node pointer. This read result object 
can be used as a container of a node, an image, a status enumera瑩on (like 
F
I
L
E
_
N
O
T
_
F
O
U
N
D
), some other special object, or even an error message string. It has mul瑩ple implicit 
constructors to achieve such a purpose. That is why we return the root node directly at the 
end of the above example code.
Another useful class here is 
o
s
g
D
B
:
:
O
p
t
i
o
n
s
. This can set or get a general op瑩on string 
with the 
s
e
t
O
p
t
i
o
n
S
t
r
i
n
g
(
)
and 
g
e
t
O
p
t
i
o
n
S
t
r
i
n
g
(
)
methods, which are passed 
into different plugins to control their opera瑩ons. Passing the string as an argument of the 
constructor is also OK.
Documents you may be interested
Documents you may be interested