Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
onlyoffice_core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
onlyoffice_core
Commits
a2d37e8a
Commit
a2d37e8a
authored
Dec 16, 2017
by
ElenaSubbotina
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
OdfFormaReader - fix 3d charts with 2 axis
parent
b13eba5f
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
92 additions
and
53 deletions
+92
-53
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.vcproj
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.vcproj
+1
-1
ASCOfficeOdfFile/src/docx/oox_chart_axis.cpp
ASCOfficeOdfFile/src/docx/oox_chart_axis.cpp
+10
-4
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
+1
-1
ASCOfficeOdfFile/src/docx/oox_chart_series.cpp
ASCOfficeOdfFile/src/docx/oox_chart_series.cpp
+1
-1
ASCOfficeOdfFile/src/docx/oox_plot_area.cpp
ASCOfficeOdfFile/src/docx/oox_plot_area.cpp
+25
-21
ASCOfficeOdfFile/src/docx/oox_types_chart.cpp
ASCOfficeOdfFile/src/docx/oox_types_chart.cpp
+15
-11
ASCOfficeOdfFile/src/docx/oox_types_chart.h
ASCOfficeOdfFile/src/docx/oox_types_chart.h
+7
-5
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
+28
-5
ASCOfficeOdfFile/src/odf/style_chart_properties.cpp
ASCOfficeOdfFile/src/odf/style_chart_properties.cpp
+4
-4
No files found.
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.vcproj
View file @
a2d37e8a
...
...
@@ -47,7 +47,7 @@
PreprocessorDefinitions=
"WIN32;_DEBUG;_CONSOLE;_UNICODE;UNICODE"
MinimalRebuild=
"true"
BasicRuntimeChecks=
"3"
RuntimeLibrary=
"
3
"
RuntimeLibrary=
"
1
"
UsePrecompiledHeader=
"0"
WarningLevel=
"3"
Detect64BitPortabilityProblems=
"false"
...
...
ASCOfficeOdfFile/src/docx/oox_chart_axis.cpp
View file @
a2d37e8a
...
...
@@ -48,13 +48,19 @@ _CP_PTR(oox_axis_content) oox_axis_content::create(int type)
oox_axis_content
::
oox_axis_content
(
int
type
/*,std::wstring name*/
)
{
//id_ = abs((int)*((_UINT32*)this));
id_
=
abs
((
long
)
this
);
type_
=
type
;
//dimension
if
(
type
==
0
)
{
id_
=
0
;
}
else
{
id_
=
abs
((
long
)
this
);
}
type_
=
type
;
}
void
oox_axis_content
::
oox_serialize
(
std
::
wostream
&
_Wostream
)
{
if
(
id_
<
0
)
return
;
//not activate
if
(
id_
<
1
)
return
;
//not activate, blank axis
CP_XML_WRITER
(
_Wostream
)
{
...
...
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
View file @
a2d37e8a
...
...
@@ -153,7 +153,7 @@ void oox_chart_context::serialize(std::wostream & strm)
}
CP_XML_NODE
(
L"c:dispBlanksAs"
)
{
CP_XML_ATTR
(
L"val"
,
L"zero"
);
CP_XML_ATTR
(
L"val"
,
plot_area_
.
current_chart_
->
dispBlanksAs_
);
}
CP_XML_NODE
(
L"c:showDLblsOverMax"
)
{
...
...
ASCOfficeOdfFile/src/docx/oox_chart_series.cpp
View file @
a2d37e8a
...
...
@@ -250,7 +250,7 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
CP_XML_CONTENT
(
values_
[
i
].
numRef_
.
formula
);
}
if
(
values_
[
i
].
numRef_
.
num_cache_count
>
0
)
if
(
values_
[
i
].
numRef_
.
num_cache_count
>
0
)
{
CP_XML_NODE
(
L"c:numCache"
)
{
...
...
ASCOfficeOdfFile/src/docx/oox_plot_area.cpp
View file @
a2d37e8a
...
...
@@ -31,10 +31,10 @@
*/
#include "oox_plot_area.h"
#include <boost/foreach.hpp>
#include <boost/functional.hpp>
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "../odf/style_text_properties.h"
#include "oox_chart_shape.h"
...
...
@@ -90,7 +90,7 @@ void oox_plot_area::add_chart(int type)
void
oox_plot_area
::
add_axis
(
int
type
,
odf_reader
::
chart
::
axis
&
content
)
{
oox_axis_content_ptr
ax
=
oox_axis_content
::
create
(
type
);
oox_axis_content_ptr
ax
=
oox_axis_content
::
create
(
type
);
ax
->
content_
=
content
;
axis_
.
push_back
(
ax
);
...
...
@@ -98,21 +98,25 @@ void oox_plot_area::add_axis(int type, odf_reader::chart::axis & content)
void
oox_plot_area
::
reset_cross_axis
()
//обязательно после всех добавлений
{
BOOST_FOREACH
(
oox_axis_content_ptr
const
&
ax
,
axis_
)
for
(
size_t
i
=
0
;
i
<
axis_
.
size
();
i
++
)
{
BOOST_FOREACH
(
oox_chart_ptr
const
&
ch
,
charts_
)
for
(
size_t
j
=
0
;
j
<
charts_
.
size
();
j
++
)
{
ch
->
add_axis
(
ax
->
get_Id
());
ch
arts_
[
j
]
->
add_axis
(
axis_
[
i
]
->
get_Id
());
}
}
BOOST_FOREACH
(
oox_axis_content_ptr
const
&
a
,
axis_
)
{
int
curr_id
=
a
->
get_Id
();
BOOST_FOREACH
(
oox_axis_content_ptr
const
&
b
,
axis_
)
{
if
(
b
->
get_Id
()
==
curr_id
)
continue
;
b
->
add_CrossedId
(
curr_id
);
for
(
size_t
i
=
0
;
i
<
axis_
.
size
();
i
++
)
{
int
curr_id
=
axis_
[
i
]
->
get_Id
();
if
(
curr_id
<
1
)
continue
;
for
(
size_t
j
=
0
;
j
<
axis_
.
size
();
j
++
)
{
if
(
axis_
[
j
]
->
get_Id
()
==
curr_id
)
continue
;
axis_
[
j
]
->
add_CrossedId
(
curr_id
);
}
}
}
...
...
@@ -130,18 +134,18 @@ void oox_plot_area::oox_serialize(std::wostream & _Wostream)
//CP_XML_NODE(L"c:layout"){}
bool
axisPresent
=
true
;
BOOST_FOREACH
(
oox_chart_ptr
const
&
ch
,
charts_
)
{
ch
->
oox_serialize
(
CP_XML_STREAM
());
for
(
size_t
i
=
0
;
i
<
charts_
.
size
();
i
++
)
{
ch
arts_
[
i
]
->
oox_serialize
(
CP_XML_STREAM
());
if
(
ch
->
type_
==
CHART_TYPE_PIE
||
ch
->
type_
==
CHART_TYPE_DOUGHNUT
)
axisPresent
=
false
;
if
(
ch
arts_
[
i
]
->
type_
==
CHART_TYPE_PIE
||
ch
arts_
[
i
]
->
type_
==
CHART_TYPE_DOUGHNUT
)
axisPresent
=
false
;
}
if
(
axisPresent
)
{
BOOST_FOREACH
(
oox_axis_content_ptr
const
&
a
,
axis_
)
{
a
->
oox_serialize
(
CP_XML_STREAM
());
for
(
size_t
i
=
0
;
i
<
axis_
.
size
();
i
++
)
{
a
xis_
[
i
]
->
oox_serialize
(
CP_XML_STREAM
());
}
}
shape
.
oox_serialize
(
CP_XML_STREAM
());
...
...
ASCOfficeOdfFile/src/docx/oox_types_chart.cpp
View file @
a2d37e8a
...
...
@@ -63,7 +63,7 @@ void oox_chart::set_content_series(odf_reader::chart::series & content)
}
void
oox_chart
::
set_values_series
(
int
ind
,
std
::
vector
<
std
::
wstring
>
&
val
)
{
if
(
val
.
size
()
<
1
)
return
;
if
(
val
.
empty
()
)
return
;
oox_series_ptr
&
current_ptr
=
series_
.
back
();
current_ptr
->
setValues
(
ind
,
val
);
...
...
@@ -74,9 +74,11 @@ void oox_chart::set_properties(std::vector<odf_reader::_property> g)
_CP_OPT
(
bool
)
bStacked
;
_CP_OPT
(
bool
)
bPercent
;
_CP_OPT
(
int
)
iGapWidth
;
odf_reader
::
GetProperty
(
g
,
L"stacked"
,
bStacked
);
odf_reader
::
GetProperty
(
g
,
L"percentage"
,
bPercent
);
odf_reader
::
GetProperty
(
g
,
L"stacked"
,
bStacked
);
odf_reader
::
GetProperty
(
g
,
L"percentage"
,
bPercent
);
odf_reader
::
GetProperty
(
g
,
L"gap-width"
,
iGapWidth
);
if
(
(
bStacked
)
&&
(
bStacked
.
get
()))
{
...
...
@@ -87,6 +89,10 @@ void oox_chart::set_properties(std::vector<odf_reader::_property> g)
{
grouping_
=
L"percentStacked"
;
}
if
(
iGapWidth
)
{
dispBlanksAs_
=
L"gap"
;
}
//solid-type - трехмерные
}
void
oox_chart
::
oox_serialize_common
(
std
::
wostream
&
_Wostream
)
...
...
@@ -128,17 +134,15 @@ void oox_bar_chart::set_properties(std::vector<odf_reader::_property> g)
{
oox_chart
::
set_properties
(
g
);
odf_reader
::
GetProperty
(
g
,
L"vertical"
,
bVertical
);
odf_reader
::
GetProperty
(
g
,
L"connect-bars"
,
bConnectBars
);
odf_reader
::
GetProperty
(
g
,
L"vertical"
,
bVertical
);
odf_reader
::
GetProperty
(
g
,
L"connect-bars"
,
bConnectBars
);
odf_reader
::
GetProperty
(
g
,
L"gap-width"
,
iGapWidth
);
odf_reader
::
GetProperty
(
g
,
L"overlap"
,
iOverlap
);
odf_reader
::
GetProperty
(
g
,
L"gap-width"
,
iGapWidth
);
odf_reader
::
GetProperty
(
g
,
L"overlap"
,
iOverlap
);
}
void
oox_bar_chart
::
set_additional_properties
(
std
::
vector
<
odf_reader
::
_property
>
g
)
{
odf_reader
::
GetProperty
(
g
,
L"gap-width"
,
iGapWidth
);
odf_reader
::
GetProperty
(
g
,
L"overlap"
,
iOverlap
);
}
void
oox_bar_chart
::
oox_serialize
(
std
::
wostream
&
_Wostream
)
...
...
@@ -169,13 +173,13 @@ void oox_bar_chart::oox_serialize(std::wostream & _Wostream)
}
CP_XML_NODE
(
L"c:overlap"
)
//-100 to 100
{
CP_XML_ATTR
(
L"val"
,
Overlap
);
CP_XML_ATTR
(
L"val"
,
Overlap
);
}
if
(
iGapWidth
)
{
CP_XML_NODE
(
L"c:gapWidth"
)
{
CP_XML_ATTR
(
L"val"
,
iGapWidth
.
get
());
CP_XML_ATTR
(
L"val"
,
iGapWidth
.
get
());
}
}
CP_XML_NODE
(
L"c:varyColors"
)
...
...
ASCOfficeOdfFile/src/docx/oox_types_chart.h
View file @
a2d37e8a
...
...
@@ -63,9 +63,10 @@ public:
oox_chart
()
{
grouping_
=
L"standard"
;
is3D_
=
false
;
type_
=
0
;
grouping_
=
L"standard"
;
is3D_
=
false
;
type_
=
0
;
dispBlanksAs_
=
L"zero"
;
}
~
oox_chart
(){}
...
...
@@ -98,9 +99,10 @@ public:
int
type_
;
bool
is3D_
;
std
::
vector
<
int
>
axisId_
;
//axId (Axis ID) §21.2.2.9
std
::
wstring
dispBlanksAs_
;
std
::
vector
<
int
>
axisId_
;
// axId (Axis ID) §21.2.2.9
std
::
wstring
grouping_
;
// clustered | percentStacked | stacked | standard
std
::
vector
<
oox_series_ptr
>
series_
;
//ser (Bar Chart Series) §21.2.2.170
std
::
vector
<
oox_series_ptr
>
series_
;
//
ser (Bar Chart Series) §21.2.2.170
virtual
void
set_properties
(
std
::
vector
<
odf_reader
::
_property
>
g
);
virtual
void
set_additional_properties
(
std
::
vector
<
odf_reader
::
_property
>
g
){}
...
...
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
View file @
a2d37e8a
...
...
@@ -401,7 +401,7 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
std
::
vector
<
std
::
wstring
>
cell_cash
;
std
::
vector
<
std
::
wstring
>
cat_cash
;
calc_cache_series
(
domain_cell_range_adress_
,
domain_cash
);
calc_cache_series
(
domain_cell_range_adress_
,
domain_cash
);
calc_cache_series
(
series_
[
i
].
cell_range_address_
,
cell_cash
);
if
(
categories_
.
size
()
>
0
)
...
...
@@ -462,10 +462,19 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
std
::
sort
(
axises_
.
begin
(),
axises_
.
end
(),
axises_sort
());
//file_1_ (1).odp
bool
x_enabled
=
false
;
bool
y_enabled
=
false
;
bool
z_enabled
=
false
;
bool
x_enabled
=
false
;
bool
y_enabled
=
false
;
bool
z_enabled
=
false
;
bool
is3D
=
false
;
_CP_OPT
(
bool
)
boolVal
;
odf_reader
::
GetProperty
(
plot_area_
.
properties_
,
L"three-dimensional"
,
boolVal
);
if
((
boolVal
)
&&
(
*
boolVal
))
{
is3D
=
true
;
}
for
(
int
i
=
0
;
i
<
axises_
.
size
();
i
++
)
{
axis
&
a
=
axises_
[
i
];
...
...
@@ -481,6 +490,8 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
if
(
class_
==
chart_stock
&&
a
.
type_
==
3
)
a
.
type_
=
4
;
//шкала дат.
if
(
is3D
)
a
.
type_
=
1
;
// шкала категорий
x_enabled
=
true
;
}
...
...
@@ -499,7 +510,7 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
}
else
if
(
a
.
dimension_
==
L"z"
)
{
chart_context
.
set_3D_chart
(
true
)
;
is3D
=
true
;
continue
;
a
.
type_
=
2
;
z_enabled
=
true
;
...
...
@@ -507,6 +518,18 @@ void object_odf_context::oox_convert(oox::oox_chart_context & chart_context)
chart_context
.
add_axis
(
a
.
type_
,
a
);
}
if
(
is3D
)
{
if
(
!
z_enabled
)
{
chart
::
axis
a
;
a
.
type_
=
0
;
// blank
chart_context
.
add_axis
(
a
.
type_
,
a
);
}
chart_context
.
set_3D_chart
(
true
);
}
}
//----------------------------------------------------------------------------------------
...
...
ASCOfficeOdfFile/src/odf/style_chart_properties.cpp
View file @
a2d37e8a
...
...
@@ -88,8 +88,8 @@ void style_chart_properties::add_attributes( const xml::attributes_wc_ptr & Attr
_CP_OPT
(
int
)
iVal
;
//CP_APPLY_ATTR(L"chart:symbol-type",
iVal);
if (iVal)content_.push_back(_property(L"symbol-type", iVal.get()));
CP_APPLY_ATTR
(
L"chart:gap-width"
,
iVal
);
if
(
iVal
)
content_
.
push_back
(
_property
(
L"gap-width"
,
iVal
.
get
()));
//CP_APPLY_ATTR(L"chart:symbol-type",
iVal);
if (iVal)content_.push_back(_property(L"symbol-type", iVal.get()));
CP_APPLY_ATTR
(
L"chart:gap-width"
,
iVal
);
if
(
iVal
)
content_
.
push_back
(
_property
(
L"gap-width"
,
iVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:overlap"
,
iVal
);
if
(
iVal
)
content_
.
push_back
(
_property
(
L"overlap"
,
iVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:spline-order"
,
iVal
);
if
(
iVal
)
content_
.
push_back
(
_property
(
L"spline-order"
,
iVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:spline-resolution"
,
iVal
);
if
(
iVal
)
content_
.
push_back
(
_property
(
L"spline-resolution"
,
iVal
.
get
()));
...
...
@@ -100,8 +100,8 @@ void style_chart_properties::add_attributes( const xml::attributes_wc_ptr & Attr
CP_APPLY_ATTR
(
L"chart:maximum"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"maximum"
,
dVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:minimum"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"minimum"
,
dVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:origin"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"origin"
,
dVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:interval-major"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"interval-major"
,
dVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:origin"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"origin"
,
dVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:interval-major"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"interval-major"
,
dVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:error-percentage"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"error-percentage"
,
dVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:error-margin"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"error-margin"
,
dVal
.
get
()));
CP_APPLY_ATTR
(
L"chart:error-lower-limit"
,
dVal
);
if
(
dVal
)
content_
.
push_back
(
_property
(
L"error-lower-limit"
,
dVal
.
get
()));
...
...
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