FrontISTR 5.2.0
Large-scale structural analysis program with finit element method
Loading...
Searching...
No Matches
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
13using namespace std;
14
16
17//=============================================================================
18// Save
19//=============================================================================
20
21bool 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
44bool 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
75void 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
102CHECDataBlock *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 * CreateFSTRDataBlock(const char *header_name)
Definition: FSTRDB_util.cpp:16
CHECDataBlock * CreateHECDataBlock(const char *header_name)
Definition: HECDB_util.cpp:16
@ HECDB_VISUAL
Definition: CHECDB.h:28
virtual CHECDataBlock * CreateDataBlock(const char *header_name)
Definition: CFSTRData.cpp:102
virtual bool SaveCtrl(const char *file_name, const char *comment="")
Definition: CFSTRData.cpp:44
virtual bool SaveMesh(const char *file_name, const char *comment="")
Definition: CFSTRData.cpp:21
virtual void WriteComment(FILE *fp, const char *comment)
Definition: CFSTRData.cpp:75
virtual void Write(class CHECData *hecd)=0
std::vector< CHECDataBlock * > DB
Definition: CHECData.h:30
FILE * fp
Definition: CHECData.h:27
virtual void WriteHeader(const char *name, const char *fmt="",...)
Definition: CHECData.cpp:68
char fname[mw_fname_size]
Definition: CHECData.h:28