This repository has been archived by the owner on Mar 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
common.h
213 lines (182 loc) · 12.3 KB
/
common.h
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#ifndef COMMON_H
#define COMMON_H
#include <wx/wx.h>
#include <vector>
#define LAYER_TOP_NAME ("T")
#define LAYER_BOT_NAME ("B")
#define FIDMARD_DES_PREF ("FM")
// --- Алфавитно-цифровое сравнение двух строк
// implementation in 'utils.cpp'
bool compare_alphanum( const wxString& str1, const wxString& str2);
// ---- common types
struct Component
{
/// исходные данные
wxString designator; /**< Обозначение компонента */
wxString cad_name; /**< Имя компонента в PCAD/Altium */
wxString cad_pattern; /**< Имя посадочного места в PCAD/Altium */
wxString cad_value; /**< Номинал компонента, или его название */
wxString full_name; /**< Идентификатор, расчитанный на базе имён и номинала */
wxString layer; /**< Слой, в котором находится компонент */
double cad_location_x; /**< координата реферной точки компонента в PCAD/Altium */
double cad_location_y; /**< координата реферной точки компонента в PCAD/Altium */
double cad_angle; /**< угол поворота компонента в PCAD/Altium */
/// рассчитанные значения
bool enabled; /**< Устанавливается ли компонент в PP-050/DD-500 */
wxString strip_value; /**< Номинал компонента, или его название после удаления маркера DNP */
wxString pattern; /**< Имя посадочного места в базе конвертора */
wxString pnp_name; /**< Имя компонента в PP-050/DD-500 */
wxString pnp_package; /**< Имя корпуса в PP-050 */
wxString pnp_footprint; /**< Имя футпринта в DD-500 */
double pnp_location_x; /**< координата центра компонента в PP-050/DD-500 */
double pnp_location_y; /**< координата центра компонента в PP-050/DD-500 */
double pnp_angle; /**< угол поворота компонента в PP-050/DD-500 */
bool pnp_enabled; /**< Устанавливается ли компонент в PP-050/DD-500 */
int pnp_subpcb_index; /**< К какому куску платы относится */
int index; /**< индекс компонента, на него ссылется FidMark */
Component()
: cad_location_x(0), cad_location_y(0), cad_angle(0), enabled(true),
pnp_location_x(0), pnp_location_y(0), pnp_angle(0), pnp_enabled(true),
pnp_subpcb_index(0), index(-1)
{
}
/// сортировка по умолчанию по обозначению компонента (designator)
//bool operator < (const Component& comp) const { return designator < comp.designator; }
bool operator < (const Component& comp) const { return compare_alphanum(designator, comp.designator); }
/// набор сортировок по остальным полям
static bool ByCadName(const Component& arg1, const Component& arg2) { return arg1.cad_name < arg2.cad_name; }
static bool ByCadPattern(const Component& arg1, const Component& arg2) { return arg1.cad_pattern < arg2.cad_pattern; }
static bool ByCadValue(const Component& arg1, const Component& arg2) { return arg1.cad_value < arg2.cad_value; }
static bool ByFullName(const Component& arg1, const Component& arg2) { return arg1.cad_value < arg2.cad_value; }
static bool ByLayer(const Component& arg1, const Component& arg2) { return arg1.cad_value < arg2.cad_value; }
static bool ByCadLocationX(const Component& arg1, const Component& arg2) { return arg1.cad_location_x < arg2.cad_location_x; }
static bool ByCadLocationY(const Component& arg1, const Component& arg2) { return arg1.cad_location_y < arg2.cad_location_y; }
static bool ByCadAngle(const Component& arg1, const Component& arg2) { return arg1.cad_angle < arg2.cad_angle; }
static bool ByEnabled(const Component& arg1, const Component& arg2) { return arg1.enabled < arg2.enabled; }
static bool ByStripValue(const Component& arg1, const Component& arg2) { return arg1.strip_value < arg2.strip_value; }
static bool ByPattern(const Component& arg1, const Component& arg2) { return arg1.pattern < arg2.pattern; }
static bool ByPnpName(const Component& arg1, const Component& arg2) { return arg1.pnp_name < arg2.pnp_name; }
static bool ByPnpPackage(const Component& arg1, const Component& arg2) { return arg1.pnp_package < arg2.pnp_package; }
static bool ByPnpFootprint(const Component& arg1, const Component& arg2) { return arg1.pnp_footprint < arg2.pnp_footprint; }
static bool ByPnpLocationX(const Component& arg1, const Component& arg2) { return arg1.pnp_location_x < arg2.pnp_location_x; }
static bool ByPnpLocationY(const Component& arg1, const Component& arg2) { return arg1.pnp_location_y < arg2.pnp_location_y; }
static bool ByPnpAngle(const Component& arg1, const Component& arg2) { return arg1.pnp_angle < arg2.pnp_angle; }
static bool ByPnpEnabled(const Component& arg1, const Component& arg2) { return arg1.pnp_enabled < arg2.pnp_enabled; }
static bool ByPnpSubpcbIndex(const Component& arg1, const Component& arg2) { return arg1.pnp_subpcb_index < arg2.pnp_subpcb_index; }
};
struct ComponentType
{
wxString name; /**< Идентификатор, расчитанный на базе имён и номинала в PCAD/Altium */
wxString pattern; /**< Имя посадочного места в базе конвертора */
wxString pnp_name; /**< Имя компонента в PP-050/DD-500 */
bool override_name; /**< Не генерить имя из шаблона и названия */
wxString value; /**< Номинальное значение для резисторов/кондёров/etc. или просто название компонента */
int comp_count; /**< Количество компонентов этого типа на плате */
bool enabled; /**< Устанавливается ли компонент в PP-050/DD-500 */
bool is_new; /**< Был ли этот компонент в базе конвертора */
ComponentType()
: override_name(false), comp_count(1), enabled(true), is_new(true)
{
}
/// сортировка по умолчанию по name
bool operator < (const ComponentType& type) const { return name < type.name; }
/// набор сортировок по остальным полям
static bool ByPattern(const ComponentType& arg1, const ComponentType& arg2) { return arg1.pattern < arg2.pattern; }
static bool ByPnpName(const ComponentType& arg1, const ComponentType& arg2) { return arg1.pnp_name < arg2.pnp_name; }
static bool ByOverrideName(const ComponentType& arg1, const ComponentType& arg2) { return arg1.override_name < arg2.override_name; }
static bool ByValue(const ComponentType& arg1, const ComponentType& arg2) { return arg1.value < arg2.value; }
static bool ByCompCount(const ComponentType& arg1, const ComponentType& arg2) { return arg1.comp_count < arg2.comp_count; }
static bool ByEnabled(const ComponentType& arg1, const ComponentType& arg2) { return arg1.enabled < arg2.enabled; }
static bool ByIsNew(const ComponentType& arg1, const ComponentType& arg2) { return arg1.is_new < arg2.is_new; }
};
struct Pattern
{
wxString pattern; /**< Имя посадочного места в базе конвертора */
wxString pnp_package; /**< Имя корпуса в PP-050 */
bool add_pack_to_name; /**< Добавлять имя корпуса к имени компонента */
wxString pnp_footprint; /**< Имя футпринта в DD-500 */
double offset_x; /**< смещение центра компонента от реферной точки */
double offset_y; /**< смещение центра компонента от реферной точки */
double angle; /**< угол поворота компонента в базе PCAD/Altium относительно PP-050/DD-500 */
int comp_count; /**< Количество компонентов с таким корпусом на плате */
bool enabled; /**< Устанавливается ли компонент с таким корпусом в PP-050/DD-500 */
bool is_new; /**< Был ли этот корпус в базе конвертора */
Pattern()
: add_pack_to_name(false),
offset_x(0), offset_y(0), angle(0),
comp_count(1), enabled(true), is_new(true)
{
}
/// сортировка по умолчанию по pattern
bool operator < (const Pattern& type) const { return pattern < type.pattern; }
/// набор сортировок по остальным полям
static bool ByPattern(const Pattern& arg1, const Pattern& arg2) { return arg1.pattern < arg2.pattern; }
static bool ByPnpPackage(const Pattern& arg1, const Pattern& arg2) { return arg1.pnp_package < arg2.pnp_package; }
static bool ByAddPackToName(const Pattern& arg1, const Pattern& arg2) { return arg1.add_pack_to_name < arg2.add_pack_to_name; }
static bool ByPnpFootprint(const Pattern& arg1, const Pattern& arg2) { return arg1.pnp_footprint < arg2.pnp_footprint; }
static bool ByOffsetX(const Pattern& arg1, const Pattern& arg2) { return arg1.offset_x < arg2.offset_x; }
static bool ByOffsetY(const Pattern& arg1, const Pattern& arg2) { return arg1.offset_y < arg2.offset_y; }
static bool ByAngle(const Pattern& arg1, const Pattern& arg2) { return arg1.angle < arg2.angle; }
static bool ByCompCount(const Pattern& arg1, const Pattern& arg2) { return arg1.comp_count < arg2.comp_count; }
static bool ByEnabled(const Pattern& arg1, const Pattern& arg2) { return arg1.enabled < arg2.enabled; }
static bool ByIsNew(const Pattern& arg1, const Pattern& arg2) { return arg1.is_new < arg2.is_new; }
};
enum FidMarkUse
{
FID_MARK_USE_UNKNOWN = 0,
FID_MARK_USE_IGNORE,
FID_MARK_USE_FM1,
FID_MARK_USE_FM2,
FID_MARK_USE_FM3,
FID_MARK_USE_LOCAL
};
struct FidMark
{
wxString designator;
int component_index; /**< == ComponentDescr::index */
int usage_type;
int usage_as_global;
// wxArrayString local_for_comps;
FidMark()
: component_index(0), usage_type(FID_MARK_USE_UNKNOWN), usage_as_global(FID_MARK_USE_UNKNOWN)
{
}
/// сортировка по умолчанию по обозначению компонента (designator)
bool operator < (const FidMark& type) const { return designator < type.designator; }
/// набор сортировок по остальным полям
static bool ByComponentIndex(const FidMark& arg1, const FidMark& arg2) { return arg1.component_index < arg2.component_index; }
static bool ByUsageType(const FidMark& arg1, const FidMark& arg2) { return arg1.usage_type < arg2.usage_type; }
static bool ByUsageAsGlobal(const FidMark& arg1, const FidMark& arg2) { return arg1.usage_as_global < arg2.usage_as_global; }
};
struct Subpcb
{
wxString subpcb_name; /**< Имя платы */
double ref_point1_x; /**< Координаты угла платы */
double ref_point1_y; /**< Координаты угла платы */
double ref_point2_x; /**< Координаты угла платы */
double ref_point2_y; /**< Координаты угла платы */
double size_x; /**< размер платы */
double size_y; /**< размер платы */
double offset_x; /**< смещение платы */
double offset_y; /**< смещение платы */
bool enabled; /**< не собирать эту плату */
Subpcb()
: ref_point1_x(0), ref_point1_y(0), ref_point2_x(0), ref_point2_y(0),
size_x(0), size_y(0), offset_x(0), offset_y(0),
enabled(true)
{
}
};
typedef std::vector<Component> ComponentVector;
typedef std::vector<ComponentType> ComponentTypeVector;
typedef std::vector<Pattern> PatternVector;
typedef std::vector<FidMark> FidMarkVector;
typedef std::vector<Subpcb> SubpcbVector;
typedef std::vector<Component>::iterator ComponentIt;
typedef std::vector<ComponentType>::iterator ComponentTypeIt;
typedef std::vector<Pattern>::iterator PatternIt;
typedef std::vector<FidMark>::iterator FidMarkIt;
typedef std::vector<Subpcb>::iterator SubpcbIt;
extern wxArrayString G_array_on_subpcb;
extern wxArrayString G_array_global;
#endif // COMMON_H