#strict 2 local target; local rect; local mark; func Initialize() { SetVisibility(VIS_None); } func Set(object targetObj, array targetRect, string name) { target = targetObj; name = name || target->GetName(); var category = target->GetCategory(); if(category & C4D_StaticBack) { category &= ~C4D_StaticBack; category |= C4D_Structure; } SetName(name); SetCategory(category | C4D_MouseIgnore); SetAction("Attach", target); rect = targetRect; UpdateTransferZone(); SetGraphics(0, this, GetID(target), GFX_Overlay, GFXOV_MODE_Picture); return this; } func AttachTargetLost() { RemoveObject(); } func UpdateTransferZone() { if(rect) { SetVertex(0, VTX_X, - rect[0] + GetVertex(0, VTX_X, target), this, VTX_SetPermanentUpd); SetVertex(0, VTX_Y, - rect[1] + GetVertex(0, VTX_Y, target), this, VTX_SetPermanentUpd); SetShape(0, 0, rect[2], rect[3]); } } func ControlLeft() { return target && target->~ControlLeft(...); } func ControlLeftDouble() { return target && target->~ControlLeftDouble(...); } func ControlLeftSingle() { return target && target->~ControlLeftSingle(...); } func ControlLeftReleased() { return target && target->~ControlLeftReleased(...); } func ControlRight() { return target && target->~ControlRight(...); } func ControlRightDouble() { return target && target->~ControlRightDouble(...); } func ControlRightSingle() { return target && target->~ControlRightSingle(...); } func ControlRightReleased() { return target && target->~ControlRightReleased(...); } func ControlUp() { return target && target->~ControlUp(...); } func ControlUpDouble() { return target && target->~ControlUpDouble(...); } func ControlUpSingle() { return target && target->~ControlUpSingle(...); } func ControlUpReleased() { return target && target->~ControlUpReleased(...); } func ControlDown() { return target && target->~ControlDown(...); } func ControlDownDouble() { return target && target->~ControlDownDouble(...); } func ControlDownSingle() { return target && target->~ControlDownSingle(...); } func ControlDownReleased() { return target && target->~ControlDownReleased(...); } func ControlThrow() { return target && target->~ControlThrow(...); } func ControlThrowDouble() { return target && target->~ControlThrowDouble(...); } func ControlThrowSingle() { return target && target->~ControlThrowSingle(...); } func ControlThrowReleased() { return target && target->~ControlThrowReleased(...); } func ControlDig() { return target && target->~ControlDig(...); } func ControlDigDouble() { return target && target->~ControlDigDouble(...); } func ControlDigSingle() { return target && target->~ControlDigSingle(...); } func ControlDigReleased() { return target && target->~ControlDigReleased(...); } func Grabbed() { return target && target->~Grabbed(...); } global func AddGrabHelper() { return CreateObject(GH7I)->Set(this, ...); } func ShowMark(bool hide) { if(!hide && !mark) { mark = CreateSelectMark()->MarkObject(this); } if(hide && mark) { RemoveObject(mark); } }