KiCad PCB EDA Suite
Loading...
Searching...
No Matches
ifsg_shape.cpp
Go to the documentation of this file.
1
/*
2
* This program source code file is part of KiCad, a free EDA CAD application.
3
*
4
* Copyright (C) 2015 Cirilo Bernardo <
[email protected]
>
5
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6
*
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* as published by the Free Software Foundation; either version 2
10
* of the License, or (at your option) any later version.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, you may find one here:
19
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20
* or you may search the http://www.gnu.org website for the version 2 license,
21
* or you may write to the Free Software Foundation, Inc.,
22
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23
*/
24
25
26
#include <iostream>
27
#include <sstream>
28
#include <wx/log.h>
29
30
#include "
plugins/3dapi/ifsg_shape.h
"
31
#include "
3d_cache/sg/sg_shape.h
"
32
33
34
extern
char
BadParent
[];
35
extern
char
WrongParent
[];
36
37
38
IFSG_SHAPE::IFSG_SHAPE
(
bool
create )
39
{
40
m_node
=
nullptr
;
41
42
if
( !create )
43
return ;
44
45
m_node
=
new
SGSHAPE
(
nullptr
);
46
47
m_node
->AssociateWrapper( &
m_node
);
48
}
49
50
51
IFSG_SHAPE::IFSG_SHAPE
(
SGNODE
* aParent )
52
{
53
m_node
=
new
SGSHAPE
(
nullptr
);
54
55
if
( !
m_node
->SetParent( aParent ) )
56
{
57
delete
m_node
;
58
m_node
=
nullptr
;
59
60
wxLogTrace( MASK_3D_SG, wxT(
"%s:%s:%d %s"
), __FILE__, __FUNCTION__, __LINE__,
61
WrongParent
);
62
63
return
;
64
}
65
66
m_node
->AssociateWrapper( &
m_node
);
67
}
68
69
70
IFSG_SHAPE::IFSG_SHAPE
(
IFSG_NODE
& aParent )
71
{
72
SGNODE
* pp = aParent.
GetRawPtr
();
73
74
#ifdef DEBUG
75
if
( !pp )
76
{
77
wxLogTrace( MASK_3D_SG, wxT(
"%s:%s:%d %s"
), __FILE__, __FUNCTION__, __LINE__,
78
BadParent
);
79
}
80
#endif
81
82
m_node
=
new
SGSHAPE
(
nullptr
);
83
84
if
( !
m_node
->SetParent( pp ) )
85
{
86
delete
m_node
;
87
m_node
=
nullptr
;
88
89
wxLogTrace( MASK_3D_SG, wxT(
"%s:%s:%d %s"
), __FILE__, __FUNCTION__, __LINE__,
90
WrongParent
);
91
92
return
;
93
}
94
95
m_node
->AssociateWrapper( &
m_node
);
96
}
97
98
99
bool
IFSG_SHAPE::Attach
(
SGNODE
* aNode )
100
{
101
if
(
m_node
)
102
m_node
->DisassociateWrapper( &
m_node
);
103
104
m_node
=
nullptr
;
105
106
if
( !aNode )
107
return
false
;
108
109
if
(
S3D::SGTYPE_SHAPE
!= aNode->
GetNodeType
() )
110
{
111
return
false
;
112
}
113
114
m_node
= aNode;
115
m_node
->AssociateWrapper( &
m_node
);
116
117
return
true
;
118
}
119
120
121
bool
IFSG_SHAPE::NewNode
(
SGNODE
* aParent )
122
{
123
if
(
m_node
)
124
m_node
->DisassociateWrapper( &
m_node
);
125
126
m_node
=
new
SGSHAPE
( aParent );
127
128
if
( aParent !=
m_node
->GetParent() )
129
{
130
wxLogTrace( MASK_3D_SG, wxT(
"%s:%s:%d * [BUG] invalid SGNODE parent (%s) to SGSHAPE"
),
131
__FILE__, __FUNCTION__, __LINE__,
132
aParent->
GetNodeTypeName
( aParent->
GetNodeType
() ) );
133
134
delete
m_node
;
135
m_node
=
nullptr
;
136
return
false
;
137
}
138
139
m_node
->AssociateWrapper( &
m_node
);
140
141
return
true
;
142
}
143
144
145
bool
IFSG_SHAPE::NewNode
(
IFSG_NODE
& aParent )
146
{
147
SGNODE
* np = aParent.
GetRawPtr
();
148
149
wxCHECK( np,
false
);
150
151
return
NewNode
( np );
152
}
IFSG_NODE::GetRawPtr
SGNODE * GetRawPtr(void) noexcept
Return the raw internal SGNODE pointer.
Definition
ifsg_node.cpp:65
IFSG_NODE::IFSG_NODE
IFSG_NODE()
Definition
ifsg_node.cpp:42
IFSG_NODE::m_node
SGNODE * m_node
Definition
ifsg_node.h:51
IFSG_SHAPE::IFSG_SHAPE
IFSG_SHAPE(bool create)
Definition
ifsg_shape.cpp:38
IFSG_SHAPE::NewNode
bool NewNode(SGNODE *aParent) override
Create a new node to associate with this wrapper.
Definition
ifsg_shape.cpp:121
IFSG_SHAPE::Attach
bool Attach(SGNODE *aNode) override
Associate a given SGNODE* with this wrapper.
Definition
ifsg_shape.cpp:99
SGNODE
The base class of all Scene Graph nodes.
Definition
sg_node.h:75
SGNODE::GetNodeType
S3D::SGTYPES GetNodeType(void) const noexcept
Return the type of this node instance.
Definition
sg_node.cpp:104
SGNODE::GetNodeTypeName
const char * GetNodeTypeName(S3D::SGTYPES aNodeType) const noexcept
Definition
sg_node.cpp:164
SGSHAPE
Define a complex 3D shape for a scenegraph object.
Definition
sg_shape.h:43
BadParent
char BadParent[]
Definition
ifsg_node.cpp:38
WrongParent
char WrongParent[]
Definition
ifsg_node.cpp:39
ifsg_shape.h
defines the wrapper for the SGSHAPE class
S3D::SGTYPE_SHAPE
@ SGTYPE_SHAPE
Definition
sg_types.h:45
sg_shape.h
src
3d-viewer
3d_cache
sg
ifsg_shape.cpp
Generated on Sun Sep 21 2025 01:05:19 for KiCad PCB EDA Suite by
1.13.2