Hey, for some reason every time I open up studio this plug-in pops up and automatically enables. Every time I close it, although it’s starting to get annoying. I don’t know if your doing this but could you please make it stop? It really messes up my workflow
I also have this issue. At one point I had to disable the plugin to stop the gui widget from appearing. I believe this also occurs during play testing too.
Do you both have the latest update? This should’ve already been patched in the last release - the widget only enables automatically if you’ve left it open in a previous session, and the screen gui shouldn’t enable automatically at all.
Edit: Just opened up a place to test with the latest version. I launch the plugin, close it, then open a new studio tab and the plugin stays closed. Unless it’s in widget mode, but that’s intentional to mimic studio widget behaviour - I feel like if you had the widget opened then it should stay open, since that’s how the other studio widgets behave. That’s going to be an option that you can toggle in the next update. If it is widget mode that you’re talking about, you can switch to the ScreenGui by pressing this button.
Edit #2: Neither Widget or ScreenGui are showing up for me in play testing, so you might have an update pending in your “Manage Plugins” window.
There was no update pending, however the issue does not happen now.
I have no updates pending and the problem still occurs. I have seriously no idea why it does this or how to stop it. @savio14562 said that it doesn’t occur for him anymore yet I’m still getting it, like I have been for a couple months. Its such a slight thing that annoys me so much! If you could check this out it would be great
Any particular reason why decimal points arent allowed in offset input? Very essential thing to have support for, I can’t see why it’d be disabled @_@
No real reason, the offset thing was just a last minute feature added right before release so it was overlooked. Will fix this in the next update.
awesome! as a temporary workaround, i found that copy pasting the decimal number into the field works lol, its just typing in the field itself that doesnt work
No, the gap there appears to be caused by the overhanging parts that you have on the edge of the model. Archimedes doesn’t know that you want the big dark grey center part there to align with the other one, it’s trying to align the entire edge of the model.
Thank you!! So just re-adjust the lining to make everything even and it shall be perfecto. Gracias senor! <3
Good plugin!
I have one feature request:
You should be able to make nodes
You can select a face on one part like this:
ignore the “Selection Behaivor” window because i screenshotted it while using ResizeAlign
And then you can select another face on another part:
When you press “Render” it connects the parts that were selected
I have encountered a small issue with this plugin. I am using the widget mode. Basically, what I did was:
- Click the arrow next to the Direction Tab
- Tried to click it again
- This insane stack trace appeared in the output. Probably the biggest I have ever seen in my entire life
When closing the plugin, opening it again doesn’t work and the plugin remains nonfunctional until you restart studio. Not sure if this is related to the plugin or if this is related to the studio-like roact components you use.
Stack trace in full detail
cloud_144938633.Archimedes.Modules.Interface.Roact.createSignal:37: Listeners can only be disconnected once.
Stack Begin
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createSignal', Line 37 - function disconnect
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.RobloxRenderer', Line 100 - function detachAllBindings
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.RobloxRenderer', Line 235 - function unmountHostNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 175 - function unmountVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 370 - function __unmount
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 181 - function unmountVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 370 - function __unmount
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 181 - function unmountVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 370 - function __unmount
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 181 - function unmountVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 370 - function __unmount
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 181 - function unmountVirtualNode
▼ Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 188 - function unmountVirtualNode (x2)
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 188 - function unmountVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.RobloxRenderer', Line 232 - function unmountHostNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 175 - function unmountVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 370 - function __unmount
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 181 - function unmountVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 370 - function __unmount
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 181 - function unmountVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 257 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 223 - function updateFragmentVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 278 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.RobloxRenderer', Line 271 - function updateHostNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 270 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 223 - function updateFragmentVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 278 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 223 - function updateFragmentVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 278 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.RobloxRenderer', Line 271 - function updateHostNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 270 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.RobloxRenderer', Line 271 - function updateHostNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 270 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.RobloxRenderer', Line 271 - function updateHostNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 270 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.RobloxRenderer', Line 271 - function updateHostNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 270 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 144 - function updateVirtualNodeWithChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 217 - function updatePortalVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 276 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 274 - function updateVirtualNode
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 84 - function updateChildren
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.createReconciler', Line 149 - function updateVirtualNodeWithRenderResult
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 499 - function __resolveUpdate
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 437 - function __update
Script 'cloud_144938633.Archimedes.Modules.Interface.Roact.Component', Line 161 - function setState
Script 'cloud_144938633.Archimedes.Modules.Interface.PluginComponents.Main', Line 94
Stack End
I love this plugin…
Thanks for your work, it’s great for us developers, we really appreciate it
- Suggestion:
Perhaps it would be a good idea if the “Enabled” button could be toggled with a Shortcut, for example by pressing Tab
Hello. Why can’t I set both Pitch and Roll angles? I’m trying to make a spiral like this:
Thank you.
Archimedes is trying to automatically apply the absolute best fit for the parts based on the edge that the Alignment mode is set to.
With multiple directions selected, there isn’t really a point like this where that’s possible for a cube, at least not for an absolutely perfect fit as shown here. Which is why plugins that try to solve this problem usually end up filling the space with wedges instead.
It’s possible to change the plugin so that you can select multiple directions at once, but in most cases (not yours, though) it’d result in some very ugly overlapping of the parts, which I felt would just be confusing and make the plugin look bad to beginner users, so I didn’t want to make this the default behavior, especially since in testing I ended up with results like these whenever allowing multiple directions to be toggled:
I have considered adding a separate checkbox in the settings that’s disabled by default but will allow more advanced users to just skip over the forced alignment and do whatever they want. I’ve been getting more and more requests to add this, so I probably will in the next version, which I’ve been busy working on in my free time.
If you’re in widget mode then you may be able to enable the “Auto-Resize” checkbox to kind of automatically correct for the gaps shown in your image, but you’d still have to alternate between directions. I recommend disabling that checkbox as soon as you don’t need it since that feature is still highly unstable and was coded rather poorly at the time.
If Auto-Resize doesn’t work for you in this case then I’m afraid that the moment you’ll just have to manually ResizeAlign to correct those gaps in your image.
Edit: Marked this out since you likely had to do quite a bit of that manually in your image in the first place, given the gaps between some of the parts, so the Auto-Resize suggestion here is pointless.
Oh, I don’t mind if it’s a bit rough in this case. Just need the inside part somewhat aligned. I ended up writing some code to generate it this way: (and chopped off some of the sticking-out bits)
local model = Instance.new("Model")
model.Parent = workspace
local lastpart = workspace["Part"]:Clone()
lastpart.Parent = model
for i=1,36 do
local part = lastpart:Clone()
part.CFrame = part.CFrame * CFrame.new(0,0,-2.5) * CFrame.Angles(math.rad(10),0,math.rad(1))
part.Parent = model
lastpart = part
end
wait(1)
for _,part in next, model:GetChildren() do
part.CFrame = part.CFrame * CFrame.new(part.Size.X/4,0,0)
part.Size = part.Size * Vector3.new(.5,1,1)
end
I need a more streamlined elegant solution
By the way, I actually like that generation technique with the cubes. They’re cool road-like obstacles for physics-based games, like mine! I can see that being useful for spiral staircases too, or some chandelier or design
There is actually already a very finicky and inelegant (I know, exactly the opposite of what you asked for, hooray) solution for this in the live version of Archimedes right now that I think is just barely worth mentioning - which is that Archimedes has fields for position and orientation offset vectors. The inelegant part is that there are no ArcHandles or regular movement Handles created for setting these values, so you have to type them in manually. I do plan on adding Handles for this option pretty soon.
If you have the latest version, the fields should be down towards the bottom of the UI in Widget mode.
And, my personal favourite use of this feature, to quickly create a spiral staircase, you can just set the Y offset equal to the height of the part: