Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Hi, I an converting all my C.O.F.F.E.E scripts to python. But I have a problem with python at the real-time display of the objects I create. I synthesized this problem in the simplified script below. If I press on the button <Creation null polygon> the polygon will only show on the screen when I close the plugin window. How to make the polygon appear on the screen without being obliged to close the plugin window ?
import c4d from c4d import gui, documents button_1 = 1000 class MyDialog(c4d.gui.GeDialog): def CreateLayout(self): self.SetTitle("Creation polygon") self.AddButton(button_1, c4d.BFH_LEFT, 300, 24, "Creation null polygon") self.GroupEnd() return True def Command(self, cid, msg): if cid == button_1: polygon = c4d.BaseObject(c4d.Opolygon) doc = c4d.documents.GetActiveDocument() doc.InsertObject(polygon) c4d.EventAdd() return True class MyCommandData(c4d.plugins.CommandData): def Execute(self, doc): dlg = MyDialog() dlg.Open(c4d.DLG_TYPE_MODAL, -1, -1, 400, 200) dlg.InitValues(self) return True if __name__ == "__main__": c4d.plugins.RegisterCommandPlugin(id=10000015, str="Creation polygon", info=0, icon=c4d.bitmaps.BaseBitmap(), help="", dat=MyCommandData())
Hi,
have you tried using a non-modal dialog? I am using dialogs not very often, but it could be possible that the modal dialog blocks redraws of your scene.
dlg.Open(c4d.DLG_TYPE_ASYNC, -1, -1, 400, 200)
Sometimes you have also to invoke a redraw manually.
c4d.EventAdd(c4d.EVENT_FORCEREDRAW) or c4d.DrawViews(c4d.DRAWFLAGS_NONE)
Cannot say much else, do not have c4d here to test your code.
Cheers zipit
You are calling the Dialog via DLG_TYPE_MODAL. So the Dialog is blocking the main thread until you close it. Try opening the dialog with DLG_TYPE_ASYNC.
DLG_TYPE_MODAL
DLG_TYPE_ASYNC
It was indeed the modal window that prevented the real-time display of objects. By putting the code below, the display of objects is immediate.
class MyCommandData(c4d.plugins.CommandData): def Execute(self, doc): self.dlg = MyDialog() self.dlg.Open(c4d.DLG_TYPE_ASYNC, -1, -1, 400, 200) return True
However, the plugin window opens to the left of my screen and to move it to the center of the screen, I must first enlarge it. I find that a little strange !
But it can be considered that my problem is solved.
Thank you for your answers
@Kantronin said in Objects created in real time:
self.dlg.Open(c4d.DLG_TYPE_ASYNC, -1, -1, 400, 200) However, the plugin window opens to the left of my screen and to move it to the center of the screen, I must first enlarge it.
self.dlg.Open(c4d.DLG_TYPE_ASYNC, -1, -1, 400, 200)
However, the plugin window opens to the left of my screen and to move it to the center of the screen, I must first enlarge it.
The GeDialog manual says:
If xpos=-1 and ypos=-1 the dialog will be opened at the current mouse position. If xpos=-2 and ypos=-2 the dialog will be opened at the center of the screen.
So, if the dialog opens to the left of your screen, I guess that's where your mouse was? Try -2, -2.
Hello,
For your next threads, please help us keeping things organised and clean. I know it's not your priority but it really simplify our work here.
@zipit and @Cairyn have already answer here (thanks a lot) nothing to add.
Cheers, Manuel