File size: 4,435 Bytes
985c397
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// SPDX-License-Identifier: LGPL-2.1-or-later

/***************************************************************************

 *   Copyright (c) 2019 Abdullah Tahiri <abdullah.tahiri.yo@gmail.com>     *

 *                                                                         *

 *   This file is part of the FreeCAD CAx development system.              *

 *                                                                         *

 *   This library is free software; you can redistribute it and/or         *

 *   modify it under the terms of the GNU Library General Public           *

 *   License as published by the Free Software Foundation; either          *

 *   version 2 of the License, or (at your option) any later version.      *

 *                                                                         *

 *   This library  is distributed in the hope that it will be useful,      *

 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *

 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *

 *   GNU Library General Public License for more details.                  *

 *                                                                         *

 *   You should have received a copy of the GNU Library General Public     *

 *   License along with this library; see the file COPYING.LIB. If not,    *

 *   write to the Free Software Foundation, Inc., 59 Temple Place,         *

 *   Suite 330, Boston, MA  02111-1307, USA                                *

 *                                                                         *

 ***************************************************************************/


#include <Base/Reader.h>
#include <Base/Writer.h>

#include "ExternalGeometryExtension.h"
#include "ExternalGeometryExtensionPy.h"


using namespace Sketcher;

//---------- Geometry Extension

TYPESYSTEM_SOURCE(Sketcher::ExternalGeometryExtension, Part::GeometryMigrationPersistenceExtension)

void ExternalGeometryExtension::copyAttributes(Part::GeometryExtension* cpy) const

{
    Part::GeometryPersistenceExtension::copyAttributes(cpy);

    static_cast<ExternalGeometryExtension*>(cpy)->Ref = this->Ref;
    static_cast<ExternalGeometryExtension*>(cpy)->RefIndex = this->RefIndex;
    static_cast<ExternalGeometryExtension*>(cpy)->Flags = this->Flags;
}

void ExternalGeometryExtension::restoreAttributes(Base::XMLReader& reader)

{
    Part::GeometryPersistenceExtension::restoreAttributes(reader);

    Ref = reader.getAttribute<const char*>("Ref", "");
    RefIndex = reader.getAttribute<long>("RefIndex", -1);
    Flags = FlagType(reader.getAttribute<unsigned long>("Flags", 0));
}

void ExternalGeometryExtension::saveAttributes(Base::Writer& writer) const

{
    Part::GeometryPersistenceExtension::saveAttributes(writer);
    writer.Stream() << "\" Ref=\"" << Base::Persistence::encodeAttribute(Ref);
    writer.Stream() << "\" Flags=\"" << Flags.to_ulong();
    if (RefIndex >= 0) {
        writer.Stream() << "\" RefIndex=\"" << RefIndex;
    }
}

void ExternalGeometryExtension::preSave(Base::Writer& writer) const

{
    if (Ref.size()) {
        writer.Stream() << " ref=\"" << Base::Persistence::encodeAttribute(Ref) << "\"";
    }
    if (RefIndex >= 0) {
        writer.Stream() << " refIndex=\"" << RefIndex << "\"";
    }
    if (Flags.any()) {
        writer.Stream() << " flags=\"" << Flags.to_ulong() << "\"";
    }
}

std::unique_ptr<Part::GeometryExtension> ExternalGeometryExtension::copy() const

{
    auto cpy = std::make_unique<ExternalGeometryExtension>();

    copyAttributes(cpy.get());

    return cpy;
}

PyObject* ExternalGeometryExtension::getPyObject()

{
    return new ExternalGeometryExtensionPy(new ExternalGeometryExtension(*this));
}

bool ExternalGeometryExtension::getFlagsFromName(std::string str, ExternalGeometryExtension::Flag& flag)

{
    auto pos = std::find_if(
        ExternalGeometryExtension::flag2str.begin(),
        ExternalGeometryExtension::flag2str.end(),
        [str](const char* val) { return strcmp(val, str.c_str()) == 0; }
    );

    if (pos != ExternalGeometryExtension::flag2str.end()) {
        int index = std::distance(ExternalGeometryExtension::flag2str.begin(), pos);

        flag = static_cast<ExternalGeometryExtension::Flag>(index);
        return true;
    }

    return false;
}