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).
On 04/11/2015 at 13:23, xxxxxxxx wrote:
Hi all, have a ToolData plugin that I am building. The SubDialog has a Link Box which I want to have the Pick Mode activated for the user when the tool is launched. I can not for the life of me figure out how to do this?? Any idea on how to do this in python? I don't want the user to have to go to and click on the mouse cursor button.
Thank you for the help.
On 05/11/2015 at 02:29, xxxxxxxx wrote:
Hi,
The Pick Mode can be activated by code but this relies on the internal ID for the LinkBoxGui Pick Object button:
def InitValues(self) : msg = c4d.BaseContainer(c4d.BFM_ACTION) msg.SetInt32(c4d.BFM_ACTION_ID, 1005) self.SendMessage(LINKBOX_ID, msg) return True
Note this code has to be run in the SubDialog InitValues(), not the CreateLayout() because it crashes the application there!
A better solution is to use ViewportSelect helper class in the ToolData::MouseInput() to pick yourself an object and set it in the LinkBoxGui. Here's some code:
def MouseInput(self, doc, data, bd, win, msg) : mouse_x = int(msg[c4d.BFM_INPUT_X]) mouse_y = int(msg[c4d.BFM_INPUT_Y]) viewport_select = c4d.utils.ViewportSelect() # Pick objects objects = viewport_select.PickObject(bd, doc, mouse_x, mouse_y, rad=10, flags=c4d.VIEWPORT_PICK_FLAGS_0) if not len(objects)>=1: return True # Get first picked object obj = objects[0] if obj: self.dialog.SetObjectLink(obj) return True
self.dialog is the SubDialog for the ToolData SetObjectLink() is a method defined in the SubDialog overriden class that simply calls LinkBoxGui.SetLink() with the picked object
On 05/11/2015 at 13:32, xxxxxxxx wrote:
Yannick Thanks so much! I was able to get both techniques working! I really appreciate your help. I did not know you could control the subdialog instance inside the ToodData Class this makes things easier for me :).
Now I am just trying to replicate the highlight effect that the Pick Mode does.... I feel I am close just don't know what to do next to draw the highlight mode in the viewport. I having trouble finding a good explanation of how highlight mode works. This is what I have so far by using the ToodData::GetCursorInfo() I can figure out which object my mouse is over and can print out the name of the object, now I just need to draw it in highlight mode. But not sure how to do that...
def GetCursorInfo(self, doc, data, bd, x, y, bc) : if bc.GetId() == -1: print "SCAN FOR CURSOR OJBECT" op = c4d.utils.ViewportSelect().PickObject(bd, doc, x, y, rad=int(10), flags=c4d.VIEWPORT_PICK_FLAGS_0) #This will print the name of the object my mosue is over #print op[0] # Not sure what do do next... inable highlight handle or something... highlightHandle = op[0].GetHighlightHandle(bd)
return True
Anyone have any tips on how do get highlight mode working? Sorry if these are noob questions, I was looking on the forums for a similar question and documentation and could not figure it out.
On 06/11/2015 at 06:31, xxxxxxxx wrote:
The highlight effect that the Pick Mode does can be obtain starting a PickSession in the active document. Unfortunately this cannot be done with the Python API as BaseDocument.StartPickSession()/StopPickSession() and PickSessionDataStruct are missing.
So far the best and shortest solution is to send an action message to the LinkBox as shown in the first code I posted in my previous message.
On 06/11/2015 at 09:06, xxxxxxxx wrote:
OK thanks for that explanation I appreciate your time. That is a bummer that it can not be done simply with PythonAPI but that is ok. You have helped me make good progress on my first plugin.