VicoWang Posted Friday at 03:39 PM Posted Friday at 03:39 PM (edited) This is a radial menu tool that can be configured with up to 18 custom commands, accessed by double-clicking with the mouse. Installation method (upgradable in the future): [Omni Wheel] VCID: US87Y8 @ VedaCAD Note: To install via VCID, you need to install VedaCAD in advance and log in to a free account (or PRO account). Edited Saturday at 05:37 AM by VicoWang Quote
Steven P Posted Friday at 06:14 PM Posted Friday at 06:14 PM Could you put up a screen shot so we know what you want us to download - i'm very sceptical about just down loading unknown files. Better again would be the code to look at first of course. Quote
VicoWang Posted Saturday at 01:54 AM Author Posted Saturday at 01:54 AM 7 hours ago, Steven P said: Could you put up a screen shot so we know what you want us to download - i'm very sceptical about just down loading unknown files. Better again would be the code to look at first of course. I tried to fix the demo file, can you see that GIF? This plugin does not provide the source code. Quote
BIGAL Posted Saturday at 02:08 AM Posted Saturday at 02:08 AM No Gif. Use window+shift+r thats windows built in recorder. Quote
VicoWang Posted Saturday at 03:33 AM Author Posted Saturday at 03:33 AM 1 hour ago, BIGAL said: No Gif. Use window+shift+r thats windows built in recorder. A bit strange, I can see the GIF here. Quote
BIGAL Posted Saturday at 11:07 PM Posted Saturday at 11:07 PM Gif is there now, a cool idea. The menu issue for me is writing a CUI or CUIX for a custom ribbon, but say using notepad or excel, if you change a cuix to zip can look inside. It is made of a few XML files, that would be helpfull. I also made a write mnu lsp so it helps the typing time, use it for pop menu's. One of the things I have played with is make dcl code from a dwg, uses blocks etc, but need to make it look at a more complex dcl. 1 Quote
VicoWang Posted yesterday at 12:55 AM Author Posted yesterday at 12:55 AM 1 hour ago, BIGAL said: Gif is there now, a cool idea. The menu issue for me is writing a CUI or CUIX for a custom ribbon, but say using notepad or excel, if you change a cuix to zip can look inside. It is made of a few XML files, that would be helpfull. I also made a write mnu lsp so it helps the typing time, use it for pop menu's. One of the things I have played with is make dcl code from a dwg, uses blocks etc, but need to make it look at a more complex dcl. It's cool how we both use LISP to bypass tedious UI coding! What you described about unzipping CUIX to tweak the XML is very much like tweaking static DCL. It's a great, geeky hack for customization, and highly reliable since the underlying files are persistent. Though we take slightly different paths on file management. Instead of juggling multiple external files to get a feature working, I'm totally obsessed with the 'all-in-one LISP' paradigm. In my VedaCAD main program(Fully utilized temporary DCL technology to achieve multi-level dynamic DCL pages similar to web pages), the Gomoku game, and this OW LISP, I generate temporary DCLs on-the-fly. I basically use native CAD entities to draw the interface directly in model space, and then destroy/clean up everything right after the routine finishes. Pure plug-and-play. Quote
Ajmal Posted 11 hours ago Posted 11 hours ago (edited) Nice work. I built the same kind of wheel for Revit a while back, so it was good to see someone doing it on the AutoCAD side. I could not see it running from the thread either, so a short screen recording would probably get you more replies here than anything else. Everything below is from my side, on Revit, so translate it however it fits. These are the ones that cost me the most time. Aim by the pointer angle, not by which shape is under the pointer. Point in a direction and that wedge lights up, whether you are near the middle or way out past the rim. That one change is what made mine feel like a game wheel instead of a menu. Number keys 1 to 9 pick a slot directly. Once you know your own layout you stop looking at the wheel at all, and that is where the real speed comes from. Grey out a slot that cannot run right now, and work all of them out in one pass before the wheel opens. Mine has to check the current selection to answer that. Doing it slot by slot meant a 50,000 element selection got walked once for every slot on the wheel. Once for the whole wheel fixed it. Check the command will really be accepted before you fire it. When mine was refused, nothing ran but the wheel still closed as if it had worked. That is the worst kind of failure because it looks like an answer. Smaller things I would not have guessed: Test the wedge maths outside CAD. I rebuilt mine as a standalone renderer and produced every slot count at every wheel size as images. Far quicker than restarting the host for each attempt, and it found a label collision at my highest slot count that I would never have caught by eye. Store the command name in the slot, not the button text. Rename a button later and the layout survives. Slot 1 at the top, the rest clockwise, always. The muscle memory is the whole point, so that order can never move. Drop any glow or fade. Mine had a soft shadow on the hovered wedge and a fade across the whole ring, and both were being recomputed every time the pointer crossed a boundary. A brighter fill and a thicker outline read exactly the same and cost nothing. Only redraw the wedge that changed, never the whole ring. Let the config file be missing or corrupt without complaining. Mine falls back to the defaults instead of throwing a message at me, and I have never once wanted the message. Do not let dead keys close it. Enter, space and a number higher than my slot count all used to dismiss the wheel doing nothing, which just felt broken. Open the settings from the wheel itself, and let people set it up by dragging onto a real wheel instead of filling in a list. Drag a tool onto a slot to fill it, drag one slot onto another to swap them. Mine draws the same ring at a smaller size for that, so what you arrange is what opens. Two things I am curious about, since you draw with real entities in model space rather than a window over the top. Does the wheel stay the same size on screen at any zoom, or does it scale with the drawing? Mine sits in a window above everything so I never had to deal with that, but it looks like the harder half of your approach. And the double click. In AutoCAD a double click on an object opens its editor, so what happens when the pointer is over an entity instead of empty space? I went with a keyboard shortcut and dodged the question, but yours is the nicer gesture if it works. Edited 11 hours ago by Ajmal small edit 1 Quote
BIGAL Posted 1 hour ago Posted 1 hour ago @Ajmal "Once you know your own layout you stop looking at the wheel at all," It's called a Digitiser, a proficient user would not look at the digitiser but knew where commands were. Yes have to be old like me. I have a "Medion pad" that works as a digitiser. Played with it but went back to a mouse. Quote
VicoWang Posted 58 minutes ago Author Posted 58 minutes ago 10 hours ago, Ajmal said: Nice work. I built the same kind of wheel for Revit a while back, so it was good to see someone doing it on the AutoCAD side. I could not see it running from the thread either, so a short screen recording would probably get you more replies here than anything else. Everything below is from my side, on Revit, so translate it however it fits. These are the ones that cost me the most time. Aim by the pointer angle, not by which shape is under the pointer. Point in a direction and that wedge lights up, whether you are near the middle or way out past the rim. That one change is what made mine feel like a game wheel instead of a menu. Number keys 1 to 9 pick a slot directly. Once you know your own layout you stop looking at the wheel at all, and that is where the real speed comes from. Grey out a slot that cannot run right now, and work all of them out in one pass before the wheel opens. Mine has to check the current selection to answer that. Doing it slot by slot meant a 50,000 element selection got walked once for every slot on the wheel. Once for the whole wheel fixed it. Check the command will really be accepted before you fire it. When mine was refused, nothing ran but the wheel still closed as if it had worked. That is the worst kind of failure because it looks like an answer. Smaller things I would not have guessed: Test the wedge maths outside CAD. I rebuilt mine as a standalone renderer and produced every slot count at every wheel size as images. Far quicker than restarting the host for each attempt, and it found a label collision at my highest slot count that I would never have caught by eye. Store the command name in the slot, not the button text. Rename a button later and the layout survives. Slot 1 at the top, the rest clockwise, always. The muscle memory is the whole point, so that order can never move. Drop any glow or fade. Mine had a soft shadow on the hovered wedge and a fade across the whole ring, and both were being recomputed every time the pointer crossed a boundary. A brighter fill and a thicker outline read exactly the same and cost nothing. Only redraw the wedge that changed, never the whole ring. Let the config file be missing or corrupt without complaining. Mine falls back to the defaults instead of throwing a message at me, and I have never once wanted the message. Do not let dead keys close it. Enter, space and a number higher than my slot count all used to dismiss the wheel doing nothing, which just felt broken. Open the settings from the wheel itself, and let people set it up by dragging onto a real wheel instead of filling in a list. Drag a tool onto a slot to fill it, drag one slot onto another to swap them. Mine draws the same ring at a smaller size for that, so what you arrange is what opens. Two things I am curious about, since you draw with real entities in model space rather than a window over the top. Does the wheel stay the same size on screen at any zoom, or does it scale with the drawing? Mine sits in a window above everything so I never had to deal with that, but it looks like the harder half of your approach. And the double click. In AutoCAD a double click on an object opens its editor, so what happens when the pointer is over an entity instead of empty space? I went with a keyboard shortcut and dodged the question, but yours is the nicer gesture if it works. Hi Ajmal, First of all, thank you so much for this incredibly detailed and insightful reply! It is a rare pleasure to connect with a fellow developer who has navigated the exact same UX/UI challenges for marking menus. Your hard-earned lessons from the Revit side are absolute gold. As you suggested, I have attached a short video/screen recording to this post so you can finally see it in action! I read through all your points, and it is fascinating to see where our approaches align and where our design philosophies (and platform constraints) diverge. Here are my thoughts on them: 1. Aim by pointer angle (Infinite Ray) vs. Bounded Shape Your approach: Trigger by angle, ignoring the outer boundary. My approach: Angle-based, but bounded by a maximum outer radius. Verdict: Yours is a fantastic idea for UX. You are totally right—removing the outer boundary gives it that agile, "game wheel" feel. It is a really interesting approach that makes perfect sense for that kind of fluid interaction. 2. Number keys (1-9) for blind operation Your approach: Hitting 1-9 to execute directly. My approach: Purely mouse-driven. The Philosophy: Your idea is excellent if the wheel is the primary input method. However, my wheel is designed as a supplement to VedaCAD. In our ecosystem, the absolute most frequent commands are already mapped to standard keyboard shortcuts (Priority 1). The wheel is designed for "Priority 2" commands—those that are necessary but slightly less frequent. The logic is: if a user is already using their keyboard, they use shortcuts; but if their hand is driving the mouse and they double-click to summon the wheel, I want to keep the interaction 100% mouse-centric. Mixing keyboard triggers into the wheel breaks that flow for our specific use case. 3. Visuals and The Configurator UI Your approach: Flat graphics, silent fallback, and a drag-and-drop visual configurator. My approach: Flat graphics, silent fallback, but a standard list-based dialog UI for settings. The Platform Reality: We completely agree on dropping glow effects for performance and using silent fallbacks. I also agree that your drag-and-drop UI is the ultimate gold standard for user experience! However, one of my strictest design constraints was building this in 100% pure AutoLISP with zero external dependencies, maintaining backward compatibility all the way to AutoCAD 2006. In pure AutoLISP, the native DCL (Dialog Control Language) is extremely primitive and simply cannot handle drag-and-drop. Achieving that would require injecting VBA or .NET/ARX dependencies, which breaks the lightweight, "plug-and-play" nature of this script. So, the list UI is a necessary compromise for pure LISP architecture. 4. Grey out/Validate commands in one pass Your approach: Evaluate everything once before the wheel opens; validate if CAD accepts it. My approach: I currently use a brute-force CAD trick—sending a "double-Esc" sequence to cancel any active operations before forcing the new command macro. Verdict: The Revit API environment is much stricter, so your pre-validation makes perfect sense there. However, in my architecture, the wheel acts strictly as a lightweight command trigger mechanism(essentially mimicking keyboard input). It is not deeply bound to the underlying LISP routines of the target commands. Therefore, it doesn't evaluate whether a command is valid for the current selection—and realistically, it doesn't need to. Adding complex state-checking and UI rendering logic (like grey-outs) would just introduce unnecessary overhead to what is meant to be a simple, fast macro launcher. Regarding your two technical curiosities: Since I am drawing native geometry directly into the AutoCAD model space, you are spot on that those two issues were the hardest to crack. Here is how I solved them natively: Zoom Scaling: The wheel does not scale with the drawing; it scales with the screen. When summoned, the script fetches the active viewport's real-time physical screen height. It uses this to dynamically calculate the precise mathematical radii for the rings. So, whether you are zoomed into a tiny screw or zoomed out to a city plan, the math draws the wheel at the exact same physical size on your monitor. The Double-Click Conflict: You are right that double-clicking native CAD objects opens the block/text editor. To dodge this, my double-click event listener performs a native "hit test" exactly at the cursor's location. If it detects any existing drawing entity under the pointer, the script instantly aborts and lets the native CAD double-click editor take over. The wheel only deploys if the hit test confirms the cursor is over 100% empty space Again, thank you for sharing your architecture. I would absolutely love to see how your Revit marking menu looks and feels! If you have a GIF or video lying around, please do share it here. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.