FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
CFSTRData.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  CFSTRData Ver.1.0
7 */
8 
9 #include <vector>
10 #include "CFSTRData.h"
11 #include "CFSTRDB.h"
12 
13 using namespace std;
14 
16 
17 //=============================================================================
18 // Save
19 //=============================================================================
20 
21 bool CFSTRData::SaveMesh(const char *file_name, const char *comment) {
22  strcpy(fname, file_name);
23  fp = fopen(fname, "w");
24 
25  if (!fp) return false;
26 
27  WriteComment(fp, comment);
28  vector<CHECDataBlock *>::iterator iter;
29 
30  for (iter = DB.begin(); iter != DB.end(); iter++) {
31  if (!(*iter)->IsMesh()) continue;
32 
33  if ((*iter)->data_type == HECDB_VISUAL) continue;
34 
35  (*iter)->Write(this);
36  }
37 
38  WriteHeader("!END");
39  fclose(fp);
40  fp = 0;
41  return true;
42 }
43 
44 bool CFSTRData::SaveCtrl(const char *file_name, const char *comment) {
45  strcpy(fname, file_name);
46  fp = fopen(fname, "w");
47 
48  if (!fp) return false;
49 
50  WriteComment(fp, comment);
51  CHECDataBlock *vis = 0;
52  vector<CHECDataBlock *>::iterator iter;
53 
54  for (iter = DB.begin(); iter != DB.end(); iter++) {
55  if ((*iter)->data_type == HECDB_VISUAL) {
56  vis = *iter;
57  continue;
58  }
59 
60  if ((*iter)->IsMesh()) continue;
61 
62  (*iter)->Write(this);
63  }
64 
65  if (vis) {
66  vis->Write(this);
67  }
68 
69  WriteHeader("!END");
70  fclose(fp);
71  fp = 0;
72  return true;
73 }
74 
75 void CFSTRData::WriteComment(FILE *fp, const char *comment) {
76  int n = strlen(comment);
77 
78  if (n == 0) return;
79 
80  char *buff = new char[n + 1];
81  strcpy(buff, comment);
82  char *p = strtok(buff, "\r\n");
83 
84  while (p) {
85  if (*p == '#') {
86  fprintf(fp, "%s\n", p);
87 
88  } else {
89  fprintf(fp, "#%s\n", p);
90  }
91 
92  p = strtok(0, "\r\n");
93  }
94 
95  delete[] buff;
96 }
97 
98 //=============================================================================
99 // Load
100 //=============================================================================
101 
102 CHECDataBlock *CFSTRData::CreateDataBlock(const char *header_name) {
103  CHECDataBlock *block = CreateHECDataBlock(header_name);
104 
105  if (block) return block;
106 
107  return CreateFSTRDataBlock(header_name);
108 }
CHECDataBlock
Definition: CHECDataBlock.h:17
CreateHECDataBlock
CHECDataBlock * CreateHECDataBlock(const char *header_name)
Definition: HECDB_util.cpp:16
CFSTRData::SaveMesh
virtual bool SaveMesh(const char *file_name, const char *comment="")
Definition: CFSTRData.cpp:21
CFSTRData::SaveCtrl
virtual bool SaveCtrl(const char *file_name, const char *comment="")
Definition: CFSTRData.cpp:44
CFSTRDB.h
CFSTRData::CFSTRData
CFSTRData()
Definition: CFSTRData.cpp:15
HECDB_VISUAL
@ HECDB_VISUAL
Definition: CHECDB.h:31
CFSTRData.h
CFSTRData::CreateDataBlock
virtual CHECDataBlock * CreateDataBlock(const char *header_name)
Definition: CFSTRData.cpp:102
CFSTRData::WriteComment
virtual void WriteComment(FILE *fp, const char *comment)
Definition: CFSTRData.cpp:75
CreateFSTRDataBlock
CHECDataBlock * CreateFSTRDataBlock(const char *header_name)
Definition: FSTRDB_util.cpp:16
CHECData::DB
std::vector< CHECDataBlock * > DB
Definition: CHECData.h:30
CHECData::WriteHeader
virtual void WriteHeader(const char *name, const char *fmt="",...)
Definition: CHECData.cpp:68
CHECData::fname
char fname[mw_fname_size]
Definition: CHECData.h:28
CHECData
Definition: CHECData.h:25
CHECData::fp
FILE * fp
Definition: CHECData.h:27
CHECDataBlock::Write
virtual void Write(class CHECData *hecd)=0