Is Perspective Workstation basically just a wrapper around launching perspective projects? Or does/can it act as a client itself and able perform tasks independently from the GW? EG perform animations of objects that don’t make references to any resources in the GW
Vision is and has been for many years a top-class desktop application. It is the best choice for traditional industrial plant-floor and desktop screens, standalone HMIs, and the like. If you need a full, production-ready application right now, then it is best to choose Vision.
So the big question I really have is:
At a mile high level, is the Vision architecture an equivalent to Perspective, (IE the client only acts as an interface to the system, and each type is just using different transport and visualization technologies?) Or is the Vision client fundamentally smarter than Perspective, and does allow local processing?
The reason behind this is that I have whipped up my beautifully skeuomorphic demonstration HMI in Perspective and I am having some issues with missing some mouse events in my fancy momentary pushbuttons  and I’m trying to decide if I should have built this in Vision instead 
 This system is never going anywhere near a real machine, it was only ever intended as a demonstrator of what could be done visually and how far I could push my design skills.
 Never-less it’s been a great ride with Perspective and I have learnt an huge amount of things.
I’m not sure I could recommend one or the other, maybe others will have an opinion. I don’t know why you’d be missing mouse events in Perspective, regardless of what you’re doing… but
It does allow local processing. Client scope scripts run in the client, which is why Vision Clients can access things like the file system and serial ports or get the hostname without relying on what the IP address that gateway sees.
One caveat: While the execution of code happens locally, it will not happen without a connection back to the gateway - not because it couldn’t, but because the decision was made a long time ago to not allow this in Vision.
That’s an interesting concept that I haven’t tried. But fundamentally wouldn’t the button component still rely on the same mouse events that I am relying on explicitly?
Going off into the weeds the flow of my button architecture is:
On Mouse down, set a local bool property to true (which is eventually bound to a tag in the PLC)
The visual state of the button press is indicated by changing a radial fill that is bound to the state of the local bool (and for flexibility the radial fill itself is calculated from a script attached to the button)
On Mouse Up (and also Mouse Leave), reset the bool to false
Redo the radial fill based on the bool value etc
What I have encountered is that sometimes when I click a button, it presses OK, but doesn’t un-press at all, even when I move the mouse off the button. It’s only when I move back on and then off does the un-press trigger.
I am not sure why this occurs, but if everything (including local properties) are stored on the GW then this could simply be an issue with data transport from the Perspective session back to the GW.
Does that mean a script attached to a component will run in the Vision client itself (EG one that calculates a new fill color based on a local property attached to that component)? My understanding of Perspective is that all scripts run on the GW
Hmm. I’m not sure if there’s anything that breaks it down specifically regarding where things run, but it’s actually pretty simple:
In Perspective, EVERYTHING RUNS ON THE GATEWAY. That’s it. What you see in the browser is basically just the view of the current session state being rendered by the browser. The session is synced between browser and gateway. All the logic runs on the gateway and the changes to the session are synced up to the browser, and your input events from the browser are relayed down to the session to react to.
edit: I don’t even know what actions Paul is talking about, but that’s probably my lack of Perspective knowledge. Maybe that in code running on the gateway you can trigger certain things to happen in the browser?