글
Scintilla 라이브러리를 활용한 SPACE 코드 전용 에디터 AESPA 개발 [3일차]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
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일차]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
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일차]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
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 설치하기
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
구글링을 해보면 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 코드 계산 결과 프로파일링 데모
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
[1] 개요 SPACE 코드로 계산된 결과를 노드 다이어그램 상에 시각적으로 표시하여 계산값들의 경향 파악을 용이하게 하는 기능을 구현하였으며 이를 프로파일링 기능이라 한다. 아래 영상은 프로파일링 기능에 대한 데모 영상이다. 데모 영상 링크 [2] 기능 요약 - 노드 모델을 기반으로 프로파일링 변수를 생성 - 생성된 변수를 포함하여 코드 계산을 수행 - 계산 종료 후 계산결과를 자동으로 로딩하고 초기상태로 셋팅됨 - 탐색바를 사용하여 시간에 따른 데이터를 상세하게 분석할 수 있음 - 코드 계산 없이 기존 프로파일링 파일이 있다면 불러와서 분석 작업을 수행할 수 있음. - 변수값의 추이에 따라 노드의 해당 셀의 색깔이 변경되어 전체적인 흐름을 파악할 수 있음. - 파랑색일 수 록 작은 값이며, 빨강색일 수 록 큰 값임.
인터넷 없는 환경에서 QT 설치하기
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
처음 QT를 설치했을 시기에는 설치 중에 계정로그인을 요구하지 않았으나 어느 순간 이후 버전은 계정 로그인을 해야지만 QT를 설치할 수 있도록 정책이 바뀌었다. 이럴 경우 인터넷 사용이 불가한 PC에는 최신 버전 설치가 어렵다. 이를 해결하기 위해 아래의 절차에 따라 설치하면 된다. [1] 윈도우 에지에서 설정으로 간다. [2] "프록시" 로 검색하여 프록시 설정창을 연다. [3] 수동 프록시 설정을 선택하고 0.0.0.0 입력, 포트번호는 127번을 입력 후 저장한다. [4] QT를 설치한다. 계정로그인 절차가 사라져서 설치를 할 수 있다. [5] 설치가 완료되면 프록시 설정을 원래대로 해준다. 이상은 인터넷이 없는 환경에서 QT 설치 방법이다.
프로젝트 저장 및 불러오기, 입력 보기, 그래프 기능 개선사항 점검 동영상
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
다음 영상은 아래 사항들에 대한 점검 동영상입니다. (1) 프로젝트 파일의 저장하기 및 불러오기 (2) 최근 사용한 프로젝트들에 대한 빠르게 불러오기 (3) LAG 필터의 정상 계산 여부 확인 (4) 엑셀파일로 그래프 데이터 변환 기능 점검 (5) 각 노드에서의 SPACE 입력 보기 버튼의 정상 작동 여부 확인 (6) 노드를 클릭했을 경우 연결된 링크들의 입력 및 출력 보여주기 기능 확인 (7) 그래프의 리셋버튼으로 그래프 지우기 기능 확인 모든 점검 사항들이 정상적으로 작동하고 있습니다. 이제 다음 항목으로 진행해야겠습니다. 2023. 5. 31.
Qt Graphics에서의 좌표 체계 이해하기
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
여기서는 Qt Graphics에서의 좌표 체계에 대해 알아보기로 한다. Scene에 item들을 원하는 곳에 위치시키기 위해서는 Qt에서 사용하는 좌표 체계를 이해하고 사용할 수 있어야만 한다. Graphics View는 모두 3종류의 좌표체계를 사용하는데 다음과 같다. (1) item's coordinate system (2) scene's coordinate system (3) view's coordinate system 만약 어떤 item상에서 마우스 클릭이 발생했다면, QGraphicsSceneMouseEvent::pos() 함수로 클릭된 좌표값을 구할 수 있는데 이때의 좌표값은 item's coordinate system 의 값이다. scenePos() 및 sceneBoundingRect() 로 구한 좌표값은 scene's coordinate system을 따른다. 주의할 점은 item들은 parent-child 관계로 연결될 경우 child 들은 parent의 item's coordinate system을 따른다는 것이고 따라서 pos()함수로 계산된 좌표값은 parent의 item's coordinate system상의 값이다. 아래에서 생성된 item을 살펴 보자. 3개의 QGraphicsRectItem을 생성했으며 크기는 20x20이고 위치는 서로 다른 값을 갖는다. QGraphicsRectItem * itemA = new QGraphicsRectItem (- 100 , - 100 , 200 , 200 ); QGraphicsRectItem * itemB = new QGraphicsRectItem ( 0 , 0 , 200 , 200 ); QGraphicsRectItem * itemC = new QGraphicsRectItem ( 100 , 100 , 200 , 200 ); 위 item들의 좌표값을 그...
QGraphicsItem, QGraphicsScene 및 QGraphicsView 이해하기
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
1. 개념 이해 여기서는 QGraphicsItem, QGraphicsScene 및 QGraphicsView 에 대해 알아보자. Qt에서 제공하는 Graphic관련 중요 요소는 다음 3가지가 있다. (1) QGraphicsItem : item (2) QGraphicsScene : scene (3) QGraphicsView : view The usual workflow is to first create a couple of items, then add them to a scene, and finally set that scene on a view. 위의 3가지 요소를 활용한 일반적인 그래픽 작업 과정은 다음과 같다. (1) QGraphicsItem을 활용하여 필요한 item을 생성한다. (2) 생성된 item을 QGraphicsScene에 추가한다. (3) 마지막으로 QGraphicsScene을 QGraphicsView 에 셋팅한다. Graphic 기능을 사용하기 위해 먼저 QGraphicsItem, QGraphicsScene 및 QGraphicsView에 대해 알아보자. 아래 그림은 그래픽의 3가지 요소에 대한 관계를 이해하는데 도움이된다. 여기서 보면 Scene은 전체 그림을 담는 큰 도화지와 같고 item은 도화지 위에 그려진 여러가지 그림이다. 그리고 view는 우리가 그림을 볼때 우리의 눈이 집중해서 보고 있는 도화지의 한 부분이라고 이해할 수 있을 것이다. 따라서 item은 scene에 add하여야 하며 다 그린 scene은 view와 연결을 해주어야 실제 화면에 표시되는 것이다. 따라서, scene은 item을 위치와 item의 변형 등을 정확하게 표시해주는 역할을 수행한다. 또한 어떤 event에 대해 어떤 item들이 영향을 받는지를 알려주는 역할도 수행한다. 2. QGraphicsItem생성하고 Scene 및 View와 연결하기 Scene에 표시되는 모든 item들은 QGr...