forked from SAP-archive/fedem-mdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FmCtrlElementBase.C
75 lines (57 loc) · 1.84 KB
/
FmCtrlElementBase.C
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
// SPDX-FileCopyrightText: 2023 SAP SE
//
// SPDX-License-Identifier: Apache-2.0
//
// This file is part of FEDEM - https://openfedem.org
////////////////////////////////////////////////////////////////////////////////
#include "vpmDB/FmCtrlElementBase.H"
#include "vpmDB/FmCtrlLine.H"
extern const char* blank[];
Fmd_DB_SOURCE_INIT(FccELEMENT_BASE, FmCtrlElementBase, FmIsRenderedBase);
FmCtrlElementBase::FmCtrlElementBase()
{
Fmd_CONSTRUCTOR_INIT(FmCtrlElementBase);
FFA_FIELD_INIT(myLeftRotatedFlag, false, "LEFT_ORIENTATED");
FFA_FIELD_DEFAULT_INIT(myPosition, "POSITION");
itsPixmap = blank;
}
FmCtrlElementBase::~FmCtrlElementBase()
{
this->disconnect();
}
void FmCtrlElementBase::changedEvent()
{
this->updateDisplayDetails();
}
bool FmCtrlElementBase::localParse(const char* keyWord, std::istream& activeStatement,
FmCtrlElementBase* obj)
{
return parentParse(keyWord, activeStatement, obj);
}
bool FmCtrlElementBase::cloneLocal(FmBase* obj, int)
{
return obj->isOfType(FmCtrlElementBase::getClassTypeID());
}
/*!
If \a single is \e true, the two nearest line segments
are updated and the others are not changed.
This is used when only one element is moved.
If \a single is \e false, then all line segments in the line are updated,
this is used when a group of elements are moved.
*/
void FmCtrlElementBase::updateLines(bool single)
{
FmCtrlLine* line = NULL;
for (int inpPort = 1; inpPort <= this->getNumInputPorts(); inpPort++)
if ((line = this->getLine(inpPort)))
{
if (single)
{
DoubleVec lengths = line->getTotLengthArray();
int numSegments = line->getNumberOfSegments();
line->setLengthArray(DoubleVec(lengths.begin(),lengths.begin()+numSegments-2));
line->setFirstUndefSegment(numSegments-1);
}
line->draw();
}
}