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 
15 
17 
18 void CHECDB_Node::Clear() { NodeList.clear(); }
19 
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 
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