Scintilla 라이브러리를 활용한 SPACE 코드 전용 에디터 AESPA 개발 [3일차]

1. 주요 기능 개발 1-1. 검색 기능 에디터의 기본 기능 중 하나인 검색 기능이 아래와 같이 구현되었다.       if ( _searchingWord . isEmpty ()) return ; // 기존에 마커가 있으면 모두 지운다. textEdit -> markerDeleteAll (); // lineOfSearchedWords . clear (); indexOfSearchedWords . clear (); searchedWords . clear (); //=================== // 현재 커서 위치를 저장 //=================== int cur_line ; long cur_pos = getCurrentPosition (); int cur_index = 0 ; textEdit -> lineIndexFromPosition ( cur_pos , & cur_line , & cur_index ); QString searchWord = _searchingWord ; //====================== // 파일 시작 부터 검색한다. //====================== textEdit -> setCursorPosition ( 0 , 0 ); mFindFirst = textEdit -> findFirst ( _searchingWord , false , _caseSensitive , _wholeWordMatchOnly , false ); // // int maxNumberOfFinds = 200 ; int count = 0 ; if ( mFindFirst ) { addLineIndexOfSearch...

Scintilla 라이브러리를 활용한 SPACE 코드 전용 에디터 AESPA 개발 [2일차]

이미지
1. 메인 클래스 작성 AESPA의 메인 클래스를 아래와 같이 작성하였다. 클래스 이름은 SIDE이며 본 클래스에서 모든 클래스 및 함수들이 제어될 예정이다. class SIDE : public QMainWindow { Q_OBJECT public : SIDE ( QString fileName = "" , QWidget * parent = nullptr ); ~ SIDE (); protected : void closeEvent ( QCloseEvent * event ); virtual void dragEnterEvent ( QDragEnterEvent * event ); virtual void dropEvent ( QDropEvent * event ); private slots : void newFile (); void open (); bool save (); bool saveAs (); void refresh (); void exportExcel (); void setOptions (); void quit (); void executeCode (); void copy (); void cut (); void paste (); void find (); void findAndReplace (); void toggleFoldAll (); void unitConverter (); void steamTable (); void menuSearch_resultsTriggered ( QAction * act ); void spaceManual (); void manual (); void about (); void setFolderExisted ( bool b ); void op...

Scintilla 라이브러리를 활용한 SPACE 코드 전용 에디터 AESPA 개발 [1일차]

1. 개요 및 목적 Scintilla는 텍스트에디터 전용으로 나온 오픈소스 라이브러리이다. VS code등이 이를 활용한 것으로 보인다. 일반 에디터를 사용하여 전산코드 입력을 편집하는 것이 일반적이나 현업에서 이를 사용하여 임의의 해석을 수행하기 위해서는 아래와 같은 귀찮은 단계들을 거쳐야 한다. [1] 텍스트 에디터에서 전산코드 입력 편집 [2] 저장 및 닫기 [3] 전산코드 실행을 위한 환경 설정 (추후 재계산에 필요한 배치파일 만들기, 입력파일이름 변경 등) [4] 전산코드를 사용하여 해석 수행 [5] 해석결과의 그래프 작성을 위한 엑셀, 오리진 등의 외부프로그램으로의 전환 [6] 외부프로그램에서 해석결과 파일 불러오기 작업 수행 이러한 작업들은 생각보다 개발시간을 많이 사용하게 된다. 이를 자동화하여 개발자의 부담을 덜고 사소한 실수들을 최소화 할 수 있는 코드 전용 에디터가 있다면 매우 효율적일 것이다. 따라서 여기서는 Scintilla 라이브러리를 근간으로 SPACE코드 전용 에디터를 개발하기 위한 프로젝트를 수행한다. 프록젝트 이름은 AESPA (Advanced Editor for SPACE Problem Analysis) 이다. 2. Scintilla 라이브러리 작업 2-1. Scintilla 라이브러리 컴파일 및 Qt와 링크하기 Scintilla라이브러리를 Qt에서 활용하기 위하여  scintilla 홈페이지 에서 소스를 다운받아 이를 MingW로 컴파일을 수행하여 Qt를 위한 라이브러리를 개발하였다. 생성된 라이브러리는 Qt와 링크되었고 이를 Qt 프로젝트 파일에서 다음과 같이 해주면 된다. CONFIG += qscintilla2 2-2. Scintilla 서브 클래싱 향후 개발 시 편의성 및 확장성을 고려하여 Scintilla 클래스를 상속받은 MyScintilla 클래스를 아래와 같이 만들었다. # include < QObject > # include < QUrl > # include ...

Qt5 + MinGW 7.3.0 64-bit + VTK-8.2.0 설치하기

이미지
구글링을 해보면 VS2017을 사용하여 Qt에 VTK를 설치하는 방법은 많이 찾을 수 있으나 mingw를 사용하여 설치하는 방법은 찾기가 쉽지 않아 이를 아래와 같이 정리해본다. 1. 설치 환경 - Windows 10 -  Qt 5.14.2 -  MinGW 7.3.0 64-bit - VTK-8.2.0 2. 단계 별 설치 방법 [1] VTK를  여기 에서 소스를 다운 받아 적당한 위치에 압축을 풀어준다. 본인의 경우 "E:\VTK-8.2.0" 에 풀어주었다. [2] CMake 설정에 필요한 소스 폴더, 빌드 폴더, 설치 폴더를 만들어 준다. 여기서는 아래와 같이 만들었다. ......[프로젝트 일시 중단 결정].... MinGW 를 사용하여 컴파일 및 설치를 Qt에 하는 것인데 컴파일에서 지속적인 오류가 발생하였음. 이를 해결하기에 시간 상 역부족이라 다른 개발자가 성공하기를 기원하며 프로젝트를 일시 중단 함.

SPACE 코드 제어 계통도를 그림 파일로 변환하는 예시

이미지
목차 1. SPACE코드 제어계통 개요 2. SPACE코드 제어계통 그림 예시 1. SPACE코드 제어계통 개요 사용자가 개발한 제어계통을 아래한글이나 워드에서 사용할 수 있도록 그림파일로 저장하는 기능이다. 현재 png, jpg, bmp 형태로 저장할 수 있으며 해상도를 유지할 수 있도록 svg 형태로도 저장할 수 있다. 아래 예시는 png 형태로 저장한 것이다. 2. SPACE코드 제어계통 그림 예시

SPACE 코드 계산 결과 프로파일링 데모

[1] 개요 SPACE 코드로 계산된 결과를 노드 다이어그램 상에 시각적으로 표시하여 계산값들의 경향 파악을 용이하게 하는 기능을 구현하였으며 이를 프로파일링 기능이라 한다. 아래 영상은 프로파일링 기능에 대한 데모 영상이다. 데모 영상 링크 [2] 기능 요약 - 노드 모델을 기반으로 프로파일링 변수를 생성 - 생성된 변수를 포함하여 코드 계산을 수행 - 계산 종료 후 계산결과를 자동으로 로딩하고 초기상태로 셋팅됨 - 탐색바를 사용하여 시간에 따른 데이터를 상세하게 분석할 수 있음 - 코드 계산 없이 기존 프로파일링 파일이 있다면 불러와서 분석 작업을 수행할 수 있음. - 변수값의 추이에 따라 노드의 해당 셀의 색깔이 변경되어 전체적인 흐름을 파악할 수 있음. - 파랑색일 수 록 작은  값이며, 빨강색일 수 록 큰 값임.