Revit API 단위 관련 팁

Revit API 단위 관련 팁

JungGeun-Park
Explorer Explorer
1,205 조회수
4 답변
1/5 메시지

Revit API 단위 관련 팁

JungGeun-Park
Explorer
Explorer

안녕하세요~!

레빗 & 다이나모 개발 관련 유튜브를 하고있는 소주장군입니다.

 

오늘 간단한 개발 팁 하나를 소개하려고합니다.

 

레빗 개발을 하다보면,

피트 단위 때문에 난감한 사례가 많습니다.

 

예를 들어,

A 와 B 두개의 값이 있는 경우

화면에 표시되는 A의 값이 0.999 이고 B의 값이 0.999 입니다.

 

그런데,

IF(A == B )  이 구문에 거짓이라고 떨어지는 경우가 있습니다.

저는 주로 좌표를 다룰때 해당 문제가 발생했습니다.(두 좌표가 같은 경우 등등 확인)

 

이러한 경우, 

A 값과 B 값을 소수점 표시를 더 많이 출력해서 확인하면

A 값이 0.99999998 , B 값이 0.99999999 이렇게 소수점 숫자가 틀리게 확인 되는 경우가 있습니다.

 

이러한 사례가 개발을 진행하다보면 종종 발생하고,

위 내용을 모르면 어디서 에러가 발생하는지 알기가 쉽지 않습니다. 당연히 맞다고 체크하고 넘어가니까요...

 

저는 이러한 문제를 해결하기 위하여

 

   1. FEET 단위를 MM 으로 변환하여 체크

   2. 특정 소수점 올림 or 버림 하여 체크

   3. 특정 값을 기준으로 동일하다고 체크 (예> 위의 경우 0.00000001 차이 나도 같다고 체크)

   4. 2번 처리 후 문자 변경 후 체크 (포인트의 경우 구문을 줄일 수 있습니다.)

 

이렇게 처리합니다. ^^;;; 간단하죠 ^^;;;

 

엄청난 팁은 아닐지 모르나,

미약한 도움이 되셨으면 합니다.

감사합니다.

수락된 솔루션(1)
1,206 조회수
4 답변
답변 (4)
2/5 메시지

itsjakk3
Contributor
Contributor
수락된 솔루션

꽤나 중요한 팁이네요! 이 글의 내용이 조금이나마 더 보충될 수 있도록 API 내장 메소드 하나 설명 남깁니다.

 

Revit API 문서상에 아래와 같이 두 값의 비교에 대한 API도 제공됩니다.

 

일반적으로 CAD 툴에서는 tolerance라는 개념이 있다보니, CAD 프로그램에서 위와같이 해당 프로그램 내에서 지정한 허용오차 내에서 두 값을 비교할 수 있는 메소드를 제공하는경우가 종종 있습니다.

Revit 역시 그러한 메소드를 몇가지 제공합니다.

 

itsjakk3_0-1715558592726.png

 

itsjakk3_1-1715558767189.png

 

call by reference로 호출되는 두 객체간 비교가 아닌 값(call by value)의 비교는 위와같이 제공되는 메소드를 이용하는것이 가장 좋을 것 같습니다. 그리고 제공해주는 메소드를 이용한 비교를 진행하다가 잘 안되면 직접 두 값의 비교를 위한 메소드를 짜는것이 좋을것 같습니다!

 

itsjakk3_2-1715558816396.png

 

추가로 두 점간의 비교역시 위와같이 제공됩니다.

BIM Engineer & Developer (Wannabe)
3/5 메시지

daeun_jun
Alumni
Alumni

소주장군님 왜 이제야 나타나셨나요!!!! 레벨이....1입니다 ㅋㅋㅋㅋ
어여어여 좋은 글 많이 올려주시고, 레벨 쭉쭉 성장하시고, EE가봅시다!!!!
이 글에 댓글을 남겨주세요. 솔루션 수락으로 포인트를 받을 수 있습니다 🙂

Autodesk Community


Product Specialist, Daeun Jun
0 Likes
4/5 메시지

dingohot
Advocate
Advocate
레빗을 메트릭으로 쓰는 사람이 훨씬 많을텐데 왜 임페리얼을 고집하는지 정말 답답하죠.

HyunWoo Kim

EESignature

5/5 메시지

SWPE_IN_WONMINSEOP
Enthusiast
Enthusiast

내부 연산을 할 때 Imperial로 환산을 하나보네요;;

그 과정만 없애도 CAD와 비슷한 수준으로 꽤 줄어들겠지만...

pc가 2진수를 쓰는 이상 부동소수점 때문에 이런 문제는 아예 없애진 못할 듯 합니다

64비트 배정밀도 부동소수점이 32비트 단정밀도 부동소수점보단 정확도가 올라가긴 했지만,

그래도 여전히 표현 못하는 실수들이 있다보니..

말씀대로 이런 계산에는 Tolerance를 적절히 주는 수 밖에 없을듯합니다.

 

허용오차를 주는 법은 위에서 말씀해주셨으니 패스하고

부동소수점은 소수점의 위치가 고정이 아니기 때문에

원점 근처에서 작업한다면 소수점 아래 숫자에 할당 할 수 있는 비트들이 늘어나서 포인트의 정확도가 올라갑니다

Revit에서 하는 작업들은 대부분 좌표를 내 맘대로 할 수 없다보니 도움이 되는 팁은 아니겠지만...