FrontISTR
5.7.0
Large-scale structural analysis program with finit element method
CHECDB_Node.cpp
Go to the documentation of this file.
1
/*****************************************************************************
2
* Copyright (c) 2019 FrontISTR Commons
3
* This software is released under the MIT License, see LICENSE.txt
4
*****************************************************************************/
5
/*
6
CHECDB_Node Ver.1.0
7
*/
8
9
#include "
CHECDB.h
"
10
#include "
CHECData.h
"
11
12
using namespace
std;
13
14
CHECDB_Node::CHECDB_Node
() :
CHECDataBlock
(
HECDB_NODE
), NodeList() {}
15
16
CHECDB_Node::~CHECDB_Node
() {
Clear
(); }
17
18
void
CHECDB_Node::Clear
() {
NodeList
.clear(); }
19
20
void
CHECDB_Node::Write
(
CHECData
*hecd) {
21
if
(
NodeList
.size() == 0)
return
;
22
23
hecd->
WriteHeader
(
"!NODE"
);
24
set<CNodeItem>::iterator iter;
25
26
for
(iter =
NodeList
.begin(); iter !=
NodeList
.end(); iter++) {
27
hecd->
WriteData
(
"IFFF"
, iter->ID, iter->x, iter->y, iter->z);
28
}
29
}
30
31
CHECDB_Node::CNodeItem
*
CHECDB_Node::GetNode
(
int
id
) {
32
std::set<CNodeItem>::iterator iter;
33
34
for
(iter =
NodeList
.begin(); iter !=
NodeList
.end(); iter++) {
35
if
(iter->ID ==
id
) {
36
return
(
CNodeItem
*)&(*iter);
37
}
38
}
39
40
return
0;
41
/*
42
iter = find( NodeList.begin(), NodeList.end(), CNodeItem(id));
43
if( iter == NodeList.end()) return 0;
44
return &(*iter);
45
*/
46
}
47
48
bool
CHECDB_Node::Read
(
CHECData
*hecd,
char
*header_line) {
49
CNodeItem
item;
50
char
line[256];
51
52
while
(hecd->
ReadLine
(line)) {
53
if
(line[0] ==
'!'
) {
54
hecd->
PushReadLine
(line);
55
break
;
56
}
57
58
char
*token = strtok(line,
",\r\n"
);
59
60
if
(!token)
return
false
;
61
62
if
(sscanf(token,
"%d"
, &item.
ID
) != 1)
return
false
;
63
64
// x
65
token = strtok(0,
",\r\n"
);
66
67
if
(!token)
return
false
;
68
69
if
(sscanf(token,
"%lf"
, &item.
x
) != 1)
return
false
;
70
71
// y
72
token = strtok(0,
",\r\n"
);
73
74
if
(!token)
return
false
;
75
76
if
(sscanf(token,
"%lf"
, &item.
y
) != 1)
return
false
;
77
78
// z
79
item.
z
= 0;
80
token = strtok(0,
",\r\n"
);
81
82
if
(token) {
83
if
(sscanf(token,
"%lf"
, &item.
z
) != 1)
return
false
;
84
}
85
86
NodeList
.insert(item);
87
}
88
89
return
true
;
90
}
CHECDataBlock
Definition:
CHECDataBlock.h:17
CHECData.h
CHECDB_Node::GetNode
CNodeItem * GetNode(int id)
Definition:
CHECDB_Node.cpp:31
CHECData::PushReadLine
virtual void PushReadLine(const char *s)
Definition:
CHECData.cpp:328
CHECData::ReadLine
virtual bool ReadLine(char *s, int size=256)
Definition:
CHECData.cpp:307
CHECDB_Node::Write
virtual void Write(class CHECData *hecd)
Definition:
CHECDB_Node.cpp:20
CHECData::WriteData
virtual void WriteData(const char *fmt,...)
Definition:
CHECData.cpp:162
CHECDB_Node::CNodeItem::y
double y
Definition:
CHECDB.h:113
CHECDB.h
CHECDB_Node::~CHECDB_Node
virtual ~CHECDB_Node()
Definition:
CHECDB_Node.cpp:16
HECDB_NODE
@ HECDB_NODE
Definition:
CHECDB.h:22
CHECDB_Node::CHECDB_Node
CHECDB_Node()
Definition:
CHECDB_Node.cpp:14
CHECData::WriteHeader
virtual void WriteHeader(const char *name, const char *fmt="",...)
Definition:
CHECData.cpp:68
CHECDB_Node::CNodeItem
Definition:
CHECDB.h:110
CHECDB_Node::CNodeItem::x
double x
Definition:
CHECDB.h:113
CHECData
Definition:
CHECData.h:25
checdb_id_class::ID
int ID
Definition:
CHECDB.h:33
CHECDB_Node::NodeList
std::set< CNodeItem > NodeList
Definition:
CHECDB.h:117
CHECDB_Node::CNodeItem::z
double z
Definition:
CHECDB.h:113
CHECDB_Node::Clear
virtual void Clear()
Definition:
CHECDB_Node.cpp:18
CHECDB_Node::Read
virtual bool Read(class CHECData *hecd, char *header_line)
Definition:
CHECDB_Node.cpp:48
fistr1
tools
neu2fstr
HECD
CHECDB_Node.cpp
Generated by
1.8.17