iLogic 규칙 작성을 위한 고급 기법

Autodesk Inventor 매개변수 지정 문, 미리 정의된 iLogic 함수 및 간단한 VB.NET 코드만을 사용하여 iLogic 규칙을 쓸 수 있습니다. 그러나 이러한 기법 외에도 다른 방법을 사용할 수 있습니다. 규칙에서 VB.NET의 고급 기능을 사용할 수 있습니다. Visual Basic 2005 또는 2008을 사용하여, 규칙에서 호출할 수 있는 외부 DLL 파일을 작성할 수 있습니다. 또한 C# 또는 C++로 작성된 DLL 파일을 호출할 수도 있습니다.

규칙 코드 내에서 Visual Basic 2008(.NET Framework 3.5) 구문이 지원됩니다.

주 규칙 코드에 앞서 규칙 맨 위에 다음 문을 사용할 수 있습니다.

Option Explicit On

Option Strict On

Option Infer Off

AddReference "filename.dll"

Imports ...

AddVbRule "Other Rule"

AddVbFile "filename.vb"

AddResources "filename.resources"

OptionImports는 표준 VB.NET 문입니다.

Option Explicit Off가 기본값입니다. 이 값은 로컬 변수를 선언하지 않고 사용할 수 있도록 합니다.

Option Strict Off가 기본값입니다. Option Strict On도 대부분의 규칙에 사용할 수 있습니다.

Option Infer On이 기본값입니다.

주 규칙 코드는 "암시적" 서브루틴입니다. 서브루틴, 함수, 특성 또는 클래스를 추가하려면 Sub Main()을 다음과 같이 선언합니다.

Sub Main()
' your main rule code here
End Sub

Sub Main()은 규칙에 추가 코드가 있는지 여부와 상관없이 모든 규칙에서 사용할 수 있습니다. 명시적으로 규칙 클래스를 선언하는 방법에 대한 자세한 내용은 "규칙은 어떻게 처리됩니까?"를 참고하십시오.

AddReference

특수 iLogic 구문을 사용합니다. DLL 이름을 AddReference 문에 추가하는 것은 AddReference 명령을 사용하고 Visual Studio 또는 Visual Basic Express에서 DLL을 찾는 것과 같습니다.

.NET 조립품만 지원됩니다. DLL은 Microsoft.NET₩Framework 폴더에 있는 것과 같은 표준 Microsoft 조립품일 수 있습니다.

예를 들어 다음 문을 살펴보십시오.

AddReference "System.Drawing.dll"

이 문에서 .dll 확장은 선택사항입니다.

사용자가 작성한 클래스 라이브러리 또는 써드 파티 클래스 라이브러리를 참조로 지정할 수도 있습니다. 사용자가 작성한 DLL 또는 써드 파티 DLL은 모두 한 폴더에 있어야 합니다. 기본적으로 이러한 DLL은 다음과 같이 Autodesk Inventor 설치 폴더의 iLogicAdd 하위 폴더에 있습니다.

C:₩Program Files₩Autodesk₩Inventor [버전]₩Bin₩iLogicAdd

iLogic 구성 명령을 사용하여 이 위치를 변경할 수 있습니다. Autodesk Inventor과 같은 주 Autodesk Inventor Bin 폴더에서 DLL에 참조를 추가할 수도 있습니다.

AddReference 문은 전체 경로 지정을 지원하지 않습니다. 파일 이름만 지정할 수 있습니다. 다음과 같은 정규화된 이름을 사용하여 GAC(Global Assembly Cache)에서 조립품에 참조를 추가합니다.

AddReference "VsWebSite.Interop, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”

또한 CreateObject 또는 GetActiveObject를 사용하여 규칙에서 등록된 COM 객체를 작성하거나 액세스할 수 있습니다. COM DLL에는 AddReference를 사용할 필요가 없습니다.

AddVbRule

지정된 규칙의 코드를 VB 코드로 포함합니다. 이러한 코드는 주 규칙으로 컴파일됩니다. 지정된 규칙은 표준 규칙일 수 없습니다. 규칙 편집 대화상자의 옵션 패널에서 Straight VB 코드 옵션이 활성화되어 있어야 합니다. iLogic은 이러한 규칙에서 코드를 사전 처리하지 않습니다. 규칙에는 다른 규칙에서 호출할 수 있는 클래스 또는 모듈이 포함되어 있습니다. 이 문을 사용하여 규칙 간에 코드를 공유하거나 코드 모듈을 유지합니다.

예제

AddVbRule "Other Rule"

AddVbFile

VB 코드가 규칙이 아니라 외부 파일에 저장된다는 점을 제외하고 AddVbRule과 비슷하게 작동합니다. AddVbRule을 사용할 때와 마찬가지로, 이 코드에 대해 Straight VB 코드 옵션이 활성화되어 있어야 합니다. 이 문은 모형 간에 공통 코드를 공유하는 데 유용합니다. 상대 경로 이름을 사용하여 파일을 지정해야 합니다. iLogic에서는 외부 규칙에 사용된 것과 동일한 검색 순서를 사용하여 현재 Autodesk Inventor 문서의 폴더 및 기타 폴더를 검색합니다.

예제

AddVbFile "fileName.vb"

AddResources

문자열, 비트맵 등의 리소스를 추가합니다. Visual Studio를 사용하여 리소스를 컴파일해야 합니다.

예제

AddResources "fileName.resources"

Imports

Imports 문은 중복될 수 없습니다. 다음 기본 Imports 문이 모든 규칙에서 암시적으로 사용됩니다.

규칙에서 MessageBox를 사용한 경우 다음 문이 자동으로 추가됩니다.

Imports System.Windows.Forms

ThisApplication 또는 다른 Autodesk Inventor 객체를 사용한 경우 다음이 자동으로 추가됩니다.

Imports Inventor

규칙 인수

iLogic에서는 실행하는 규칙에 컨텍스트 정보를 규칙 인수로 전달할 수 있는 고급 기능을 제공합니다. 이 정보는 중복 규칙을 작성할 필요 없이 규칙의 동작을 수정하는 데 사용할 수 있습니다.

IiLogicAutomation 인터페이스(외부 클라이언트용)와 iLogicVB(다른 규칙 코드 및 내부 클라이언트용)에서 사용 가능한 함수를 사용하여 규칙 인수를 전달합니다. 이러한 인수는 규칙 내에서 RuleArguments 특성을 통해 사용 가능한 상태가 됩니다.

IiLogicAutomation의 경우 사용 가능한 함수는 다음과 같습니다.

Function RunRuleWithArguments(ByVal doc As Inventor.Document, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Function RunExternalRuleWithArguments(ByVal doc As Inventor.Document, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Function RunRuleDirectWithArguments(ByVal rule As iLogicRule, ByVal ruleArguments As Inventor.NameValueMap) As Integer

iLogicVB의 경우 사용 가능한 함수는 다음과 같습니다.

Function RunRule(ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Function RunRule(ByVal compoOrDocName As Object, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Function RunExternalRule(ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

규칙 인수 작성

규칙 인수를 작성하려면 Inventor API를 사용하여 새 NameValueMap 객체를 작성합니다. 그러면 규칙을 실행할 때 이 객체가 함수 중 하나로 전달됩니다.

규칙에 전달되는 인수에 액세스

x = RuleArguments(“myArg”)

인수가 규칙에 전달되었는지 확인

If RuleArguments.Exists(“myArg”) Then...

RunRule을 사용하여 다른 규칙으로 인수 세트 전달

iLogicVB.RunRule(“someOtherRule”, RuleArguments.Arguments)

추가 문

Sub Main()을 사용할 경우 규칙은 Class...End Class 문이 표시되지 않으며 Sub Main() 앞의 문이 클래스 밖에 있다는 점을 제외하고 클래스에 대한 표준 VB.NET 형식을 따릅니다. 그러므로 모든 지정 문을 Sub, 함수 또는 특성 안에 배치합니다. Private temp As Double = 4.5 등의 클래스 멤버 변수에 대한 선언 문을 하위 루틴 또는 함수 밖에 포함할 수 있습니다.

Sub, Function, PropertyClass 정의는 Sub Main()... End Sub 다음에 추가할 수 있습니다. 추가하는 Class는 해당 규칙에 대한 주 규칙 Class 안에 포함되며 다른 규칙에서 사용할 수 없습니다. 독립적인 Class 또는 Module을 추가하려면 다음을 사용하여 규칙 Class를 명시적으로 선언합니다.

Class ThisRule ' ...
Sub Main
End Sub
' ...
End Class

그런 다음 이 코드 외부에 다른 Class 또는 Module을 둘 이상 추가할 수 있습니다. Class ThisRule이 주 규칙 Class가 되고 iLogic에서는 그 안에 있는 Sub Main을 호출하여 규칙을 실행합니다.

여러 규칙에 표시되는 Module 또는 Class를 포함하려면 외부 조립품(DLL)에 삽입합니다. 같은 DLL에 두 개 이상을 삽입할 수 있습니다. 또한 AddVbRule을 사용하여 Inventor document ()에서 "Straight VB 코드"로 식별된 규칙 안에 삽입할 수 있습니다. 또는 AddVbFile을 사용하여 외부 VB 파일에 삽입할 수도 있습니다.

고급 VB.NET 코드를 개발하는 경우 규칙에서 직접 코딩하지 말고 Visual Studio 또는 Visual Basic Express를 사용합니다. 그러면 Visual Studio에서 비교적 간단한 코드 조각을 잘라내어 규칙에 붙여 넣을 수 있습니다. 자원이 쉽게 지원되지 않지만 전체 대화상자에 Class를 붙여 넣을 수도 있습니다. 더 큰 단위의 코드의 경우 또는 필요한 경우 조립품을 작성하고 규칙에서 이 조립품을 외부 DLL로 사용합니다.

iLogic 규칙의 공유 변수 함수를 사용하여 사용자 정의 Class의 복제인 객체를 저장할 수 있습니다. 이러한 객체를 저장하려면 Class를 직렬화하거나 MarshalByRefObject에서 파생해야 합니다.

외부 DLL

.NET에서 외부 DLL을 작성한 다음 규칙에서 이 DLL을 호출할 수 있습니다. DLL을 디버그하려면 프로젝트 특성 iLogicAdd로 컴파일(Inventor Bin 폴더 아래)에서 빌드 출력 경로를 설정합니다. 그런 다음 Visual Studio의 프로젝트 속성에서 시작 외부 프로그램에 대해 Inventor.exe를 선택합니다. 이 방법을 사용하면 편집 및 계속을 포함한 디버그 환경의 모든 이점을 활용할 수 있습니다.

외부 DLL은 규칙을 사용하여 사용자 입력을 위한 대화상자를 표시할 경우에 유용합니다.

Inventor API

규칙에서 Inventor API에 액세스하려면 ThisApplication 특성을 사용하여 Inventor 응용프로그램에 액세스합니다. 현재 규칙이 포함된 문서에 액세스하려면 ThisDoc.Document를 사용합니다. 피쳐를 작성하고 수정할 수 있습니다. Inventor.Parameter에 직접 액세스하려면 Parameter.Param을 사용합니다.

사용자 고유의 DLL에서 Inventor API를 사용하려면 Visual Basic 프로젝트의 Autodesk.Inventor.Interop.dll에 참조를 추가합니다. 그러면 참조 추가 대화상자의 .NET 탭에 표시됩니다. Inventor 2011의 경우 버전은 15.0.0.0입니다.

외부 DLL에서 iLogic 인터페이스 사용

모든 iLogic 함수는 매개변수, iProperties, iPart 등의 인터페이스 객체 아래에 그룹화되어 있습니다. iLogic 인터페이스 객체를 인수로 외부 DLL의 함수에 전달할 수 있습니다. 프로젝트에서 이러한 객체를 사용하려면 Autodesk.iLogic.Interfaces.dll에 참조를 추가합니다. 참조 추가 대화상자에서 찾아보기 탭을 선택하고 Inventor bin 폴더에서 iLogicBin 폴더를 찾습니다. 이 폴더는 대개 C:₩Program Files₩Autodesk₩Inventor [버전]₩Bin₩iLogicBin에 있습니다.

iLogic 인터페이스에 대한 문서는 Autodesk.iLogic.Interfaces.xml에 제공되어 있습니다. Visual Studio에서 객체 검색기를 사용하여 인터페이스 설명을 읽을 수 있습니다. 이러한 설명에는 규칙에서 인터페이스를 구현하는 객체의 이름이 포함됩니다. 예를 들어 규칙의 피쳐 객체는 ICadFeature 인터페이스를 구현합니다.

규칙의 매개변수

기본적으로 규칙의 숫자 매개변수는 Double로 선언되지 않지만 대신 DoubleForEquals라는 사용자 iLogic 유형으로 선언됩니다.