기본 콘텐츠로 건너뛰기

글

B 테이블의 한 레코드값 전부를 A 테이블에 바로 INSERT 하는 방법

SQL = INSERT INTO A SELECT * FROM B WHERE C_DATA1 = '값' 이제껏 프로그래밍을 하면서 가끔 Database를 사용해 왔었지만 아는 것이라고는 고작 SELECT,DELETE,INSERT 문 정도이다. Database의 지식을 절실히 느끼고 있는 요즘이다. 이번에도 위와 같은 문을 몰랐더라면 SELECT and INSERT 두개이 SQL문을 사용했을 것이다. 2011.06.14 물론 위의 두 테이블 A,B는 같은 구조를 가져야 합니다.

wxPython - 1

처음으로 인터넷을 뒤져가며 wxPython을 이용한 GUI 프로그래밍을 해보았습니다. 대상은 현재 Warrany 중인 프로젝트에 필요한 간단한 유틸리티로 하였습니다. 기능을 살펴보자면, 웹서버에 있는 XML 파일을 읽어 파싱한 후에 그 내용을 UI에 표시해주고, 사용자가 UI를 통해 내용을 수정한 후에 로컬에 XML 파일을 생성해주는 기능이 있습니다. ( 웹에 수정한 내용을 upload하기를 원했는데 그 기능은 아직 구현하지 못했습니다. 아시는 분은 좀 알려주세요^^ ) 코드로 GUI를 만드는게 어려웠습니다. 아래와 같은 간단한 UI를 만드는데도 시간이 제법 걸렸습니다.(아무래도 제가 wxPython에 익숙하지 못한 이유도 있겠지만요) 그래서 Boa Constructor를 이용해서 GUI를 디자인을 해봐야겠습니다. 아무래도 코드로 만드는 것보다 시간으로나 질적으로나 낫지 않을까 생각이 듭니다.

OpenCasCade - Face에 색상 설정

아래 코드를 참조하세요... Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(pnt1 , pnt2); Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(pnt2 , pnt3); Handle(Geom_TrimmedCurve) aSegment3 = GC_MakeSegment(pnt3 , pnt1); TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1); TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aSegment2); TopoDS_Edge aEdge3 = BRepBuilderAPI_MakeEdge(aSegment3); TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(aEdge1 , aEdge2 , aEdge3); TopoDS_Face aFace = BRepBuilderAPI_MakeFace(aWire); Handle(AIS_Shape) aShape = ::new AIS_Shape(aFace); aShape->SetColor(Quantity_NOC_CORAL); //! 칼라 설정 m_pAISContext->SetMaterial(aShape , Graphic3d_NOM_DEFAULT); //! Material 정보는 DEFAULT로 m_pAISContext->SetDisplayMode(aShape,1,Standard_False); m_pAISContext->Display(aShape , false); 아래는 칼라 정보로 사용할수 있는 열거형 값입니다. enum Quantity_NameOfColor { Quantity_NOC_BLACK, Quantity_NOC_MATRABLUE, Quantity_NOC_MATRAGRAY, Quantity_NOC_ALICEBLUE, Quantity_NOC_ANTIQUEWHITE, Quanti...

[OpenCasCade ]Getting Started

첨부파일1 첨부파일2 OpenCasCade를 이용한 첫번째 샘플 프로젝트입니다. 목적은 LibMesh2d library의 TestCase작성을 위해서입니다. 이 프로젝트를 실제로 컴파일하기 위해서는 몇가지의 저 개인의 Library가 필요하지만 현재로서는 그것을 공개할 수가 없군요. 하지만 제가 올린 샘플 프로젝트가 순수하게 OpenCasCade로 가는 첫 단계로써의 역활은 충분히 소화할수 있을거라 생각합니다. 실행 파일과 각종 DLL 파일을 올릴려고 하니 용량 제한에 걸려 올리지 못하네요....

mdlView_hiddenLineRemoval2의 preFunction에 대해서...

mdlView_hiddenLineRemoval2을 사용할때 첫번째 인자가 preFunction을 가르키는 함수 포인터입니다. 이 preFunction이 하는 기능은 hidden 처리를 하는 과정에 앞서 현재 Active된 모델의 각 element들에 대해서 hidden 처리에 포함시킬지 여부를 결정합니다. 이 preFunction 부분이 V7에서 XM으로 넘어오는 과정에서 약간 변경이 되었는데, element들에 대한 정보는 preFunction의 첫번째 인자인 MSElementDescr *edP에서 구할수 있습니다. 아래 코드는 XM환경에서 reference된 element의 모델 이름등을 구하는 루틴입니다. Private int preFunction ( MSElementDescr *edP, /* => element to be processed */ ViewInfoP elementInfoP ) { int lineNo; char modelName[256]; char modelDescription[256]; char modelLogical[256]; DgnModelRefP modelRef; StatusInt res; ULong filePos; if(mdlModelRef_isReference(edP->h.dgnModelRef)) { mdlRefFile_getParameters(modelName,REFERENCE_FILENAME,edP->h.dgnModelRef); mdlRefFile_getParameters(modelDescription,REFERENCE_DESCRIPTION,edP->h.dgnModelRef); mdlRefFile_getParame...

MDLVS.bat 파일 수정

예전에 'VC++ 6.0을 이용하여 컴파일하기' 에서 배치파일을 이용하여 컴파일하는 방법을 알아 봤습니다. 이 배치파일이 V7까지는 제대로 작동되었으나 XM에서 사용할려고 하니 오류가 발생하면서 컴파일을 할수가 없습니다. 원인은 XM 버젼이 설치될때 Program Files 폴더에 기본적으로 설치가 되는데 배치 파일에서 경로에 공백이 들어가는 것을 제대로 처리를 하지 못해서 생기는 현상이었습니다. 따라서 배치 파일의 내용을 조금 수정해야 합니다. Program Files 부분을 짧은 경로 문자(Progra~1)로 대체했습니다. MDLVS.bat의 내용 Microstation J를 디폴트로 설치하셨다면 아래 내용을 수정없이 사용하실 수 있습니다. 설치 폴더를 바꿨으면 아래 SET MS=xxx 부분을 수정해 주세요. ---------------------------------------------------------------------------------------- echo off cls echo +-----------------MDL BUILD BATCH ------------------------------+ cd echo MDLVS.bat date /t time /t SET MS=C:\Bentley\Program\MicroStation SET MS=C:\Progra~1\Bentley\MicroStation call vcvars32.bat SET INCLUDE=%MS%\mdl\include;%INCLUDE% SET LIB=%MS%\mdl\library;%MS%\jmdl\lib;%LIB% set BMAKE_OPT=-I%MS%\mdl\include -I%MS%\jmdl\include set PATH=;%MS%;%MS%\mdl\bin;%MS%\jmdl\bin;%PATH% set MLINK_STDLIB=%MS%\mdl\library\mdllib.dlo %MS%\mdl\library\builtin....

SPOOL로 원하는 거리만큼 이동하기

SPOOL과 DISTANCE는 그 개념이 서로 다릅니다. DISTANCE는 두 아이템이 중점 사이의 거리를 표현하고요, SPOOL은 서로 가까운 거리에 있는 단면의 거리를 표현합니다. 아래는 SPOOL로 원하는 거리만큼 이동시키는 코드입니다. define method DIST(!val is string) VAR !MODE MODE IF (|$!MODE| EQ |Forwards|) THEN POS PA DIST $!val FROM PL OF PREV HANDLE (41,66) POS PA DIST $!val FROM PH ENDHANDLE ELSE POS PL DIST $!val FROM PA OF PREV HANDLE (41,66) POS PL DIST $!val FROM PT ENDHANDLE ENDIF endmethod

DARS로 Multi-Bytes 문자 읽기

DARS문서를 읽다 보면 극동 지역(중국,일본,한국)에서 사용하는 문자를 읽는 방법이 나와있는데, 이를 간략하게 정리한 것입니다. 우선 Multi-Bytes 문자의 시작은 ' &~ '로 시작이 되고, ' & '로 종료가 된다. 그리고 Multi-Bytes 문자들(' &~ '와 ' & '사이에 들어 있는 문자들)은 각각에 128을 더한 문자를 취하면 됩니다. 지극히 간단합니다. 한가지 주의할 사항은 ' &~ '와 ' & '사이에 들어 있는 &~ 은 Multi-Bytes 문자의 시작을 가리키는 것이 아니라 문자 그 자체가 된다는 것입니다. 아래는 Multi-Bytes 문자를 읽는 코드입니다. /** @brief parsing multi-byte characters @author CJH , BHK @date 2009.06.23 */ string CAccessPdms::FECS(const string &istr) { string ostr; bool LFECS = false; for(int i = 0;i

폴더안의 파일 삭제.

요즘은 MFC로 만든 프로그램에 PYTHON을 붙여 작업을 하고 있습니다. 제법 괜찮은것 같은데, 한두가지의 문제가 있어 불편하군요. 1 2 3 4 5 6 7 8 9 10 11 import  os import  re   # brief  delete all bus files # author BHK def  DeleteAllFiles(prjFolder):      for  filename  in  os.listdir(prjFolder):           result  =  re.search( '[.]*\.txt' ,filename)           if  result:            os.remove(os.path.join(prjFolder,filename)) cs

VB를 통한 FrameWork 자동 로드

FrameWork을 자동으로 로딩하는 것에 대해 알아봅시다. 물론 PC에 FrameWork이 설치되어 있어야 하겠지요. 현재 디렉토리를 Microstation이 설치되어 있는 디렉토리로 설정합니다.(SetCurrentDirectory) Shell을 이용해서 mod 폴더에 있는 FrameWork dgn 파일을 오픈합니다. Set msApp = GetObject("" , "Microstation.Application") fwstart.ma 파일을 로드합니다. msApp.MbeSendCommand("MDL LOAD FWSTART.MA") 다시 시간이 걸립니다. 이렇게 하면 성공적으로 FRAMEWORK을 로드할수 있습니다. 한가지 주의할 사항은 위의 절차대로 하기 전에 반드시 MS , FW_PRODUCT 이 두 환경변수를 설정해 줘야 한다는 겁니다. 예) "FW_PRODUCT"="C:\\WIN32APP\\INGR\\FWPLUS\\" "MS"="C:\\Bentley\\Program\\MicroStation\\ustation.exe"

오늘 날짜, 현재 시간 구하기, 년월일 시분초; Get Date Time

현재 년/월/일, 시/분/초를 구하는 방법입니다. 예를 들어 올해가 2007년도라면, tm_year 라는 속성에 2007 이라는 숫자가 들어 있습니다. 오늘 날짜 / 현재 시간 구하기 예제 파일명: 0.py #!/usr/bin/python # -*- coding: cp949 -*- import time now = time.localtime() print "현재 년: %d" % (now.tm_year) print "현재 월: %d" % (now.tm_mon) print "현재 일: %d" % (now.tm_mday) print print "현재 시: %d" % (now.tm_hour)         # 24시간제 print "현재 분: %d" % (now.tm_min) print "현재 초: %d" % (now.tm_sec) print print "오늘 요일: %d"      % (now.tm_wday)  # 월요일 = 0 print "올해 몇번째 날: %d" % (now.tm_yday)  # 1월 1일 = 1 print "서머타임 여부: %d"  % (now.tm_isdst) # 서머타임 없으면 0

Python 파이썬] 파일 존재 여부 판단, 디렉토리 있는지? 함수; Is File Dir Exists

디스크에 특정 파일명의 파일이 실제로 존재하는지, 또는 특정 디렉토리명의 디렉토리가 정말로 있는지 알아내는 방법입니다. os.path.isfile() 함수는, 지정한 패스가 파일이고 실제로 존재할 때에만 참을 반환하기에, 파일이 존재하는지 알아내는 용도로 사용할 수 있습니다. os.path.isdir()은 디렉토리(폴더)에 적용됩니다. 파일/폴더 존재 여부 알아내기 예제 스크립트 파일명: example.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/usr/bin/python # -*- coding: cp949 -*-     import  os   if  os.path.isfile( "test.txt" ):    print   "파일 있습니다" else :    print   "그런 이름의 파일은 없습니다"   if  os.path.isdir( "000" ):    print   "디렉토리 있습니다" else :    print   "그런 이름의 디렉토리는 없습니다" cs

wxPython 프로그램을 py2exe로 하면 스타일이 확 죽는 ..

Digital Dynamics | 이재규 http://blog.naver.com/leejaku/20019851052 2. 문제점: XP 에서 개발했는데 py2exe 로 묶고 나니 GUI 가 옛날 것 마냥 안이쁘게 나와버린다. 그냥 pyw 파일을 실행하면 XP 테마로 이쁘게 GUI 가 나오는데 py2exe 로 묶기만 하면 그런다. 해결책1: py2exe 로 만들어낸 파일이 FOO.exe 라면 1. 파이썬이 설치된 디렉토리로 찾아간다. 보통은 C:\Python24 2. pythonw.exe.manifest 라는 파일을 FOO.exe.manifest 라는 이름으로 복사한다. 3. FOO.exe 파일과 FOO.exe.manifest 를 같은 디렉토리에 함께 둔다. 4. 해결됐다. 해결책2: 인용: setup.py 파일안에 manifest 파일의 내용을 embedding 한다. 검색해서 찾은 예제를 붙여보겠습니다. 코드: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 from  distutils.core  import  setup import  py2exe   manifest  =   "" " <?xml version=" 1. 0 " encoding=" UTF - 8 " standalone=" yes "?> <assembly xmlns=" urn:schemas - microsoft - com:asm.v1 " manifestVersion=" 1. 0 "> <assemblyIdentity     version=" 0. 64. 1. 0 "     pr...

CATALOGUE 구축시 회전 PTSET 생성하기

아래 그림과 같이 ANGLE을 가지는 POINT를 생성하고자 할때, 일반적으로 직접 ANGLE값을 줄때는 X 90 Y 이런식으로 가능합니다. 하지만 DESGIN PARA에 있는 값을 적용 시키고자 할때는 MIXED-POINT로 생성하면 되지 않습니다. 꼭 PTCA로 생성해야만 합니다.(왜 그런지는 몰라요) ATTRIB RPRO DSPJ 라는 항목이 좀 생소 할지도 모르는데.... 이 부분은 그냥 DESP를 사용하지 않고(이렇게 사용했다면 Display Component할때 무수한 메세지를 보게 될것입니다.) DTSE를 이용해서 DESP를 이용하도록 하면 메세지가 나타나는 것을 방지할 수 있습니다. 말로는 잇점을 표현하기 어렵고 직접 해 보시길....