Bob Vandevliet
Bob Vandevliet

Reputation: 213

Call method from interface or abstract class within static void

I'm usually a javascript developer, but for my company I just started learning c# in order to use the CimatronE 13 API to develop custom command line PDM tools for this 3D modelling software.

As I'm making progress understanding the programming language, there's this frustrating situation where I want to use an API endpoint method but I can't manage to get it working.

The Cimatron documentation says the following:

IPdm::GetRelatedDocuments

Syntax: RelatedDocuments = GetRelatedDocuments ( DocumentPath );

This method allows you to get related files from compound types of files, for example Assembly or Drawing.

Input: (String) DocumentPath, Path to file. For example \Documents\Location\Folder\Document. The file must be Assembly or Drawing.

Return: (Variant) RelatedDocuments, Variant type array each element of which contain two dimensioned string type array of files related to selected one.


This looks pretty straight forward to me, so I tried calling it in multiple ways from within the static void Main() method, but I keep getting errors:

var RelatedDocuments = interop.CimBaseAPI.IPdm.GetRelatedDocuments("path");

CS0120: An object reference is required for the non-static field, method, or property 'IPdm.GetRelatedDocuments(string)'

interop.CimBaseAPI.IPdm pdm = new interop.CimBaseAPI.IPdm();
var RelatedDocuments = pdm.GetRelatedDocuments("path");

CS0144: Cannot create an instance of the abstract class or interface 'IPdm'

Any ideas? It's probably simple but I'm still a noob with c# :p


EDIT:

Cimatron documentation about the interface interop.CimBaseAPI.IPdm:

Properties:

Get Query (String, DocumentEnumType, DocumentEnumUnit ) Variant

Methods:

A lot, including Variant GetRelatedDocuments ( String )

Upvotes: 0

Views: 387

Answers (2)

PKanold
PKanold

Reputation: 148

I ran into this same issue with Cimatron 14. I needed to make some changes in Visual Studio for things run properly with Cimatron.

  • Run Visual Studio in administrator mode
  • Set your Debug & Release Solution Platform to 'x64'
  • It was also recommended to point the build path for release & debug to the same folder as the Cimatron references. In my case 'C:\Program Files\3D Systems\Cimatron\14.0\Program'. However my code appears to run fine without this.

I created the Cimatron Application with this code (VB.Net):

    Dim gAppAccess As New CIMAPPACCESSLib.AppAccess 'Define an AppAccess object to get running active application
    Dim gApp As CIMAPPACCESSLib.Application 'Define an Application object
    gApp = gAppAccess.GetApplication 'Getting running active application
    If gApp Is Nothing Then
        gApp = New CIMAPPACCESSLib.Application 'Creating a new instance of a Cimatron application
    End If

References: Interop.CIMAPPACCESSLib.dll & interop.CimServicesAPI.dll

It is my understanding that Cimatron 15 may also requires some manifest changes.

There is some help information in the Cimatron program under Cimatrom Modules > Cimaton SDK that may be mildly helpful.

Upvotes: 1

Bob Vandevliet
Bob Vandevliet

Reputation: 213

As how I see it now... interop.CimatronE.IPdm is an interface and in order to use it's methods, we first need access to the Cimatron application. Using the application object, we can use it's methods to get the desired interfaces such as IPdm and use their methods.

The following code gives no errors from the compiler but does when executing. This seems to be related to version 13 of CimatronE, since the application object works just fine using version 12. A lot has changed between these versions which I think is the reason the API is not functioning properly, outdated.

interop.CimAppAccess.AppAccess AppAcc = new interop.CimAppAccess.AppAccess();
interop.CimatronE.IApplication CimApp = /*(interop.CimatronE.IApplication)*/AppAcc.GetApplication();

interop.CimatronE.IPdm pdm = CimApp.GetPdm();

var RelatedDocuments = pdm.GetRelatedDocuments("path");
Console.WriteLine(RelatedDocuments);

Please correct me if I'm wrong! (since I just started and still learning c#)

Upvotes: 1

Related Questions