Latest posts made by JohnThomas
-
Tags Under Cloners
Hello,
I'm working on a tag plugin that is using positional data of an object to drive parameters. This is simple and straightforward so it is working properly using the code below inside of the Execute function to drive the Radius value of a sphere object.
EXECUTIONRESULT TagParamRun::Execute(BaseTag* tag, BaseDocument* doc, BaseObject* op, BaseThread* bt, Int32 priority, EXECUTIONFLAGS flags) { if (tag->GetObject()) { BaseObject* parentObj = tag->GetObject(); if (parentObj->GetType() == Osphere) { ApplicationOutput("Parent object " + parentObj->GetName()); Matrix sphereMat = parentObj->GetMg(); Vector spherePos = sphereMat.off; Vector centerPos = Vector(0); Float distance = sqrt(pow(spherePos.x - centerPos.x, 2) + pow(spherePos.y - centerPos.y, 2) + pow(spherePos.z - centerPos.z, 2)); GeData setData; distance = distance / 2; if (distance > 50) distance = 50; setData.SetFloat(100 - distance); parentObj->SetParameter(ConstDescID(DescLevel(PRIM_SPHERE_RAD)), setData, DESCFLAGS_SET::NONE); } } return EXECUTIONRESULT::OK; }
My issue comes in when I have the object with my tag under a Cloner. As I drag the tag's object around the scene all of the cloned spheres are changing their radius based on that single object instead of their cloned positions. Shown below.
If I make the cloner edititable then the setup is working as I would expect.
Is there a way to make it so that my tag is running after the Cloner has run? In this case 9 separate spheres with attached tags running on their own positions.
Any help would be greatly appreciated.
John Thomas
-
RE: BitmapButton in Resource file
@i_mazlov Thanks for the response.
I tried utilizing the code and I am not getting any response when I try running it.
John Thomas
-
RE: BitmapButton in Resource file
Any ideas, my GetDParameter is defined with this code.
Bool ExampleFieldLayer::GetDParameter(const GeListNode* node, const DescID& id, GeData& t_data, DESCFLAGS_GET& flags) const { Int32 ID = id[0].id; if (ID == 1006) { Int32 dirty = 0; maxon::WeakRawPtr<const GeListNode> weakPtr(node); if (weakPtr.Get()) { GeListNode* convert = MAXON_REMOVE_CONST(weakPtr.Get()); BaseList2D* convertObject = static_cast<BaseList2D*>(convert); BitmapButtonStruct bbs(convertObject, id, dirty); t_data = GeData(bbs, CUSTOMDATATYPE_BITMAPBUTTON); flags |= DESCFLAGS_GET::PARAM_GET; } } return SUPER::GetDParameter(node, id, t_data, flags); }
-
RE: Python: Detect Plugins
Thanks for the response. I'll see if this does what I need it to
John Thomas
-
RE: Python: Detect Plugins
Thanks for the response.
Going through the code you have the line
assetDescription = repository.FindLatestAsset(maxon.AssetTypes.NodeTemplate(), assetId, maxon.Id(), maxon.ASSET_FIND_MODE.LATEST)
Looking at the sdk the NodeTemplate for AssetTypes first appears in 2024.2. Is there a way to tell if there is a Maxon One asset in 2023 or is this new functionality that isn't possible in older versions?
John Thomas
-
RE: BitmapButton in Resource file
Thanks for the response.
My SetDParamter function is defined with this code.
Bool ExampleFieldLayer::SetDParameter(GeListNode* node, const DescID& id, const GeData& t_data, DESCFLAGS_SET& flags) { switch (id[0].id) { case 1006: // ID_EXECUTERUN { if (flags & DESCFLAGS_SET::USERINTERACTION) { ApplicationOutput("Running SetDParameter"); } break; } } return SUPER::SetDParameter(node, id, t_data, flags); }
And at no point am I getting a print from the BitmapButton being pressed.
John Thomas
-
BitmapButton in Resource file
Hello.
I'm currently trying to create a FieldLayer plugin that is using a resource file for the creation of its description. Everything is working properly with the exception of a BitmapButton that does not seem to be sending any kind of message that it has been pressed.
Here is the line from the resource file that I am creating the BitmapButton.
BITMAPBUTTON ID_EXECUTERUN {BUTTON;}
Inside of Message I Have the MSG_DESCRIPTION_GETBITMAP to set the image for the bitmap.
if (type == MSG_DESCRIPTION_GETBITMAP) { DescriptionGetBitmap* dgb = static_cast<DescriptionGetBitmap*>(t_data); Int32 ID = dgb->_descId[0].id; AutoAlloc<BaseBitmap> bm; Filename bg; if (ID == ID_EXECUTERUN ) { bg = GeGetPluginPath() + Filename("res") + Filename("Icons") + Filename("Execute.png"); bm->Init(bg); AutoAlloc<BaseBitmap> bm2; bm2->Init(bm->GetBw() / 2, bm->GetBh() / 2); bm->ScaleIt(bm2, 256, TRUE, TRUE); dgb->_bmp = bm2.Release(); } }
There was a forum post that was dealing with the same issue, but the solution offered in the post does not seem to be working. I put prints in both the SetDParameter function as well as the MSG_DESCRIPTION_COMMAND message and neither one is ever being printed, all of the other controls I have are working properly.
Is there something fundamental that I'm missing that is preventing it from catching that the button is being pressed?
Any help would be greatly appreciated.
John Thomas