diff --git a/Code/01_DoSA-3D/DoSA-3D/FormMain.cs b/Code/01_DoSA-3D/DoSA-3D/FormMain.cs
index e726529..e44b9a0 100644
--- a/Code/01_DoSA-3D/DoSA-3D/FormMain.cs
+++ b/Code/01_DoSA-3D/DoSA-3D/FormMain.cs
@@ -868,6 +868,7 @@ private void ribbonButtonNew_Click(object sender, EventArgs e)
private void ribbonButtonOpen_Click(object sender, EventArgs e)
{
+
if (m_design.m_bChanged == true)
{
if (DialogResult.Yes == CNotice.noticeWarningYesNoID("DYWT", "W"))
@@ -879,11 +880,11 @@ private void ribbonButtonOpen_Click(object sender, EventArgs e)
OpenFileDialog openFileDialog = new OpenFileDialog();
// 파일 열기창 설정
- openFileDialog.Title = "Open a Design File";
+ openFileDialog.Title = "Open a DoSA-3D File";
// 디자인 파일을 열 때 디렉토리는 프로그램 작업 디렉토리로 하고 있다.
openFileDialog.InitialDirectory = CSettingData.m_strCurrentWorkingDirPath;
openFileDialog.FileName = null;
- openFileDialog.Filter = "Toolkit Files (*.dsa)|*.dsa|All files (*.*)|*.*";
+ openFileDialog.Filter = "DoSA-3D Files (*.dsa)|*.dsa|All files (*.*)|*.*";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
@@ -891,19 +892,76 @@ private void ribbonButtonOpen_Click(object sender, EventArgs e)
if (result == DialogResult.OK)
{
+ string strDesignFileFullName = openFileDialog.FileName;
+
+ string strDesignName = Path.GetFileNameWithoutExtension(strDesignFileFullName);
+ string strDesignDirectory = Path.GetDirectoryName(strDesignFileFullName);
+
+ if (false == isShapeDirectoryOK(strDesignDirectory, strDesignName))
+ {
+ if (CSettingData.m_emLanguage == EMLanguage.Korean)
+ CNotice.noticeWarning("DoSA-3D 의 Shape 디렉토리에 문제가 있습니다.");
+ else
+ CNotice.noticeWarning("There is a problem with DoSA-3D's Shape directory.");
+
+ return;
+ }
+
+ string[] arrayString = strDesignDirectory.Split(Path.DirectorySeparatorChar);
+
+ // 디자인명과 디자인파일이 포함된 디렉토리명이 일치하는지 확인한다.
+ if(strDesignName != arrayString[arrayString.Length - 1])
+ {
+ if (CSettingData.m_emLanguage == EMLanguage.Korean)
+ result = CNotice.noticeWarningYesNo("DoSA-3D 파일의 디렉토리 구조에 문제가 있습니다.\n디렉토리 구조를 자동 생성 하겠습니까?");
+ else
+ result = CNotice.noticeWarningYesNo("There is a problem with the directory structure of the DoSA-3D file.\nDo you want to automatically create the directory structure?");
+
+
+ if (result == DialogResult.Yes)
+ {
+ string strNewDesignFileFullName = Path.Combine(strDesignDirectory, strDesignName, strDesignName + ".dsa");
+
+ if (true == m_manageFile.isExistDirectory(Path.Combine(strDesignDirectory, strDesignName)))
+ {
+ if (CSettingData.m_emLanguage == EMLanguage.Korean)
+ CNotice.noticeWarning("디자인 명의 디렉토리가 이미 존재합니다.");
+ else
+ CNotice.noticeWarning("A directory named design already exists.");
+
+ return;
+ }
+
+ if (false == m_manageFile.createDirectory(Path.Combine(strDesignDirectory, strDesignName)))
+ return;
+
+ m_manageFile.copyFile(strDesignFileFullName, strNewDesignFileFullName);
+ m_manageFile.deleteFile(strDesignFileFullName);
+
+ m_manageFile.copyDirectory(Path.Combine(strDesignDirectory, "Shape"), Path.Combine(Path.Combine(strDesignDirectory, strDesignName, "Shape")));
+ m_manageFile.deleteDirectory(Path.Combine(strDesignDirectory, "Shape"));
+
+ // 수정된 디렉토리로 Design 파일의 풀 패스를 변경한다.
+ strDesignFileFullName = strNewDesignFileFullName;
+ }
+ else
+ return;
+
+ }
+
// 기존 디자인 데이터를 모두 삭제한다.
closeDesign();
- string strActuatorDesignFileFullName = openFileDialog.FileName;
- loadDesignFile(strActuatorDesignFileFullName);
+ if(false == loadDesignFile(strDesignFileFullName))
+ return;
// 디자인 파일이 생성될 때의 디자인 작업 디렉토리는 프로그램 기본 디렉토리 강제 설정하고 있다.
// 만약 디렉토리를 옮긴 디자인 디렉토리를 오픈 할 경우라면
// 이전 다지인 작업 디렉토리를 그대로 사용하면 디렉토리 문제가 발생하여 실행이 불가능하게 된다.
// 이를 해결하기 위해
// 작업파일을 Open 할 때는 파일을 오픈하는 위치로 작업파일의 디렉토리를 다시 설정하고 있다.
- m_design.m_strDesignDirPath = Path.GetDirectoryName(strActuatorDesignFileFullName);
+ m_design.m_strDesignDirPath = Path.GetDirectoryName(strDesignFileFullName);
// Design 디렉토리에서 Design 명을 제거한 디렉토리를 작업디렉토리로 설정한다.
CSettingData.m_strCurrentWorkingDirPath = Path.GetDirectoryName(m_design.m_strDesignDirPath);
@@ -931,6 +989,35 @@ private void ribbonButtonOpen_Click(object sender, EventArgs e)
CNotice.printUserMessage(m_design.m_strDesignName + m_resManager.GetString("_DHBO"));
}
+ ///
+ /// DoSA-3D Shape 디렉토리가 정상인지 평가한다.
+ /// [평가 항목]
+ /// - Shape 디렉토리 존재 여부
+ /// - Design명.msh, Design명.step, Design명.txt 존재 여부
+ /// ( 스텝파일은 복사할 때 확장자가 step 지정 된다. )
+ ///
+ /// Design Directory
+ /// Design Name
+ ///
+ private bool isShapeDirectoryOK(string strDirectory, string strDesignName)
+ {
+ string strShapeDirectory = Path.Combine(strDirectory, "Shape");
+
+ if (false == m_manageFile.isExistDirectory(strShapeDirectory))
+ return false;
+
+ if (false == m_manageFile.isExistFile(Path.Combine(strShapeDirectory, strDesignName + ".msh")))
+ return false;
+
+ if (false == m_manageFile.isExistFile(Path.Combine(strShapeDirectory, strDesignName + ".step")))
+ return false;
+
+ if (false == m_manageFile.isExistFile(Path.Combine(strShapeDirectory, strDesignName + ".txt")))
+ return false;
+
+ return true;
+ }
+
private void ribbonOrbMenuItemClose_Click(object sender, EventArgs e)
{
if (m_design.m_bChanged == true)
@@ -2188,11 +2275,16 @@ private void FormMain_Shown(object sender, EventArgs e)
if (false == m_manageFile.isExistFile(m_strCommandLineDesignFullName))
{
- CNotice.printLog("커멘드라인으로 입력한 디자인 파일이 존재하지 않는다.");
+ if (CSettingData.m_emLanguage == EMLanguage.Korean)
+ CNotice.noticeWarning("디자인 파일이 존재하지 않습니다.");
+ else
+ CNotice.noticeWarning("The design file does not exist.");
+
return;
}
- loadDesignFile(m_strCommandLineDesignFullName);
+ if (false == loadDesignFile(m_strCommandLineDesignFullName))
+ return;
// 디자인 파일이 생성될 때의 디자인 작업 디렉토리는 프로그램 기본 디렉토리 강제 설정하고 있다.
// 만약 디렉토리를 옮긴 디자인 디렉토리를 오픈 할 경우라면
@@ -2302,17 +2394,39 @@ private void plotForceResult(CForceTest forceTest)
try
{
- getForceResult(strTestName, ref dForceX, ref dForceY, ref dForceZ);
+ if (false == getForceResult(strTestName, ref dForceX, ref dForceY, ref dForceZ))
+ return;
- /// 영구자석이 포함된 자기회로의 정확도를 높이기위한 전류 0 시험이 존재하는 지를 확인한다.
- /// 전류를 인가했을 때와 하지 않았을 때의 자기력 차를 자기력으로 사용한다.
- if (m_manageFile.isExistDirectory(strTestZeroDirName) == true)
+ if(forceTest.ActuatorType == EMActuatorType.VCM)
{
- getForceResult(strTestZeroName, ref dZeroForceX, ref dZeroForceY, ref dZeroForceZ);
+ bool bVCMSolveError = false;
+
+ /// 영구자석이 포함된 자기회로의 정확도를 높이기위한 전류 0 시험이 존재하는 지를 확인한다.
+ /// 전류를 인가했을 때와 하지 않았을 때의 자기력 차를 자기력으로 사용한다.
+ if (m_manageFile.isExistDirectory(strTestZeroDirName) == true)
+ {
+ if (true == getForceResult(strTestZeroName, ref dZeroForceX, ref dZeroForceY, ref dZeroForceZ))
+ {
+ dForceX = dForceX - dZeroForceX;
+ dForceY = dForceY - dZeroForceY;
+ dForceZ = dForceZ - dZeroForceZ;
+ }
+ else
+ bVCMSolveError = true;
- dForceX = dForceX - dZeroForceX;
- dForceY = dForceY - dZeroForceY;
- dForceZ = dForceZ - dZeroForceZ;
+ }
+ else
+ bVCMSolveError = true;
+
+ if(bVCMSolveError == true)
+ {
+ if(CSettingData.m_emLanguage == EMLanguage.Korean)
+ CNotice.noticeWarning("VCM Type 는 Zero Current를 포함해 2회 해석을 진행해야 합니다.");
+ else
+ CNotice.noticeWarning("VCM Type should be analyzed twice including Zero Current.");
+
+ return;
+ }
}
textBoxForceX.Text = string.Format("{0:0.0000}", dForceX);
@@ -2344,7 +2458,7 @@ private void plotForceResult(CForceTest forceTest)
}
}
- private void getForceResult(string strTestName, ref double dForceX, ref double dForceY, ref double dForceZ)
+ private bool getForceResult(string strTestName, ref double dForceX, ref double dForceY, ref double dForceZ)
{
string strTestDirName = Path.Combine(m_design.m_strDesignDirPath, strTestName);
@@ -2372,7 +2486,7 @@ private void getForceResult(string strTestName, ref double dForceX, ref double d
else
{
CNotice.noticeWarningID("TROA1");
- return;
+ return false;
}
bCheck = m_manageFile.isExistFile(strForceYFileFullName);
@@ -2388,7 +2502,7 @@ private void getForceResult(string strTestName, ref double dForceX, ref double d
else
{
CNotice.noticeWarningID("TROA1");
- return;
+ return false;
}
bCheck = m_manageFile.isExistFile(strForceZFileFullName);
@@ -2404,8 +2518,10 @@ private void getForceResult(string strTestName, ref double dForceX, ref double d
else
{
CNotice.noticeWarningID("TROA1");
- return;
+ return false;
}
+
+ return true;
}
#endregion
@@ -2475,7 +2591,32 @@ private bool loadDesignFile(string strDesignFileFullName)
// 전체 내용을 읽어드린다.
readFile.getAllLines(strDesignFileFullName, ref listStringLines);
- foreach (string strLine in listStringLines)
+ ///-----------------------------------------------------
+ /// DoSA-2D 와 DoSA-3D 의 구분 기호가 아래와 같음을 유의하라
+ /// - DoSA-3D : DoSA_3D_Project
+ /// - DoSA-2D : DoSA_Project
+ ///-----------------------------------------------------
+ if (listStringLines[0].Contains("DoSA_Project") == true)
+ {
+ if (CSettingData.m_emLanguage == EMLanguage.Korean)
+ CNotice.noticeWarning("DoSA-2D 파일은 열 수 없습니다.");
+ else
+ CNotice.noticeWarning("DoSA-2D files cannot be opened.");
+
+ return false;
+
+ }
+ else if (listStringLines[0].Contains("DoSA_3D_Project") == false)
+ {
+ if (CSettingData.m_emLanguage == EMLanguage.Korean)
+ CNotice.noticeWarning("DoSA-3D 파일에 문제가 있습니다.");
+ else
+ CNotice.noticeWarning("There is a problem with the DoSA-3D file.");
+
+ return false;
+ }
+
+ foreach (string strLine in listStringLines)
{
// Design 구문 안의 내용만 listDesignActuator 담는다.
//
diff --git a/Code/01_DoSA-3D/DoSA-3D/Properties/AssemblyInfo.cs b/Code/01_DoSA-3D/DoSA-3D/Properties/AssemblyInfo.cs
index badb569..1a8308b 100644
--- a/Code/01_DoSA-3D/DoSA-3D/Properties/AssemblyInfo.cs
+++ b/Code/01_DoSA-3D/DoSA-3D/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.9.15.0")]
-[assembly: AssemblyFileVersion("0.9.15.0")]
+[assembly: AssemblyVersion("0.9.16.0")]
+[assembly: AssemblyFileVersion("0.9.16.0")]
diff --git a/Code/01_DoSA-3D/DoSA-3D/bin/Debug/DoSA-3D.exe b/Code/01_DoSA-3D/DoSA-3D/bin/Debug/DoSA-3D.exe
deleted file mode 100644
index 4a74643..0000000
Binary files a/Code/01_DoSA-3D/DoSA-3D/bin/Debug/DoSA-3D.exe and /dev/null differ
diff --git a/Code/01_DoSA-3D/DoSA-3D/bin/Release/DoSA-3D.exe b/Code/01_DoSA-3D/DoSA-3D/bin/Release/DoSA-3D.exe
deleted file mode 100644
index 4b57491..0000000
Binary files a/Code/01_DoSA-3D/DoSA-3D/bin/Release/DoSA-3D.exe and /dev/null differ
diff --git a/Code/01_DoSA-3D/DoSA-3D/bin/Release/readme.txt b/Code/01_DoSA-3D/DoSA-3D/bin/Release/readme.txt
index 3ef47d0..297c610 100644
--- a/Code/01_DoSA-3D/DoSA-3D/bin/Release/readme.txt
+++ b/Code/01_DoSA-3D/DoSA-3D/bin/Release/readme.txt
@@ -3,6 +3,9 @@ https://solenoid.or.kr/index_dosa_open_3d_kor.html
Gi-Tae Kweon
zgitae@gmail.com
+2022-05-20 Ver(0.9.16.0)
+ - Automatic creation of directory structure for work files and restrictions on opening DoSA-2D files
+
2022-05-08 Ver(0.9.15.0)
- Added Drawing Guides before simulation