CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   ANSYS Meshing & Geometry (http://www.cfd-online.com/Forums/ansys-meshing/)
-   -   [DesignModeler] Macro / Script for automatic geometry import (http://www.cfd-online.com/Forums/ansys-meshing/119269-macro-script-automatic-geometry-import.html)

wasabi June 13, 2013 05:10

Macro / Script for automatic geometry import
 
Hello everybody,

First I want to say that I searched in the forum for something similar but I found nothing, so Im opening this topic.


Im performing an optimization in which the 3rd-party optimizer runs an external software for geometry generation that generates an .igs file, that, imported into DesignModeler, is the starting point for a parametric model, from where starts a complete CFD workflow.

Heres my problem:

this .igs file is already present inside the DesignModeler tree, and, even if it is updated at every optimization step (by optimizer-->geometry generation software), it is not automatically updated in DM (think that even if the file is missing the geometry keeps working, I get only a message saying that the original file is missing...).


So I tried to record a script from Workbench in File-->Scripting-->Start recording journal performing these actions:

Opening DM from geometry block --> go to the Import feature in the tree --> RMB "Edit selections" --> Giving the path of .igs file --> Generate --> exit DM --> save file.

But when I run this script workbench only opens DM and closes it, without doing all the import procedure.


Does somebody have any kind of hint for me?

Thanks in advance, best regards.

PSYMN June 14, 2013 10:13

I don't know what is wrong with DM (why it doesn't try to update), but generally speaking, IGES is a problem.

Each time you generate an IGES file, it generates new surface names without any consistency. It is a difficult starting point for any sort of parametric update.

Just about anything else would be better.

wasabi June 14, 2013 11:24

1 Attachment(s)
First thanks for the answer.

Quote:

Originally Posted by PSYMN (Post 434016)
I don't know what is wrong with DM (why it doesn't try to update)

I even tried "manually" to change the imported file, change in WB a parameter (so he was obliged to refresh the DM component) and then I had a look in DM to see if the imported geometry was changed but it was still the old one. To change it, in the "Import" feature properties i found a feature "Refresh"(Yes/No) that if selected as Yes, gives me the chance to click on Generate and so the new geometry is loaded (please see screenshot attached). But this property has to be set manually every time, the simple Refresh of the DM component do not read the geometry file every time, thats what Im noticing.

By the way, with some help I set up a Python script to command WB operations and a JavaScript script to make DM loading the file, and right now Im performing some tests, but I have to wait for the results (finger crossed!).


Concerning the IGES file, thanks for the hint, I will consider a change of format (will STEP be fine?).

Thanks again!

PSYMN June 14, 2013 14:13

Step and IGES are similarly bad... ACIS, Parasolid, dwg and other formats are better because they persistently name their entities the same way between updates.

vigges June 18, 2013 07:59

wasabi,

would you mind sharing the code for both WB and DM operations? I've reached an dead end and maybe you can get me out of there ;)

thanks,
vigges

wasabi June 20, 2013 05:20

Quote:

Originally Posted by vigges (Post 434633)
wasabi,

would you mind sharing the code for both WB and DM operations? I've reached an dead end and maybe you can get me out of there ;)

thanks,
vigges

I need firts to check if I can, I developed it in a project of the company Im working for.

ICS August 12, 2013 19:12

Im also facing problems importing geometries... I already generate parasolids, but it contains many bodies and when I change the geometry all of them become a separate part... I need to automaticaly form a new part with all the bodies in the geometry... how can I do it using script?

mvoss August 13, 2013 03:45

Regarding the IGES import:
You cannot use the "journaling" for the DM. Wb is Phython, DM is JScript.
BUT: you can send JScript Commands to an DM-Container via the wb-journal.
JScript isnt supported but there is an overview in the documentation.

I was facing a very similar problem with ICEM and a parametric geometry in an EXTRA dm container on the wb-schematic. I solved the not-upto-date-geometry-error by including the standalone geometry container in the appropriate simulation container (CFX, FLUENT, ANSYS, etc.) . Since the geometry AND the whole downstream action (meshing, solving, post) are stuffed in ONE update call everything worked out. There is smth. strange about different containers on the wb-schematic calling the update for containers downstream in the workflow and also vice versa. Reported it to the support ( they gave the idea mentioned above).

Hope this helps..

Matthias

ICS August 13, 2013 06:57

Thanks for your help!

I understand that I cannot use the "journaling" for the DM. But I can call a JScript from the wokbench journal... so what i'm trying to do is:

WB journal:

system1 = GetSystem(Name="FFF")
geometry1 = system1.GetContainer(ComponentName="Geometry")
geometry1.SetFile(FilePath="C:...........x_t")
geometry1.Edit()
script = open('C:...............js', 'r')
geometry1.SendCommand(Command=script.read())

This code changes the .x_t geometry, opens the DM and runs the JScript file... but how would it be the JScript code to select all bodies in the geometry and form a single part?

Kapi April 1, 2014 19:05

Hi ICS,

Quote:

Originally Posted by ICS (Post 445407)
but how would it be the JScript code to select all bodies in the geometry and form a single part?

there are few functions for all these things, you need to go inside codes to find these functions.
Anyway, what you can do is at the end of your "geometry.js" code, add this

var X = agb.FormNewPartFromAllBodies();
X.name = "Y";

this will create single part from all the bodies.
"Y" is th ename you want for the part which includes all bodies

Hope it helps
Cheers
KAPI

ICS April 2, 2014 06:40

Hi Kapi, thanks for your help.

I had already managed a solution, but I forgot to post here... this is how the code became:

system1 = GetSystem(Name="FFF")
geometry1 = system1.GetContainer(ComponentName="Geometry")
geometry1.Edit()
geometry1.SendCommand(Command="""ag.m.NewSession (1);
ag.gui.CreateImport("C:/....x_t");
agb.regen();
ag.gui.PickFilter(5, true);
ag.gui.SelectAll();
ag.m.FormBodyGroup();""")

It opens the DM, create a new session, import the new geometry file, select all bodies and form a new group.

In another thread I discussed a way to update the mesh and export the file: http://www.cfd-online.com/Forums/ans...esh-macro.html

Kapi April 9, 2014 00:27

Hi ICS,
this is alone of the ways to make part from bodies in WBJN file.

Quote:

Originally Posted by ICS (Post 483420)
agb.regen();
ag.gui.PickFilter(5, true);
ag.gui.SelectAll();
ag.m.FormBodyGroup();""")

what I posted above is for JS file where all your geometry code goes!
I checked mesh macro link as well, its good, quiet similar to geometry.

Keep up the good work!

Cheers
KAPI

maw November 18, 2014 13:05

Do you know a method of choosing only a few bodies as opposed to all?

Kapi November 24, 2014 01:07

Hi Maw,

In your JS script you can either do Named selection of bodies and use them how you want or other option is to pick them from top to bottom, something like this

Code:

body1 = ag.fm.Body(ag.fm.BodyCount-1);
and then rename them and use them in your code.

Hope this helps.

Cheers
Kapi


All times are GMT -4. The time now is 02:13.