cwantic-computer

cwantic-computer is the Cwantic's Python Library that gives access to MetaPiping and MetaStructure.

The library does not require the software to be launched !

cwantic_computer will only work with correctly installed software and with a valid licence!

More info at https://pypi.org/project/cwantic-computer/

Initialization

Before accessing cwantic_computer, you must initialize the library with the path of the installation folder and the module you want to use.

This will load MetaPiping/MetaStructure’s dll and check your licence.

The library does not require the software to be launched !

import cwantic_computer as cc

installationPath = "C:\\Program Files\\Cwantic\\MetaPiping 20XX.Y"

valid = cc.setup_cwantic_computer(installationPath, cc.CwanticModule.MetaPiping)
if valid:
    print("Success")

The module can be:

  • cc.CwanticModule.All
  • cc.CwanticModule.MetaPiping
  • cc.CwanticModule.MetaStructure

1. MetaL methods

1.1 loadMetal

Load a MetaL model from file.

loadMetal(metalFilename: str)

Parameters

  • metalFilename : Path to the .metal file.

Returns

MetaL object if successful, None otherwise.

More info for class Model at https://documentation.metapiping.com/Python/Classes/metal.html

Raises

EnvironmentError if setup has not been completed.

Example

metal = cc.loadMetal(filename)
if metal != None:
    pass

1.2 saveMetal

Save a MetaL model to file, including associated .fre file.

saveMetal(metal: Any, metalFilename: str)

Parameters

  • metal : MetaL object to save.
  • metalFilename : Path to save the metal file.

Raises

EnvironmentError if setup has not been completed.

Example

metal = cc.loadMetal(filename)
if metal != None:
    cc.saveMetal(metal, newFilename)

1.3 getMetal

Return the first MetaL filename in the directory.

getMetal(directory: str)

Parameters

  • directory : Directory to search for .metal files.

Returns

Full path of the first .metal file found, or empty string if none.

Raises

EnvironmentError if setup has not been completed.

Example

metalFilename = cc.getMetal(directory)
if metalFilename != "":
    metal = cc.loadMetal(metalFilename)

1.4 createPipingMetal

Create an empty piping MetaL model with a layer 0.

createPipingMetal()

Returns

Empty piping MetaL object.

More info for class Model at https://documentation.metapiping.com/Python/Classes/metal.html

Raises

EnvironmentError if setup has not been completed.

Example

metal = cc.createPipingMetal()
cc.saveMetal(metal, filename)

1.5 createStructureMetal

Create an empty structure MetaL model with a layer 0.

createStructureMetal()

Returns

Empty structure MetaL object.

More info for class Model at https://documentation.metapiping.com/Python/Classes/metal.html

Raises

EnvironmentError if setup has not been completed.

Example

metal = cc.createStructureMetal()
cc.saveMetal(metal, filename)

2. Solver methods

2.1 solve

Solve a piping or structure MetaL model using specified solver.

solve(filename: str, solvername: str, sandbox: bool)

Parameters

  • filename : Path to the .metal file.
  • solvername : “Aster” or “PipeStress”.
  • sandbox : True to run in a temporary directory, False to run in place.

Returns

Solution object if solved successfully, None otherwise.

More info for class Solution at https://documentation.metapiping.com/Python/Classes/solution.html

Raises

EnvironmentError if setup has not been completed.

Example

filename = "...\\Study1.metaL"
solution = cc.solve(filename, "Aster", True)
if solution != None:
    print(f"  Max stress ratio = {solution.getMaxStressRatio(False)}")
    cc.disposeSolution()

2.2 solvePipingModel

Solve a piping MetaL using specified solver.

solvePipingModel(metal: Any, metalFilename: str, solvername: str, directory: str)

Parameters

  • metal : Piping MetaL object.
  • metalFilename : Path to the metal file.
  • solvername : Solver name (‘Aster’ or ‘PipeStress’).
  • directory : Directory to execute the solver in.

Returns

Solution object if solved successfully, None otherwise.

More info for class Solution at https://documentation.metapiping.com/Python/Classes/solution.html

Raises

EnvironmentError if setup has not been completed.

Example

solution = cc.solvePipingModel(metal, metalFilename, "Aster", directory)
if solution != None:
    print(f"  Max stress ratio = {solution.getMaxStressRatio(False)}")
    cc.disposeSolution()

2.3 solveStructureModel

Solve a structure metal with Aster solver in directory:

solveStructureModel(metal: Any, metalFilename: str, directory: str)

Solve a structure MetaL using Aster solver.

Parameters

  • metal : Structure MetaL object.
  • metalFilename : Path to the metal file.
  • directory : Directory to execute the solver in.

Returns

Solution object if solved successfully, None otherwise.

More info for class Solution at https://documentation.metapiping.com/Python/Classes/solution.html

Raises

EnvironmentError if setup has not been completed.

Example

solution = cc.solveStructureModel(metal, metalFilename, directory)
if solution != None:
    print(f"  Max stress ratio = {solution.getMaxStressRatio(False)}")
    cc.disposeSolution()

2.4 disposeSolution

Close the solution and free associated memory and temporary files.

disposeSolution()

Example

solution = cc.solvePipingModel(metal, metalFilename, "Aster", dir)
if solution != None:
    cc.disposeSolution()

3. Command methods

3.1 createCommand

Create a custom command for the MetaL.

createCommand(commandName: str, metal: Any)

Parameters

  • commandName : Name of the custom command.
  • metal : MetaL object the command applies to.

Returns

Command object ready to execute.

More info for class CustomCommand at https://documentation.metapiping.com/Python/Classes/commands.html

Raises

EnvironmentError if setup has not been completed.

Example

cmd = cc.createCommand("ModifyMetal", metal)
...
cc.executeCommand(cmd)

3.2 executeCommand

Execute a previously created custom command.

executeCommand(command: Any)

Parameters

  • command : Command object returned by createCommand.

Raises

EnvironmentError if setup has not been completed.

Example

cmd = cc.createCommand("ModifyMetal", metal)
...
cc.executeCommand(cmd)

4. Project methods

4.1 addProjectFolder

Add a new folder for a project.

addProjectFolder(directory: str, folderName: str)

Parameters

  • directory : Parent directory where folder will be created.
  • folderName : Name of the folder to create.

Returns

Full path of created folder, empty string if folder already exists.

Raises

EnvironmentError if setup has not been completed.

Example

folder = cc.addProjectFolder(directory, folderName)
if folder != "":
    projectDirectory = cc.addStructureProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
    if projectDirectory != "":
        study = cc.addStructureStudy(projectDirectory, "TEST_STUDY2", 1920, 1080)
        if study != None:
            studyDirectory = os.path.join(projectDirectory, "TEST_STUDY2")
            ...
            cc.removeStudy(projectDirectory, "TEST_STUDY")
            cc.duplicateStudy(projectDirectory, "TEST_STUDY2", "TEST_STUDY3")
            
cc.removeProjectFolder(folder)

4.2 removeProjectFolder

Remove a project folder.

removeProjectFolder(folderDirectory: str)

Parameters

  • folderDirectory : Path of the folder to remove.

Raises

EnvironmentError if setup has not been completed.

Example

folder = cc.addProjectFolder(directory, folderName)
if folder != "":
    projectDirectory = cc.addStructureProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
    if projectDirectory != "":
        study = cc.addStructureStudy(projectDirectory, "TEST_STUDY2", 1920, 1080)
        if study != None:
            studyDirectory = os.path.join(projectDirectory, "TEST_STUDY2")
            ...
            cc.removeStudy(projectDirectory, "TEST_STUDY")
            cc.duplicateStudy(projectDirectory, "TEST_STUDY2", "TEST_STUDY3")
            
cc.removeProjectFolder(folder)

4.3 addPipingProject

Add a new project containing a piping study.

addPipingProject(directory: str, projectName: str, studyName: str, screenWidth: int, screenheight: int)

Parameters

  • directory : Path to the parent directory where the project folder will be created.
  • projectName : Name of the new project folder.
  • studyName : Name of the piping study to create inside the project.
  • screenWidth : Width of the window used to initialize the study (used for UI positioning).
  • screenheight : Height of the window used to initialize the study (used for UI positioning).

Returns

Full path of the created project directory if successful; empty string if the project folder already exists or creation failed.

Raises

EnvironmentError if setup has not been completed.

Example

folder = cc.addProjectFolder(directory, folderName)
if folder != "":
    projectDirectory = cc.addPipingProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
    if projectDirectory != "":
        study = cc.addPipingStudy(projectDirectory, "TEST_STUDY2", 1920, 1080)
        if study != None:
            studyDirectory = os.path.join(projectDirectory, "TEST_STUDY2")
            ...
            cc.removeStudy(projectDirectory, "TEST_STUDY")
            cc.duplicateStudy(projectDirectory, "TEST_STUDY2", "TEST_STUDY3")
            
cc.removeProjectFolder(folder)

4.4 addStructureProject

Add a new project containing a structure study.

addStructureProject(directory: str, projectName: str, studyName: str, screenWidth: int, screenheight: int)

Parameters

  • directory : Path to the parent directory where the project folder will be created.
  • projectName : Name of the new project folder.
  • studyName : Name of the structure study to create inside the project.
  • screenWidth : Width of the window used to initialize the study (used for UI positioning).
  • screenheight : Height of the window used to initialize the study (used for UI positioning).

Returns

Full path of the created project directory if successful; empty string if the project folder already exists or creation failed.

Raises

EnvironmentError if setup has not been completed.

Example

folder = cc.addProjectFolder(directory, folderName)
if folder != "":
    projectDirectory = cc.addStructureProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
    if projectDirectory != "":
        study = cc.addStructureStudy(projectDirectory, "TEST_STUDY2", 1920, 1080)
        if study != None:
            studyDirectory = os.path.join(projectDirectory, "TEST_STUDY2")
            ...
            cc.removeStudy(projectDirectory, "TEST_STUDY")
            cc.duplicateStudy(projectDirectory, "TEST_STUDY2", "TEST_STUDY3")
            
cc.removeProjectFolder(folder)

4.5 removeProject

Remove a project by path.

removeProject(projectDirectory: str)

Parameters

  • projectDirectory : Path of the project folder to remove.

Raises

EnvironmentError if setup has not been completed.

Example

projectDirectory = cc.addPipingProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
if projectDirectory != "":
    cc.removeProject(projectDirectory)

5. Study methods

5.1 addPipingStudy

Add a piping study to an existing project.

addPipingStudy(projectDirectory: str, studyName: str, screenWidth: int, screenheight: int)

Parameters

  • projectDirectory : Path to the project folder.
  • studyName : Name of the new study.
  • screenWidth : Width of the window used to initialize the study.
  • screenheight : Height of the window used to initialize the study.

Returns

Study object if added successfully, None otherwise.

Raises

EnvironmentError if setup has not been completed.

Example

folder = cc.addProjectFolder(directory, folderName)
if folder != "":
    projectDirectory = cc.addPipingProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
    if projectDirectory != "":
        study = cc.addPipingStudy(projectDirectory, "TEST_STUDY2", 1920, 1080)
        if study != None:
            studyDirectory = os.path.join(projectDirectory, "TEST_STUDY2")
            ...
            cc.removeStudy(projectDirectory, "TEST_STUDY")
            cc.duplicateStudy(projectDirectory, "TEST_STUDY2", "TEST_STUDY3")
            
cc.removeProjectFolder(folder)

5.2 addStructureStudy

Add a structure study to an existing project.

addStructureStudy(projectDirectory: str, studyName: str, screenWidth: int, screenheight: int)

Parameters

  • projectDirectory : Path to the project folder.
  • studyName : Name of the new study.
  • screenWidth : Width of the window used to initialize the study.
  • screenheight : Height of the window used to initialize the study.

Returns

Study object if added successfully, None otherwise.

Raises

EnvironmentError if setup has not been completed.

Example

folder = cc.addProjectFolder(directory, folderName)
if folder != "":
    projectDirectory = cc.addStructureProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
    if projectDirectory != "":
        study = cc.addStructureStudy(projectDirectory, "TEST_STUDY2", 1920, 1080)
        if study != None:
            studyDirectory = os.path.join(projectDirectory, "TEST_STUDY2")
            ...
            cc.removeStudy(projectDirectory, "TEST_STUDY")
            cc.duplicateStudy(projectDirectory, "TEST_STUDY2", "TEST_STUDY3")
            
cc.removeProjectFolder(folder)

5.3 removeStudy

Remove a study from a project.

removeStudy(projectDirectory: str, studyName: str)

Parameters

  • projectDirectory : Path to the project folder.
  • studyName : Name of the study to remove.

Raises

EnvironmentError if setup has not been completed.

Example

folder = cc.addProjectFolder(directory, folderName)
if folder != "":
    projectDirectory = cc.addPipingProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
    if projectDirectory != "":
        study = cc.addPipingStudy(projectDirectory, "TEST_STUDY2", 1920, 1080)
        if study != None:
            studyDirectory = os.path.join(projectDirectory, "TEST_STUDY2")
            ...
            cc.removeStudy(projectDirectory, "TEST_STUDY")
            cc.duplicateStudy(projectDirectory, "TEST_STUDY2", "TEST_STUDY3")
            
cc.removeProjectFolder(folder)

5.4 duplicateStudy

Duplicate a study in a project.

duplicateStudy(projectDirectory: str, studyName: str, copyStudyName: str)

Parameters

  • projectDirectory : Path to the project folder.
  • studyName : Name of the study to duplicate.
  • copyStudyName : Name for the duplicated study.

Raises

EnvironmentError if setup has not been completed.

Example

folder = cc.addProjectFolder(directory, folderName)
if folder != "":
    projectDirectory = cc.addPipingProject(folder, "TEST_PROJECT", "TEST_STUDY", 1920, 1080)
    if projectDirectory != "":
        study = cc.addPipingStudy(projectDirectory, "TEST_STUDY2", 1920, 1080)
        if study != None:
            studyDirectory = os.path.join(projectDirectory, "TEST_STUDY2")
            ...
            cc.removeStudy(projectDirectory, "TEST_STUDY")
            cc.duplicateStudy(projectDirectory, "TEST_STUDY2", "TEST_STUDY3")
            
cc.removeProjectFolder(folder)

6. Miscellaneous methods

6.1 copyDirectoryToTemp

Copy a directory to a unique temporary folder.

copyDirectoryToTemp(directory: str)

Parameters

Directory to copy.

Returns

Path to temporary directory or empty string on failure.

Example

temp_dir = cc.copyDirectoryToTemp(directory)

6.2 inspectClass

Export a class or instance as a JSON structure listing properties and public methods.

inspectClass(instance: Any, indent: bool = False)

Parameters

  • instance : The class or instance to inspect.
  • indent : True to pretty-print JSON with indentation.

Returns

JSON string representing the object.

Raises

EnvironmentError if setup has not been completed.

Example

json = cc.inspectClass(metal, False)
print(json)

6.3 findNameSpaceAndAssembly

Return the namespace and assembly of a class in MetaPiping.

findNameSpaceAndAssembly(className: str)

Parameters

  • className : Name of the class.

Returns

Namespace and assembly name, or (None, None) if not found.

Raises

EnvironmentError if setup has not been completed.

Example

namespace, assembly = cc.findNameSpaceAndAssembly("RegularMaterial")
if namespace != None and assembly != None:
    cc.load_dll(assembly)
    # namespace will be "Cwantic.MetaPiping.Core" so you can manually write the next line
    from Cwantic.MetaPiping.Core import RegularMaterial # type: ignore
    mat = RegularMaterial()
    json = cc.inspectClass(mat, False)
    print(json)

6.4 load_dll

Load a .NET DLL from assembly name.

load_dll(dllname: str)

Parameters

  • dllname : Name of the DLL file to load.

Raises

EnvironmentError if setup has not been completed. FileNotFoundError if the DLL cannot be found in installation directories.

Example

namespace, assembly = cc.findNameSpaceAndAssembly("RegularMaterial")
if namespace != None and assembly != None:
    cc.load_dll(assembly)
    # namespace will be "Cwantic.MetaPiping.Core" so you can manually write the next line
    from Cwantic.MetaPiping.Core import RegularMaterial # type: ignore
    mat = RegularMaterial()
    json = cc.inspectClass(mat, False)
    print(json)

Copyright CWANTIC