CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Community Contributions (https://www.cfd-online.com/Forums/openfoam-community-contributions/)
-   -   [cfMesh] Salome 9.3.0 cannot generate .fms file (https://www.cfd-online.com/Forums/openfoam-community-contributions/219932-salome-9-3-0-cannot-generate-fms-file.html)

celestial August 15, 2019 18:03

Salome 9.3.0 cannot generate .fms file
 
first to avoid syntax errors. I had to replace all occurrences of

print ---whatever----

with

print (---whatever----)


in scripts extractFeatureEdges.py and salomeTriSurf.py ( the opening and closing parentheses are essential) (These scripts are found under the installation of cfMesh software you can download cfMesh from their site or find it part of OpenFoam 18.0.6)

I load script salomeTriSurf.py in Salome 9.3.0 after highlighting my mesh in the Mesh module and pressing Ctrl-t)
Then, when I type
triSurf().writeFms('FileName.fms')
in the command window opened up by the loaded script, I get the following error on line 113:

AttributeError: 'collections.OrderedDict' object has no attribute 'iteritems'


I am beginning to wonder if those scripts were written to be understood by python 2.7 but not by python 3.6 which is the one used by Salome 9.3.0

Has anybody encountered this error ?

igor.leo93 September 27, 2019 10:57

Quote:

Originally Posted by celestial (Post 742199)
I am beginning to wonder if those scripts were written to be understood by python 2.7 but not by python 3.6 which is the one used by Salome 9.3.0

You are correct,, check this:
https://www.cfd-online.com/Forums/op...sh-cfmesh.html

Alternatively, you can download salime 8.5, and it should work there.

Best regards,
Igor Carvalho

celestial October 18, 2019 11:57

Thanks Igor. I will stick with version 7.4.0 since I had already downloaded it. Version 9.3.0 does not even work when you modify the scripts using the 2to3 python conversion program. (you get TypeError updateObjBrowser() takes 1 argument but 2 were given)

Carlo_P October 21, 2019 05:53

Hey, anohter way can be to export a stl file a then convert it with surfaceToFMS.

Dinlink January 21, 2020 10:06

1 Attachment(s)
Quote:

Originally Posted by celestial (Post 747450)
Thanks Igor. I will stick with version 7.4.0 since I had already downloaded it. Version 9.3.0 does not even work when you modify the scripts using the 2to3 python conversion program. (you get TypeError updateObjBrowser() takes 1 argument but 2 were given)


You were close, the problem is that it open the file to write in binary:


Code:

open(fileName, 'wb')
there are 3 lines like that... two options: or yo change every string to binary adding a "b" before the string or you open without the binary option:


Code:

open(fileName, 'w')
I just deleted the opening with the binary option and it worked. I attach my modified script which works with Salome 9.4


And for using it, after loading the script, I selected a surface mesh and then on the console i typed:


Code:


S = triSurf(allEdges=True)
S.writeFms("/path/to/fileName.fms")


Ship Designer June 5, 2020 22:15

Quote:

Originally Posted by celestial (Post 747450)
Thanks Igor. I will stick with version 7.4.0 since I had already downloaded it. Version 9.3.0 does not even work when you modify the scripts using the 2to3 python conversion program. (you get TypeError updateObjBrowser() takes 1 argument but 2 were given)

Hi celestial, I've encountered the same problems and I believe you're correct, that the cfMesh Python scripts are for older versions of Python. As a workaround I've used an online converter to convert the source code from Python version 2 to version 3. The updateObjBrowser() function fails, but as workaround, clicking on Refresh in the object tree context menu will update the tree and display the newly created object. Apparently, in Python the calling object is always an implied argument when a method is called, thus 2 arguments are counted, even if only one is visible in the source code. This might be an indication that the method is expected to be called without (visible) arguments (empty brackets only). I'll check the current Salome Python API and try that out. Apart from the changed Python version, some Salome APIs have had minor changes as well. Thus the cfMesh Python scripts are not compatible with the latest version of Salome.

Ship Designer June 5, 2020 22:18

Quote:

Originally Posted by celestial (Post 747450)
Thanks Igor. I will stick with version 7.4.0 since I had already downloaded it. Version 9.3.0 does not even work when you modify the scripts using the 2to3 python conversion program. (you get TypeError updateObjBrowser() takes 1 argument but 2 were given)

Hi celestial, I've encountered the same problems with Salome 9.4.0 and I believe you're correct, that the cfMesh Python scripts are for older versions of Python. As a workaround I've used an online converter to convert the source code from Python version 2 to version 3, as you did. The updateObjBrowser() function fails, but as workaround, clicking on Refresh in the object tree context menu will update the tree and display the newly created object. Apparently, in Python the calling object is always an implied argument when a method is called, thus 2 arguments are counted, even if only one is visible in the source code. This might be an indication that the method is expected to be called without (visible) arguments (empty brackets only). I'll check the current Salome Python API and try that out. Apart from the changed Python version, some Salome APIs have had minor changes as well. Thus the cfMesh Python scripts are not compatible with the latest version of Salome.

Engin.shlxtn August 12, 2020 14:37

salomeTriSurf3.py
 
Hello
I used salomeTriSurf3.py and many other script, But all failed. please help me to overcome that issues. I got that error. >>> exec(open("/home/smeralda/Cfmesh/cfMesh/python/Salome/salomeTriSurf3.py", "rb").read())
>>> triSurf().writeFms(‘FileName.fms’)
Traceback (most recent call last):
File "/opt/Salome/V2019.0.3_universal/prerequisites/Python-365/lib/python3.6/codeop.py", line 87, in _maybe_compile
code1 = compiler(source + "\n", filename, symbol)
File "/opt/Salome/V2019.0.3_universal/prerequisites/Python-365/lib/python3.6/codeop.py", line 102, in _compile
return compile(source, filename, symbol, PyCF_DONT_IMPLY_DEDENT)
File "<input>", line 1
triSurf().writeFms(‘FileName.fms’)
^
SyntaxError: invalid character in identifier
>>>

Engin.shlxtn August 12, 2020 14:46

Quote:

Originally Posted by Dinlink (Post 755188)
You were close, the problem is that it open the file to write in binary:


Code:

open(fileName, 'wb')
there are 3 lines like that... two options: or yo change every string to binary adding a "b" before the string or you open without the binary option:


Code:

open(fileName, 'w')
I just deleted the opening with the binary option and it worked. I attach my modified script which works with Salome 9.4


And for using it, after loading the script, I selected a surface mesh and then on the console i typed:


Code:


S = triSurf(allEdges=True)
S.writeFms("/path/to/fileName.fms")


salomeTriSurf3.py
Hello
I used salomeTriSurf3.py and many other script, But all failed. please help me to overcome that issues. I got that error. >>> exec(open("/home/smeralda/Cfmesh/cfMesh/python/Salome/salomeTriSurf3.py", "rb").read())
>>> triSurf().writeFms(‘FileName.fms’)
Traceback (most recent call last):
File "/opt/Salome/V2019.0.3_universal/prerequisites/Python-365/lib/python3.6/codeop.py", line 87, in _maybe_compile
code1 = compiler(source + "\n", filename, symbol)
File "/opt/Salome/V2019.0.3_universal/prerequisites/Python-365/lib/python3.6/codeop.py", line 102, in _compile
return compile(source, filename, symbol, PyCF_DONT_IMPLY_DEDENT)
File "<input>", line 1
triSurf().writeFms(‘FileName.fms’)
^
SyntaxError: invalid character in identifier
>>>

Ship Designer August 12, 2020 15:23

Quote:

Originally Posted by Engin.shlxtn (Post 780269)
Hello
triSurf().writeFms(‘FileName.fms’)
^
SyntaxError: invalid character in identifier
>>>

Those single quotes look odd. Is this the error output? What are you trying to do? If you provide more information, getting help is more likely.

Engin.shlxtn August 13, 2020 22:33

Succeed
 
Quote:

Originally Posted by Dinlink (Post 755188)
You were close, the problem is that it open the file to write in binary:


Code:

open(fileName, 'wb')
there are 3 lines like that... two options: or yo change every string to binary adding a "b" before the string or you open without the binary option:


Code:

open(fileName, 'w')
I just deleted the opening with the binary option and it worked. I attach my modified script which works with Salome 9.4


And for using it, after loading the script, I selected a surface mesh and then on the console i typed:


Code:


S = triSurf(allEdges=True)
S.writeFms("/path/to/fileName.fms")


Hello

Finally succeeded thanks a lot

Engin.shlxtn August 14, 2020 22:42

Problem
 
Quote:

Originally Posted by Dinlink (Post 755188)
You were close, the problem is that it open the file to write in binary:


Code:

open(fileName, 'wb')
there are 3 lines like that... two options: or yo change every string to binary adding a "b" before the string or you open without the binary option:


Code:

open(fileName, 'w')
I just deleted the opening with the binary option and it worked. I attach my modified script which works with Salome 9.4


And for using it, after loading the script, I selected a surface mesh and then on the console i typed:


Code:


S = triSurf(allEdges=True)
S.writeFms("/path/to/fileName.fms")



Hello
Thank you for your post. I did exactly what you wrote but failed at the begging of pressing Enter button. I don't know why?.
Thanks again.

Engin.shlxtn August 16, 2020 12:48

Thanks
 
Quote:

Originally Posted by Ship Designer (Post 780274)
Those single quotes look odd. Is this the error output? What are you trying to do? If you provide more information, getting help is more likely.

Hello
Thank you very much. I fixed the problem of cfmesh with the blender.
Thanks again.

joddy466 December 21, 2022 22:19

1 Attachment(s)
If anyone stumbles on this post, what worked for me (Salome 9.9.0) was:


1) Update extractFeatureEdges.py to py2/3 using futurize. Skip to Step 1, 1b here if you already have python installed. This updates your file to work with Python 2 or 3.


2) Delete "x" in "xrange" in 3 places to use "range" which is what is used in Python3


3) Delete or comment out the last 2 lines (line 131,132). in extractFeatureEdges.py. cfmesh hasn't been updated in years so should be same for you. i.e



# if salome.sg.hasDesktop():
# salome.sg.updateObjBrowser(True)


4) Run script in Salome as usual


5) Refresh through object browser as "Ship Designer" mentioned


This worked for me!


All times are GMT -4. The time now is 12:57.