Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
bff11cea
Commit
bff11cea
authored
Aug 27, 2012
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
3D viewer: code tweaking
parent
20acc9a9
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
66 additions
and
31 deletions
+66
-31
3d_draw.cpp
3d-viewer/3d_draw.cpp
+13
-7
3d_draw_basic_functions.cpp
3d-viewer/3d_draw_basic_functions.cpp
+36
-22
info3d_visu.h
3d-viewer/info3d_visu.h
+17
-2
No files found.
3d-viewer/3d_draw.cpp
View file @
bff11cea
...
...
@@ -241,7 +241,7 @@ void EDA_3D_CANVAS::Draw3D_Zone( ZONE_CONTAINER* aZone )
if
(
layer
==
LAST_COPPER_LAYER
)
layer
=
g_Parm_3D_Visu
.
m_CopperLayersCount
-
1
;
int
zpos
=
KiROUND
(
g_Parm_3D_Visu
.
m_LayerZcoord
[
layer
]
/
g_Parm_3D_Visu
.
m_BiuTo3Dunits
);
int
zpos
=
g_Parm_3D_Visu
.
GetLayerZcoordBIU
(
layer
);
SetGLColor
(
color
);
glNormal3f
(
0.0
,
0.0
,
Get3DLayer_Z_Orientation
(
layer
)
);
...
...
@@ -460,7 +460,7 @@ void EDA_3D_CANVAS::Draw3D_Track( TRACK* aTrack )
if
(
layer
==
LAST_COPPER_LAYER
)
layer
=
g_Parm_3D_Visu
.
m_CopperLayersCount
-
1
;
int
zpos
=
KiROUND
(
g_Parm_3D_Visu
.
m_LayerZcoord
[
layer
]
/
g_Parm_3D_Visu
.
m_BiuTo3Dunits
);
int
zpos
=
g_Parm_3D_Visu
.
GetLayerZcoordBIU
(
layer
);
SetGLColor
(
color
);
glNormal3f
(
0.0
,
0.0
,
(
layer
==
LAYER_N_BACK
)
?
-
1.0
:
1.0
);
...
...
@@ -485,7 +485,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via )
// Drawing horizontal thick rings:
for
(
layer
=
bottom_layer
;
layer
<
g_Parm_3D_Visu
.
m_CopperLayersCount
;
layer
++
)
{
int
zpos
=
KiROUND
(
g_Parm_3D_Visu
.
m_LayerZcoord
[
layer
]
/
biu_to_3Dunits
);
int
zpos
=
g_Parm_3D_Visu
.
GetLayerZcoordBIU
(
layer
);
if
(
layer
<
g_Parm_3D_Visu
.
m_CopperLayersCount
-
1
)
{
...
...
@@ -518,7 +518,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via )
color
=
g_ColorsSettings
.
GetItemColor
(
VIAS_VISIBLE
+
via
->
m_Shape
);
SetGLColor
(
color
);
int
height
=
g_Parm_3D_Visu
.
GetLayerZcoordBIU
(
top_layer
)
-
g_Parm_3D_Visu
.
m_LayerZcoord
[
bottom_layer
]
-
thickness
;
g_Parm_3D_Visu
.
GetLayerZcoordBIU
(
bottom_layer
)
-
thickness
;
int
zpos
=
g_Parm_3D_Visu
.
GetLayerZcoordBIU
(
bottom_layer
)
+
thickness
/
2
;
Draw3D_ZaxisCylinder
(
via
->
m_Start
,
inner_radius
+
thickness
/
2
,
height
,
...
...
@@ -625,7 +625,7 @@ void EDA_3D_CANVAS::Draw3D_DrawText( TEXTE_PCB* text )
int
color
=
g_ColorsSettings
.
GetLayerColor
(
layer
);
SetGLColor
(
color
);
s_Text3DZPos
=
KiROUND
(
g_Parm_3D_Visu
.
m_LayerZcoord
[
layer
]
/
g_Parm_3D_Visu
.
m_BiuTo3Dunits
);
s_Text3DZPos
=
g_Parm_3D_Visu
.
GetLayerZcoordBIU
(
layer
);
s_Text3DWidth
=
text
->
GetThickness
();
glNormal3f
(
0.0
,
0.0
,
Get3DLayer_Z_Orientation
(
layer
)
);
wxSize
size
=
text
->
m_Size
;
...
...
@@ -681,13 +681,19 @@ void MODULE::Draw3D( EDA_3D_CANVAS* glcanvas )
S3D_MASTER
*
Struct3D
=
m_3D_Drawings
;
bool
As3dShape
=
false
;
if
(
g_Parm_3D_Visu
.
m_DrawFlags
[
g_Parm_3D_Visu
.
FL_MODULE
]
)
if
(
g_Parm_3D_Visu
.
m_DrawFlags
[
g_Parm_3D_Visu
.
FL_MODULE
]
)
{
double
zpos
;
if
(
m_Layer
==
LAYER_N_BACK
)
zpos
=
g_Parm_3D_Visu
.
GetModulesZcoord3DIU
(
true
);
else
zpos
=
g_Parm_3D_Visu
.
GetModulesZcoord3DIU
(
false
);
glPushMatrix
();
glTranslatef
(
m_Pos
.
x
*
g_Parm_3D_Visu
.
m_BiuTo3Dunits
,
-
m_Pos
.
y
*
g_Parm_3D_Visu
.
m_BiuTo3Dunits
,
g_Parm_3D_Visu
.
m_LayerZcoord
[
m_Layer
]
);
zpos
);
if
(
m_Orient
)
{
...
...
3d-viewer/3d_draw_basic_functions.cpp
View file @
bff11cea
...
...
@@ -59,8 +59,8 @@ static void CALLBACK tessCPolyPt2Vertex( const GLvoid* data );
* Used to create the vertical sides of 3D horizontal shapes with thickness.
*/
static
void
Draw3D_VerticalPolygonalCylinder
(
const
std
::
vector
<
CPolyPt
>&
aPolysList
,
int
aHeight
,
int
aZpos
,
double
aBiuTo3DUnits
)
int
aHeight
,
int
aZpos
,
bool
aInside
,
double
aBiuTo3DUnits
)
{
if
(
aHeight
==
0
)
return
;
...
...
@@ -69,8 +69,16 @@ static void Draw3D_VerticalPolygonalCylinder( const std::vector<CPolyPt>& aPolys
coords
.
resize
(
4
);
// Init Z position of the 4 points of a GL_QUAD
coords
[
0
].
z
=
aZpos
;
coords
[
1
].
z
=
aZpos
+
aHeight
;
if
(
aInside
)
{
coords
[
0
].
z
=
aZpos
;
coords
[
1
].
z
=
aZpos
+
aHeight
;
}
else
{
coords
[
0
].
z
=
aZpos
+
aHeight
;
coords
[
1
].
z
=
aZpos
;
}
coords
[
2
].
z
=
coords
[
1
].
z
;
coords
[
3
].
z
=
coords
[
0
].
z
;
...
...
@@ -87,12 +95,12 @@ static void Draw3D_VerticalPolygonalCylinder( const std::vector<CPolyPt>& aPolys
}
// Build the 4 vertices of each GL_QUAD
coords
[
0
].
x
=
aPolysList
[
jj
].
x
;
coords
[
0
].
y
=
-
aPolysList
[
jj
].
y
;
coords
[
0
].
x
=
aPolysList
[
ii
].
x
;
coords
[
0
].
y
=
-
aPolysList
[
ii
].
y
;
coords
[
1
].
x
=
coords
[
0
].
x
;
coords
[
1
].
y
=
coords
[
0
].
y
;
// only z change
coords
[
2
].
x
=
aPolysList
[
ii
].
x
;
coords
[
2
].
y
=
-
aPolysList
[
ii
].
y
;
coords
[
2
].
x
=
aPolysList
[
jj
].
x
;
coords
[
2
].
y
=
-
aPolysList
[
jj
].
y
;
coords
[
3
].
x
=
coords
[
2
].
x
;
coords
[
3
].
y
=
coords
[
2
].
y
;
// only z change
...
...
@@ -192,7 +200,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const std::vector<CPolyPt>& aPolysList,
return
;
// Build the 3D data : vertical side
Draw3D_VerticalPolygonalCylinder
(
polylist
,
aThickness
,
aZpos
,
aBiuTo3DUnits
);
Draw3D_VerticalPolygonalCylinder
(
polylist
,
aThickness
,
aZpos
,
false
,
aBiuTo3DUnits
);
glNormal3f
(
0.0
,
0.0
,
1.0
);
}
...
...
@@ -203,7 +211,8 @@ void Draw3D_SolidHorizontalPolyPolygons( const std::vector<CPolyPt>& aPolysList,
* See Draw3D_SolidHorizontalPolyPolygons for more info
*/
void
Draw3D_SolidHorizontalPolygonWithHoles
(
const
std
::
vector
<
CPolyPt
>&
aPolysList
,
int
aZpos
,
int
aThickness
,
double
aBiuTo3DUnits
)
int
aZpos
,
int
aThickness
,
double
aBiuTo3DUnits
)
{
std
::
vector
<
CPolyPt
>
polygon
;
...
...
@@ -225,7 +234,7 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius,
std
::
vector
<
CPolyPt
>
outer_cornerBuffer
;
TransformCircleToPolygon
(
outer_cornerBuffer
,
aCenterPos
,
aRadius
+
(
aThickness
/
2
),
SEGM_PER_CIRCLE
);
aRadius
+
(
aThickness
/
2
),
slice
);
std
::
vector
<
S3D_VERTEX
>
coords
;
coords
.
resize
(
4
);
...
...
@@ -239,11 +248,11 @@ void Draw3D_ZaxisCylinder( wxPoint aCenterPos, int aRadius,
{
// Draw the vertical outer side
Draw3D_VerticalPolygonalCylinder
(
outer_cornerBuffer
,
aHeight
,
aZpos
,
aBiuTo3DUnits
);
aHeight
,
aZpos
,
false
,
aBiuTo3DUnits
);
if
(
aThickness
)
// Draws the vertical inner side (hole)
Draw3D_VerticalPolygonalCylinder
(
inner_cornerBuffer
,
aHeight
,
aZpos
,
aBiuTo3DUnits
);
aHeight
,
aZpos
,
true
,
aBiuTo3DUnits
);
}
if
(
aThickness
)
...
...
@@ -286,32 +295,37 @@ void Draw3D_ZaxisOblongCylinder( wxPoint aAxis1Pos, wxPoint aAxis2Pos,
// Build the points to approximate oblong cylinder by segments
std
::
vector
<
CPolyPt
>
outer_cornerBuffer
;
int
width
=
aThickness
+
aRadius
*
2
;
int
segm_width
=
(
aRadius
*
2
)
+
aThickness
;
TransformRoundedEndsSegmentToPolygon
(
outer_cornerBuffer
,
aAxis1Pos
,
aAxis2Pos
,
slice
,
width
);
aAxis2Pos
,
slice
,
segm_
width
);
// Draw the oblong outer cylinder
if
(
aHeight
)
Draw3D_VerticalPolygonalCylinder
(
outer_cornerBuffer
,
aHeight
,
aZpos
,
aBiuTo3DUnits
);
Draw3D_VerticalPolygonalCylinder
(
outer_cornerBuffer
,
aHeight
,
aZpos
,
false
,
aBiuTo3DUnits
);
if
(
aThickness
)
{
std
::
vector
<
CPolyPt
>
inner_cornerBuffer
;
width
=
aThickness
-
aRadius
*
2
;
segm_width
=
aRadius
*
2
;
TransformRoundedEndsSegmentToPolygon
(
inner_cornerBuffer
,
aAxis1Pos
,
aAxis2Pos
,
slice
,
width
);
aAxis2Pos
,
slice
,
segm_
width
);
// Draw the oblong inner cylinder
if
(
aHeight
)
Draw3D_VerticalPolygonalCylinder
(
inner_cornerBuffer
,
aHeight
,
aZpos
,
aBiuTo3DUnits
);
true
,
aZpos
,
aBiuTo3DUnits
);
// draw top (front) horizontal side (ring)
// Build the horizontal full polygon shape
// (outer polygon shape - inner polygon shape)
outer_cornerBuffer
.
insert
(
outer_cornerBuffer
.
end
(),
inner_cornerBuffer
.
begin
(),
inner_cornerBuffer
.
end
()
);
std
::
vector
<
CPolyPt
>
polygon
;
inner_cornerBuffer
.
begin
(),
inner_cornerBuffer
.
end
()
)
;
std
::
vector
<
CPolyPt
>
polygon
;
ConvertPolysListWithHolesToOnePolygon
(
outer_cornerBuffer
,
polygon
);
// draw top (front) horizontal side (ring)
glNormal3f
(
0.0
,
0.0
,
1.0
);
Draw3D_SolidHorizontalPolyPolygons
(
polygon
,
aZpos
+
aHeight
,
0
,
aBiuTo3DUnits
);
...
...
3d-viewer/info3d_visu.h
View file @
bff11cea
...
...
@@ -78,7 +78,7 @@ public:
double
m_Quat
[
4
];
// orientation of 3D view
double
m_Rot
[
4
];
// rotation parameters of 3D view
double
m_Zoom
;
// 3D zoom value
double
m_3D_Grid
;
// 3D grid val
m
ue, in mm
double
m_3D_Grid
;
// 3D grid value, in mm
S3D_COLOR
m_BgColor
;
bool
m_DrawFlags
[
FL_LAST
];
// Enable/disable flags (see DISPLAY3D_FLG list)
wxPoint
m_BoardPos
;
// center board actual position in board units
...
...
@@ -90,10 +90,10 @@ public:
double
m_BiuTo3Dunits
;
// Normalization scale to convert board
// internal units to 3D units
// to scale 3D units between -1.0 and +1.0
double
m_LayerZcoord
[
LAYER_COUNT
];
// Z position of each layer (normalized)
double
m_CurrentZpos
;
// temporary storage of current value of Z position,
// used in some calculation
private
:
double
m_LayerZcoord
[
LAYER_COUNT
];
// Z position of each layer (normalized)
double
m_CopperThickness
;
// Copper thickness (normalized)
double
m_EpoxyThickness
;
// Epoxy thickness (normalized)
double
m_NonCopperLayerThickness
;
// Non copper layers thickness
...
...
@@ -108,6 +108,21 @@ public: INFO3D_VISU();
*/
void
InitSettings
(
BOARD
*
aBoard
);
/**
* function GetModulesZcoord3DIU
* @return the Z coordinate of the module, in 3D Units
* @param aIsFlipped: true for modules on Front (top) layer, false
* if on back (bottom) layer
* Used to know the Z position of 3D shapes
*/
double
GetModulesZcoord3DIU
(
bool
aIsFlipped
)
{
if
(
aIsFlipped
)
return
m_LayerZcoord
[
ADHESIVE_N_BACK
]
-
m_NonCopperLayerThickness
;
else
return
m_LayerZcoord
[
ADHESIVE_N_FRONT
]
+
m_NonCopperLayerThickness
;
}
/**
* function GetLayerZcoordBIU
* @return the Z coordinate of the layer aLayer, in Board Internal Units
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment