Object Snapper Plugin (Quickly reposition/resize models and mass copy from a template)

Hello! :smile:

While working on some models for my game, I realized how hard creating repetative objects can be. So, I created a plugin to help me!

As far as I know, nothing like this exists, and, I think it’s really useful because it allows for fine tuned scaling and repositioning of models.

Templates


Snapping

How to use it

Some details to note

  • Using the Create Bounding Box feature for models that have a BoundingBox part updates the BoundingBox part instead of creating a new one
  • Currently when changing the bounds of an object all of its joints are broken. This isn’t desirable and I’ll see if I can fix it in the future if there is a demand for it.
  • Currently only Models and parts are supported as valid objects. Again, if there is a demand I’ll see about adding support for non Model instances if you for some reason use Folders.
  • I’ll soon add a setting to use size offsets instead of scales, so if you have a part that’s 1 stud smaller on each axis than the bounding box, the rescaled version would still be 1 stud smaller. That’d be useful if you want to retain proportionality.

Copying templates

To copy a template model to a bunch of bounding box parts/models you first select the template. Then you select all of the models or parts you want to copy the template to. The template is parented wherever the object its being placed at is parented, so, this makes it easy to replace lots and lots of models at once. Then click this button:
image

Snapping lots of objects to a target

If you want to snap one or more objects to the same target, you select the target bounding box first. Then you select all of the objects you want to relocate to the target. Finally, you hit this button:
image

Creating a bounding box for an object

To create a bounding box for one or more Models, just select them and hit the Create Bounding Box button. When creating templates, its useful to create a bounding box this way and then copy it and move it wherever you want to place those objects.
image
The bounding box will go under each model like this:

It’ll be properly oriented, scaled, and positioned to perfectly match the object’s bounding box.

Plugin

9 Likes

This has been updated.

  • Fixed a bug where some joints were not being removed for templates, causing models to fail to be repositioned
  • Improved the underlying code for doing scaling/repositioning
  • Fixed model pivots not being properly updated with the pivots beta feature enabled

I can’t think of any uses for this. Can you provide some more if possible?

In my game I am doing a lot of building currently and designing models for objects. I published this plugin because I thought it was very useful and others might find it useful as well.

Here’s what some of the models look like:



You can see I utilize the small light piece a lot, and, when I want to update all of them I can edit the template light piece and then select each of the others and use the template feature to update all of them very quickly. Then I can delete the old ones.

Additionally, its useful because I can apply the same template model to different sizes too, for example, I can have longer light bars. Another example, for the top plates I could easily create a template for them, they are just different sizes, and then I could apply the template to all of them.

I’ve been using it very heavily while working on my game because there are a lot of things like this where bits get copied a bunch of times.

Here is another example of that:
image

These models are old sample models that I use for scaling and things, the effects & colors are applied by code now, but, I use that connector piece on lots of different models.

Copying these sorts of things when I update them is very easy for me to do with this plugin. (And since effects are applied by code now, I can just use the default color for each of them)

1 Like

This might an impossible request but I’ll give it a shot.

I was thinking that it should also be easy to rename parts and replicate it to the other copies as well, this is quite difficult but it can be achieved with either Attributes or CollectionService.

I don’t know about others but for me it’s easier to find parts and make changes when they are named and organized properly

I don’t quite understand what you’re requesting. Do you mean, when copying objects from a template the descendants keep part names from the targets? So, if you select a template and select a bunch of old models and each have different descendant names but the same model the descendants keep the old names?

Currently the way I have been utilizing the template feature is to modify one copy of a specific model, then I select all other versions of that model, copy from the modified template, and delete the old models.

Are you asking that it be possible to keep certain properties of each of the old models like Name or am I misunderstanding?

If you rename a part inside of the Original the same part will also change on the Clones as well.

You can achieve this by checking the size, position, color of the part. but it might be better to tag them instead

Usually builders will rename stuff after they finish the build, so this feature would save a lot of time and make naming parts less of a hassle

This could also work for parenting Instances, some times builders will group Parts after the build is finish so it’s the same idea as above.

I think these additions will allow Builds to be a lot more organized

I’m not sure I’m understanding. Do you mean updating the existing models without copying it again? And, do you mean doing so automatically?

I would like to add a way for you to “link” models to eachother. So, you can select the template, then select the copies, then you can use the link feature to start syncing changes. That could add an ObjectValue under each copy to reference the template (and tag the value). The plugin could use CollectionService to find each of the tagged ObjectValues, and, automatically sync changes between the template and the targets when it starts so it pretty much saves.

yeah that would be extremely helpful

1 Like