asp.net c# view pdf : Break pdf into multiple files application control tool html web page .net online OpenSceneGraph.3.0.Beginners.Guide-320827-part876

Interac瑩ng with Outside Elements
[
248 
]
6. 
We create the picking handler, and add the value of 
g
e
t
O
r
C
r
e
a
t
e
S
e
l
e
c
t
i
o
n
B
o
x
(
)
to the root node, too. This will make the selec瑩on box visible in the scene graph:
7. 
OK, start the viewer with the 
P
i
c
k
H
a
n
d
l
e
r
object as a customized event handler:
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
8. 
Hold the Ctrl key and press on the cow. You will see a white selec瑩on box appear. 
Try moving your mouse and clicking on the Cessna, without releasing the Ctrl 
key. The selec瑩on box now migrates to the Cessna model, enclosing all of its 
ver瑩ces. All other opera瑩ons will not be affected if the Ctrl key is not held down:
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
The 
s
e
t
N
o
d
e
M
a
s
k
(
)
method of 
o
s
g
:
:
N
o
d
e
class is introduced for some special purposes. 
It performs a bitwise logical AND opera瑩on with a certain scene controller to indicate 
that the node is available for use to the controller or not. For example, to make a node 
and its sub-scene graph untouchable to the intersec瑩on visitor, we can adjust the two 
operators, one of which is defined by 
s
e
t
N
o
d
e
M
a
s
k
(
)
and the other is defined by the 
s
e
t
T
r
a
v
e
r
s
a
l
M
a
s
k
(
)
method of the 
o
s
g
:
:
N
o
d
e
V
i
s
i
t
o
r
class, to make the result 
of the logical AND zero. That is why we have these two lines in the previous example:
Break pdf into multiple files - 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
pdf specification; acrobat split pdf bookmark
Break pdf into multiple files - 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
a pdf page cut; pdf split file
Chapter 9
[
249 
]
That makes the selec瑩on box itself not pickable by the visitor, as shown in the following 
diagram:
Have a go hero – selecting geometries in a rectangular region
is used for compu瑩ng the intersec瑩on between a 
line segment and the scene graph. It accepts both model and window coordinate systems, 
thus the mouse posi瑩on on the screen can be converted to a line segment from the near 
plane to the far plane, leading to desired results.
But what will happen if we le晴 click and drag a rectangular region around all scene 
objects to be selected? There are four points to be recorded to form a rectangle, and 
actually eight points in the model coordinates, which cons瑩tutes a polyhedron. The 
is recommended for this purpose. This accepts 
the coordinate frame and four screen points as input arguments, and returns a list of 
intersec瑩ons as the result. Try making use of this class to select mul瑩ple geometries,  
and list all of them.
Windows, graphics contexts, and cameras
In Chapter 7Viewing the World we have already seen that the 
o
s
g
:
:
C
a
m
e
r
a
class 
manages the OpenGL graphics context associated with it, which is done via a simple 
s
e
t
G
r
a
p
h
i
c
s
C
o
n
t
e
x
t
(
)
method. The graphics context actually encapsulates informa瑩on on 
the way in which scene objects are drawn and rendering states are applied. It can be a graphics 
window providing a related windowing API or some other buffer objects, for example, the 
OpenGL pixel buffer, which stores pixel data without transferring it to the frame buffer.
C# PDF Page Insert Library: insert pages into PDF file in C#.net
Offer PDF page break inserting function. the ability to inserting a new PDF page into existing PDF processing functions, such as how to merge PDF document files
pdf split pages; break a pdf into parts
VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Able to add and insert one or multiple pages to existing adobe Offer PDF page break inserting function. DLLs for Adding Page into PDF Document in VB.NET Class.
cannot select text in pdf; break pdf into multiple pages
Interac瑩ng with Outside Elements
[
250 
]
OSG uses the 
o
s
g
:
:
G
r
a
p
h
i
c
s
C
o
n
t
e
x
t
class to represent the abstract graphics context, 
and the 
class to represent the abstract graphics window. 
The la瑴er also has a 
g
e
t
E
v
e
n
t
Q
u
e
u
e
(
)
method for managing GUI events. Its pla瑦orm-
specific subclasses will con瑩nuously add new events to this event queue.
Because of the agnos瑩c type of the windowing API (Windows, X11, Mac OS 
X, and so on), a graphics context must be created as a pla瑦orm-specific one. 
The 
method of the 
o
s
g
:
:
G
r
a
p
h
i
c
s
C
o
n
t
e
x
t
class will automa瑩cally make the decision for us. Its only argument, an 
pointer, will provide the specifica瑩on of 
what type of graphics window or buffer is required.
The Traits class
The 
class can set up proper瑩es of a specific graphics 
context. This is different from the 
class, which manages the 
characteris瑩cs of all newly-created cameras' graphics contexts. Instead of a number of 
se瑴ng and ge瑴ng property methods, the traits class uses public class member variables  
to indicate a property. This will take effect once the 
is called. 
The main components of the traits are listed in the following table:
Member a瑴ribute
Data type
Default 
value
Descrip瑩on
x
i
n
t
0
The ini瑩al horizontal posi瑩on of the 
graphics context
y
i
n
t
0
The ini瑩al ver瑩cal posi瑩on of the 
graphics context
w
i
d
t
h
i
n
t
0
The width of the graphics context 
(always affect the window rectangle)
h
e
i
g
h
t
i
n
t
0
The height of the graphics context 
(always affect the window rectangle)
w
i
n
d
o
w
N
a
m
e
s
t
d
:
:
s
t
r
i
n
g
""
The name of the generated graphics 
window
w
i
n
d
o
w
D
e
c
o
r
a
t
i
o
n
b
o
o
l
false
The decora瑩on (瑩tle bar) of the 
generated graphics window
r
e
d
u
n
s
i
g
n
e
d
i
n
t
8
Number of bits of red in the OpenGL 
color buffer
g
r
e
e
n
u
n
s
i
g
n
e
d
i
n
t
8
Number of bits of green in the 
OpenGL color buffer
b
l
u
e
u
n
s
i
g
n
e
d
i
n
t
8
Number of bits of blue in OpenGL 
color buffer
Chapter 9
[
251 
]
Member a瑴ribute
Data type
Default 
value
Descrip瑩on
a
l
p
h
a
u
n
s
i
g
n
e
d
i
n
t
0
Number of bits in the OpenGL alpha 
buffer
d
e
p
t
h
u
n
s
i
g
n
e
d
i
n
t
24
Number of bits in the OpenGL depth 
buffer
s
t
e
n
c
i
l
u
n
s
i
g
n
e
d
i
n
t
0
Number of bits in the OpenGL stencil 
buffer
d
o
u
b
l
e
B
u
f
f
e
r
b
o
o
l
false
Use double or single buffering
s
a
m
p
l
e
s
u
n
s
i
g
n
e
d
i
n
t
0
Number of mul瑩sampling buffer 
samples
q
u
a
d
B
u
f
f
e
r
S
t
e
r
e
o
b
o
o
l
false
Use NVIDIA's quad-buffering stereo 
mode or not
i
n
h
e
r
i
t
e
d
W
i
n
d
o
w
D
a
t
a
o
s
g
:
:
r
e
f
_
p
t
r
<
o
s
g
:
:
R
e
f
e
r
e
n
c
e
d
>
NULL
The associated window handle, which 
will be described later
To ini瑩alize a new traits pointer and set one or more of its member variables, just type:
t
r
a
i
t
s
-
>
x
=
5
0
;
Time for action – configuring the traits of a rendering window
We will create a fixed-size window to contain the rendering result of an OSG scene. The brief 
steps are: configure the traits of the rendering window, create a graphics context according 
to the traits, a瑴ach the graphics context to a camera, and finally set the camera as the main 
camera of the viewer.
1. 
Include the necessary headers:
Interac瑩ng with Outside Elements
[
252 
]
2. 
Create a traits structure and set its a瑴ributes. The samples value here is set 
to enable the global mul瑩sampling func瑩onality of the current window, but 
leave others to their defaults (no mul瑩sampling). This is different from the 
method of the 
class:
t
r
a
i
t
s
-
>
x
=
5
0
;
t
r
a
i
t
s
-
>
y
=
5
0
;
3. 
Create the graphics context with the 
func瑩on. 
Note here, never create new graphic's contexts with the 
n
e
w
operator, 
otherwise OSG can't decide the low-level windowing pla瑦orm for it:
4. 
The graphics context is then a瑴ached to a newly-created camera node. It will be 
used as the main camera of the whole scene, so we have to specify the clear mask 
and color to make it work like ordinary OSG cameras. It is also very important to  
preset the projec瑩on matrix here. But we don't need to alter this projec瑩on 
matrix all the 瑩me, as it will be recomputed and updated by the rendering 
backend at an appropriate 瑩me:
5. 
Load a model as the scene graph:
"
c
e
s
s
n
a
.
o
s
g
"
)
;
Chapter 9
[
253 
]
6. 
Set the camera to the viewer and start it as usual:
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
7. 
Now we have the Cessna model shown in a rendering window. We can s瑩ll navigate 
in the window, run previous examples, and test the code. To make it rendered in  
full-screen mode again, set the 
w
i
d
t
h
and 
h
e
i
g
h
t
a瑴ributes to the size of the 
screen, and set 
w
i
n
d
o
w
D
e
c
o
r
a
t
i
o
n
to false.
Interac瑩ng with Outside Elements
[
254 
]
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
We have already made use of the 
method in Chapter 7Viewing 
the World. It constructs a window instead of full-screen mode to display rendering results. 
Believe it or not, the content of the 
method is nearly the same 
as the example here. It configures the traits, creates a specific graphics context, a瑴aches 
it to a new camera, and finally sets the camera as the main camera of the viewer. Other 
methods, like 
, do the similar work at the 
beginning of implementa瑩ons to generate rendering containers. But a晴er that, they always 
produce mul瑩ple camera objects with special projec瑩on matrices to realize rich effects. The 
rendering-to-textures technique is also useful in these cases.
Integrating OSG into a window
Interface developers may work under various GUI systems, and have to integrate the OSG 
scene graph into their UI widgets. According to the different working strategies of GUIs, it is 
technically hard to have a universal method of embedding OSG viewers. However, there do 
exist some tricks we can use to make the integra瑩on easier:
‹
A瑴ach the window handle to the 
i
n
h
e
r
i
t
e
d
W
i
n
d
o
w
D
a
t
a
of the 
class. The window handle's type can be 
Win32's 
H
W
N
D
, X11's 
W
i
n
d
o
w
, and Cocoa's 
W
i
n
d
o
w
R
e
f
. A晴er that, OSG will 
manage the OpenGL rendering context and drawing calls on the inherited  
window and thus render the whole scene to the window surface.
‹
The 
f
r
a
m
e
(
)
method of the 
o
s
g
V
i
e
w
e
r
:
:
V
i
e
w
e
r
class should be executed 
con瑩nuously. For this purpose, we can either use a separate thread, or a GUI 瑩mer 
event handler with a short enough interval.
‹
For widgets that support OpenGL drawing calls directly (Qt's 
Q
G
L
W
i
d
g
e
t
, GLUT, 
FLTK, and so on), use the 
class to 
create a graphic's context without worrying about the rendering context and related 
buffer a瑴ributes. The 
f
r
a
m
e
(
)
method of the OSG viewer must be executed in a 
con瑩nuous-upda瑩ng method of the widget class.
‹
Never modify the scene graph (dynamic changing node and state a瑴ributes, adding 
or removing child nodes, and so on) in a GUI's callbacks or event handlers. Use 
OSG na瑩ve ones instead to prevent thread conflicts. Another inefficient solu瑩on is 
to force the viewer to use the single-threaded mode, which will be introduced in 
Chapter 12Improving Rendering Efficiency.
Chapter 9
[
255 
]
Time for action – attaching OSG with a window handle in Win32
A window handle (HWND) in Win32 applica瑩ons allows the system resources to know what 
kind of window objects it referring to. The HWND variable may encapsulate a dialog, a push 
bu瑴on, an MDI or SDI window, and so on. In that case, a瑴aching this handle to the OSG 
traits and then to the graphics context will make it possible to integrate OSG and Win32 GUI 
controls, and thus display 3D scenes in all kinds of user interface objects.
1. 
Include the necessary headers:
2. 
Two global variables are declared here; these will be explained later:
b
o
o
l
g
_
f
i
n
i
s
h
e
d
;
3. 
We would like to create a classic pop-up window with the 
C
r
e
a
t
e
W
i
n
d
o
w
(
)
func瑩on 
from the Win32 API. It must use a 
W
N
D
C
L
A
S
S
structure to define the styles and 
customized procedure of the window. In most cases, the procedure is a pointer to a 
sta瑩c func瑩on, which handles windowing messages that are passed to this window:
W
N
D
C
L
A
S
S
w
n
d
c
l
a
s
s
;
r
e
t
u
r
n
0
;
Interac瑩ng with Outside Elements
[
256 
]
4. 
Create an 800x600 window at the posi瑩on (100, 100). It returns the window handle 
if it succeeds, which is required by the OSG rendering window traits for integra瑩ng  
work. We can either put the ini瑩aliza瑩on code of the graphics context here, or put  
it in the 
W
M
_
C
R
E
A
T
E
case:
5. 
Create a message loop to retrieve messages from the internal queue and dispatch 
them to the appropriate window procedure:
M
S
G
m
s
g
;
{
}
r
e
t
u
r
n
0
;
6. 
Now, in the implementa瑩on of the procedure 
W
n
d
P
r
o
c
(
)
, we will try ini瑩alizing 
an OSG viewer and embedding it into the created window. This is going to 
be done in the 
W
M
_
C
R
E
A
T
E
statement. Firstly, a 
W
i
n
d
o
w
D
a
t
a
structure is 
created to include the HWND handle. Then it is applied to the traits and the 
graphic's context is created pla瑦orm-specific. The camera and the viewer 
objects are then ini瑩alized one a晴er another. The 
here is used to disable qui瑴ng OSG applica瑩ons with the Esc key. Finally, 
we start a new rendering thread for advancing the frames in the viewer. 
That is why we declare two global variables at the beginning:
c
a
s
e
W
M
_
C
R
E
A
T
E
:
{
Chapter 9
[
257 
]
t
r
a
i
t
s
-
>
x
=
0
;
t
r
a
i
t
s
-
>
y
=
0
;
)
;
r
e
t
u
r
n
0
;
}
Documents you may be interested
Documents you may be interested