기본 콘텐츠로 건너뛰기

라벨이 Element인 게시물 표시

MSTN XM VBA - Lession4(요소 탐색하기)

아래 예제는 현재 열려 있는 모델의 요소에 접근하여 Range를 구하는 매크로 입니다. Sub EnumElements() Dim oScanEnumerator As ElementEnumerator Dim oElement As Element Set oScanEnumerator = ActiveModelReference.Scan Do While oScanEnumerator.MoveNext Set oElement = oScanEnumerator.Current If oElement.IsGraphical Then ShowStatus "Low = " & oElement.Range.Low.X & "," & oElement.Range.Low.Y ShowStatus "High= " & oElement.Range.High.X & "," & oElement.Range.High.Y End If Loop End Sub

Element 탐색하기 - 두 번째

앞서 Element를 탐색하는 방법을 알아봤는데 이번에는 또 다른 방법을 알아 보도록 하겠습니다. 이번에 알아볼 방법은 Callback함수를 이용하는 방법입니다. Callback함수를 등록시켜 놓으면 scan시 Element를 찾을때 마다 Callback함수를 호출합니다. 아래의 코드를 참조하세요 /*---------------------------------------------------------------------------------**//** author BentleySystems 03/04 +---------------+---------------+---------------+---------------+---------------+------*/ int CNeutralDataFile::ScanCallback ( MSElementDescr* pEd, void* pInfo, ScanCriteria* pScanCriteria ) { UNUSED_ALWAYS(pScanCriteria); CNeutralDataFile* pNeutralDataFile = (CNeutralDataFile*)(pInfo); pNeutralDataFile->WriteElementDescr(pEd , 0L); return SUCCESS; } /* @brief write element to file @author @date 2011.07.04 @param CStdioFile& */ void CNeutralDataFile::WriteToFile(/*CStdioFile* pStdioFile*/) { { ScanCriteria *scP = mdlScanCriteria_create (); /...

XM MDL Programming - #5(Element 생성하기)

이번에는 간단히 예제로 Line과 Text를 생성하는 방법에 대해 알아보도록 합시다. 다른 Element들에 대해서는 생성하는 함수만 알면 아래의 루틴대로 하면 아무 어려움 없이 원하는 Element들을 생성할수 있습니다. 루틴이라고 해봤자 생성하는 함수로 원하는 Element를 생성한 후에 Property를 설정하고 add하는 것 밖에 없습니다. 우선 간단한 다이얼로를 만든 뒤에 생성할 Element의 Type을 설정하는 ComboBox를 추가합니다. 그리고 Place 버튼을 누르면 Element를 생성하는 것으로 하죠. 자 그럼 Place 버튼의 Callback 함수를 보도록 하죠. void CModelessDlg::OnBnClickedBtnPlace() { CMStationDialog::UpdateData(TRUE); startElementPlacement(this); } 아래 startElementPlacement 함수를 호출합니다. void startElementPlacement(CModelessDlg* pDlg) { g_pDlg = pDlg; CString csElement; int nIndex = g_pDlg->m_cbCtrlElemType.GetCurSel(); if(nIndex != -1) { g_pDlg->m_cbCtrlElemType.GetLBText(nIndex,csElement); if(csElement.CompareNoCase("Line") == 0) { startLinePlacement(); } else if(csElement.CompareNoCase("Text") == 0) { mdlState_setFunction (STATE_DATAPOINT, placeText); ...

Element 탐색하기

이번에는 dgn 파일에 있는 element들을 찾는 방법을 알아보도록 합시다. 먼저 간단한 코드를 먼저 보시죠. int ScanFile(UShort* typeMask , constintmaskSize) { intstatus = 0; intnElemCnt = 0; intnElemType; ULong elemAddr[50]; ScanCriteria* pScanCrit = NULL; UShort usTypeMask[8]; MSElement element; // Initialize the scan criteria pScanCrit = mdlScanCriteria_create(); mdlScanCriteria_setReturnType(pScanCrit, MSSCANCRIT_RETURN_FILEPOS, FALSE, FALSE); memset(usTypeMask, 0, sizeof(usTypeMask)); mdlScanCriteria_setElementTypeTest(pScanCrit , typeMask , maskSize); mdlScanCriteria_setModel (pScanCrit,mdlModelRef_getActive()); mdlScanCriteria_setElementCategory (pScanCrit,ELEMENT_CATEGORY_GRAPHICS); do { intscanWords = sizeof(elemAddr) / sizeof(short); status = mdlScanCriteria_scan(pScanCrit, elemAddr, &scanWords, NULL); if( status == BAD_FILE || status == BAD_ELEMENT ) break; intnumAddr = scanWords / sizeof(short); for(int i=...

MSTN XM VBA - Lession3(요소 생성하기)

VBA 교육은 하지 않는 것으로 결정이 났습니다. 앞으로 VBA 관련 업데이트는 자주 없을것 같습니다. 자 이제 LineString을 그리는 매크로를 작성해 보도록 합시다. 전체 소스는 아래와 같습니다. Sub Macro1() Dim startPoint As Point3d Dim point As Point3d, point2 As Point3d 'Start a command CadInputQueue.SendCommand "PLACE SMARTLINE " 'Coordinates are in master units startPoint.X = 7.316122 startPoint.Y = -4.865692 startPoint.Z = 0# 'Send a data point to the current command point = startPoint CadInputQueue.SendDataPoint point, 1 'Send a data point to the current command point.X = startPoint.X + 2.48087 point.Y = startPoint.Y + 3.0765 point.Z = startPoint.Z CadInputQueue.SendDataPoint point, 1 'Send a data point to the current command point.X = startPoint.X + 7.6503 point.Y = startPoint.Y + 1.9341 point.Z = startPoint.Z CadInputQueue.SendDataPoint point, 1 'Send a reset to the current command CadInputQueue.SendRes...