Fri, Mar 29, 3:32 AM CDT

Welcome to the Marvelous Designer Forum

Forum Moderators: Deenamic, CHMedia Forum Coordinators: FVerbaas

Marvelous Designer F.A.Q (Last Updated: 2023 Sep 15 5:46 am)




Subject: Poser12, Marvelous Designer 10, and a broken MDbridge ....


FVerbaas ( ) posted Thu, 26 November 2020 at 4:15 PM · edited Tue, 26 March 2024 at 12:25 PM
Forum Coordinator

Poser 12 has moved to Python 3. I have made the code update and it all works. I had held release waiting MD10, to iron out any changes 'while I was at it'.
It now appears that MD10 has _also _moved to Python 3, no prob, code was easy to update, but there is an error in the support of the Qt module. This is the code that drives the little window with the buttons.

I have asked MD support about Python and Qt. I expect their answer soon and i will take it form there. If they have no fix to load Qt I will release the Poser 12 update later this weekend.


FVerbaas ( ) posted Fri, 27 November 2020 at 2:29 PM
Forum Coordinator

MD support responded that there currently in MD10 is no GUI support under Python. The QT files are there but it seems not properly attached. I guess the update for MDBridge will have to wait until the next update of MD.


lsauvage ( ) posted Sat, 28 November 2020 at 4:56 AM

Hello. Good news and too bad they broke the access to Qt. Do you think it can work if you release the poser side of the script for people like me who use Poser 12 with MD 9.5 ?


FVerbaas ( ) posted Sun, 29 November 2020 at 12:01 PM · edited Sun, 29 November 2020 at 12:03 PM
Forum Coordinator

@Isauvage: Please try this

In the files you may see some prelude to further development.It is a copy of my personal setup. It should not hurt the current operation, except that it may throw error messages if you try to export a figure other than the one you have the setups for.


FVerbaas ( ) posted Wed, 09 December 2020 at 2:28 PM
Forum Coordinator

OK beginning to find a way through. Light on the horizon. I have made MarvelousDesigner 10 respond to commands from Poser. YAY!!

These were simple commands up to now (Say 'A', what time is it, how much is 2 + 3, that sort of thing) but MD10 responded!!

Also MD10 knows when to listen and when to stop listening.

Next step is making the necessary functions callable and let MD10 load the avatar after Poser saved it, and let MD write out the file so Poser can load it.

The setup will be much more Poser(the 'client') commanding 'the server' MD. There will be a hotkey to toggle MD between Poser control and keyboard control and maybe a hotkey to switch between posed, T or A pose replacing the buttons now in the MD bridgehead window but i do not want to go back to 1980's style CTRL-SHIFT-4 for this ot that function.


jroulin ( ) posted Sat, 12 December 2020 at 4:56 AM

@FVerbaas Good news, let me know if you need a tester when you are ready.


FVerbaas ( ) posted Thu, 17 December 2020 at 1:06 PM
Forum Coordinator

MD is putting up another fight. Somehow it 'caches' the standard output. If I print something to screen, then makea 5 seconds delay, and print something else, I see nothing for 5 seconds and then the results of both print commants. Listed a ticket about this at MD support, but work is necessarily on hold now.


adp001 ( ) posted Sat, 19 December 2020 at 4:40 AM

Maybe just the standard output is blocked. Try this:

import sys, time

# force end of line
print("test test test\n")
time.sleep(5)

print("Trying flush")
sys.stdout.flush()
time.sleep(5)

# maybe stderr works better:
sys.stdout = sys.stderr
print("Trying stderr")
time.sleep(5)




FVerbaas ( ) posted Sat, 19 December 2020 at 7:46 AM
Forum Coordinator

no avail.

First tried version as above. long time nothing then everything appears in one batch

I shuffled the statements a bit, to trap the possibility that the last statement using stderr would release:

import sys, time

# maybe stderr works better:
sys.stdout = sys.stderr
print(time.asctime()+" Trying stderr")
time.sleep(5)

print(time.asctime()+" Trying flush")
sys.stdout.flush()
time.sleep(5)

# force end of line
print(time.asctime()+" test test testn")
time.sleep(5)

but no effect. all this appears at once: Schermafbeelding 2020-12-19 142726.jpg

moved back to original order and added bracketing time reads:

import sys, time

# force end of line
print(time.asctime()+" script startsn")
time.sleep(5)

print(time.asctime()+" Trying flushn")
sys.stdout.flush()
time.sleep(5)

# maybe stderr works better:
sys.stdout = sys.stderr
print(time.asctime()+" Trying stderrn")
time.sleep(5)

print(time.asctime()+'script ends')

still no success. All output comes in one batch Schermafbeelding 2020-12-19 144314.jpg

Guess i will have to wait for MD to solve this. I cannot expect others to jump through loops to use the bridge.


FVerbaas ( ) posted Sat, 19 December 2020 at 8:12 AM · edited Sat, 19 December 2020 at 8:12 AM
Forum Coordinator

Maybe they set this on purpose. Some of the example code that comes with MD appears to be developed for application in a specific, but not specified, pipeline where messages would interupt communication or so. Found something in this respect:

The script apparently runs in a space from which any output is re-routed into a buffer that is flushed after the script ends. Unless I can break out of that bubble my myself there is little I can do until they provide an exit.


FVerbaas ( ) posted Sat, 19 December 2020 at 8:23 AM
Forum Coordinator

It seems to be the case:

Schermafbeelding 2020-12-19 152018.jpg

The output is redirected to one of their modules.


adp001 ( ) posted Sat, 19 December 2020 at 12:18 PM

I thought they redirected. The reason why I wrote about stderr. This should not be redirected, because, well it is there to be sure errors can be notified.

Whatever they did, they did it wrong :)

Maybe the idea to turn things around (MD just as a silent server and Poser sends commands) is the better way?




FVerbaas ( ) posted Sat, 19 December 2020 at 12:53 PM
Forum Coordinator

MD being the silent server and Poser sending commands was the idea froom the outset after I learned thee was no more support for Qt or tkinter.

Breaking the control of the RPC by a keyboard (or mouse) input and resume normal non-slave operation was needed to build a 'kill switch'. If Poser fails (not impossible) th only way to stop the loop was to kill MD via the Program Manager, looe all info, and so on. I could of course make a separate 'Free MD ' app.

In the mean while a more fundamental problem has emerged. It seems that they have limited the API and no longer support morph import the way they did and appear to work with animation files only. That breaks the way the Bridge works. Simple joints bending, as applied in their animation, is grossly insufficient to represent Poser figures.

Life gets pretty difficult now. I need to generate a (.fbx?) animation file to move between poses to make the rough drape and then swap that junky animated avatar shape with a good one and redrape. SIGH!!!


adp001 ( ) posted Sat, 19 December 2020 at 6:08 PM

FVerbaas posted at 6:01PM Sat, 19 December 2020 - #4407981

Breaking the control of the RPC by a keyboard (or mouse) input and resume normal non-slave operation was needed to build a 'kill switch'. If Poser fails (not impossible) th only way to stop the loop was to kill MD via the Program Manager, looe all info, and so on.

That's easy to solve, I think. Let the MD thread create a file at start and, while runnig, check if that file still exists ("run.md" for example). To stop MD simply erase the file.




adp001 ( ) posted Sat, 19 December 2020 at 6:19 PM

FVerbaas posted at 6:12PM Sat, 19 December 2020 - #4407981

Life gets pretty difficult now.

Sounds like they didn't want your bridge to Poser :)

I need to generate a (.fbx?) animation file to move between poses to make the rough drape and then swap that junky animated avatar shape with a good one and redrape. SIGH!!!

The animation has to bein one file? No support for a numbered sequence of OBJ files?




FVerbaas ( ) posted Sun, 20 December 2020 at 12:20 AM · edited Sun, 20 December 2020 at 12:22 AM
Forum Coordinator

adp001 posted at 11:52PM Sat, 19 December 2020 - #4407994

That's easy to solve, I think. Let the MD thread create a file at start and, while runnig, check if that file still exists ("run.md" for example). To stop MD simply erase the file.

Yup, or something like that. Problem was the loop of the RPC server blocked any other activity, be it looking for keystrokes or for files.

Sounds like they didn't want your bridge to Poser :)

Yes, That is something I see as a possibility. They may have the Python support for external reasons, but not very keen on pushing it. Ususlly MD is very reliable. New features need a short iteration but soon end up stable and rock-solid. The way they handle the Python interface is quite different.

The animation has to be in one file? No support for a numbered sequence of OBJ files?

MD does, but not sure if and if so how this is supported under Python. The bridge does not do or use multi-frame animations, but the principle is the same, though, The bridge does do two-frame animations, the first frame being the current pose. There has to be morphing between frames anyhow. .That was a design decision. Making them more frames adds a level of overhead and complexity and it spoils the speed of working. It worked fast and simple via morphing the avatar from old pose to new pose. In practice you sometmes need an intermediate step to go from one of the base poses ('A' and 'T') to the final pose.


FVerbaas ( ) posted Wed, 23 December 2020 at 3:53 PM
Forum Coordinator

I had word from MD support that they will fix the morph loader. That is the up-side of the message.

Down side is the other problems, standard output held and no GUI module will not be fixed. They say that the Python support is only for 'simple repetitve tasks'. I would say you start those with a button in a GUI and you need console output to monitor these processes, know when they are ready, and so on. Looks like I need to apply total external control.

But first let's see when they fix the morphloader.


Privacy Notice

This site uses cookies to deliver the best experience. Our own cookies make user accounts and other features possible. Third-party cookies are used to display relevant ads and to analyze how Renderosity is used. By using our site, you acknowledge that you have read and understood our Terms of Service, including our Cookie Policy and our Privacy Policy.