Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - MagWeb

Pages: [1] 2 3 ... 5
1
Scripting / API Help / MM Scene Manager App
« on: August 15, 2017, 07:51:01 PM »
Hi,

I needed some advanced features to control a scene with multiple objects.
Using MM API I made a standalone application to replace MM's ObjectBrowser. This is my very first application so expect some issues and ugly source code but I did my best and found it running fine on several macOS machines here (even machines where MM API never was installed).
ATM it is Mac only, sorry, but pure Python 2.7 seems not to support builds for a different OS so I will have to install Python and MM API on Windows to build from the same code over there (or maybe somebody else does?).

Usage:

No installation procedure. Simply unpack it to somewhere on your HDD.

AFTER you've loaded at least one object to MM's scene launch MMSceneManager.app. Its GUI will show up. This window will be topmost all the time. As it is a separate application you may drag it to anywhere (even to a second monitor). Dragging the lower corners you may resize it to a desired shape.

MMSceneManager talks and listens to MM's scene. Therefore at launch it shows all objects (Meshes and Pivots) existing in MM's current scene. If you add a new object to MM's scene it will be added to the SceneManager highlighted in red. As soon as you click this highlighted item it will loose this "new" flag.

At launch SceneManager does not know about the visibility settings in MM. All items are marked with an "O" (= visible). To synchronise visibility you may click on the "ShowAll" Button which will set all meshes in MM to visible.
Hiding via SceneManager is simple: RMB-click on the item to hide in MM's scene. The item will now show a "X" (= non visible).

You can rename an item via LMB Double click. Enter the new name in the pop up dialog.

Now the either sense of this app: It supports sorting in a hierarchical tree structure.
With LMB-drag you can move an item up and down onto existing and open levels. As MM does not know something about such levels at start you can move the item only up and down which is fine but not the kind of usage I wrote this app for.
With Shift+LMB-drag you can move item "A" (and if there already are "children" its children) onto another item "B" into a new depth of the scene-tree. Now "B" became the parent of "A". Again Shift+LMB dragging "B"  onto an item "C" will make C the parent of B which is parent of A....aso.... As you may bind several same level children to a parent  you can construct complex structures quickly.
As soon as you drop an item A onto another item B you will get a little triangle in front of the B entry. Clicking this triangle will open/close the next down level of children.
Back to LMB-dragging (without holding down Shift): With a parent B open you may drag the item to that level as well.

So if there's D being a child of C being a child of B being a child of A: LMB clicking of A will activate B, C and D in MM's scene as well. Clicking on B will also activate C and D - a quick way to activate and to set visibility (remember RMB click).

Now you may run into a situation where you want to activate a single object (which is a parent of children) only. For this I added the "Single" checkbox. This active will activate the clicked item only.

To organize objects without a direct parent there's the option to add "Boxes" to the tree ( "AddBox" button). A box is just a container object ( similar to a file's folder). It acts the same way (same commands) as an object item, but isn't sent to MM.

"Open All" button will expand all nodes in the tree to show the whole content.

Now when you did all that nice work to construct such a tree it might happen that you want to save this structure. MM can't do this. Therefore the "Save" button will save a .cvs table of the current tree. With the "Load" button you may call a previous saved layout. If the loaded scene in MM almost fits to the layout you'll have a nicer start next time you use SceneManager.

So far. Download below (source included in the .app bundle/Contents/Resources/MMSceneManager_01.py). Use it free but at your own risk, without any warranty.
Thanks to all the guys providing info about used modules (Tkinter and Python) all over the web!

Feedback welcome!

MagWeb

2
Scripting / API Help / Scripting the cam
« on: March 28, 2016, 07:46:28 PM »
Trying to script a workflow needing a specific view of the virtual cam:

There's CameraControl_SetSpecificView in StoredCommands.h I'm trying to call.
It needs
const vec3f & eye,
const vec3f & target,
const vec3f & up

I'm a newbie to Python scripting and MM's API: So what's the right way to construct these parameters?
Anything I tried the last days failed. Does the API expect a vec3f three floats list? Some single sting/argument or some combination?
All I tried ended in some TypeError so far...

E.g. if I try this:
Code: [Select]
     cmd2 = mmapi.StoredCommands()
     e = [1.0, 1.0, 1.0] #eye     
     t = [0.0, 0.0, 0.0] #target
     u = [0.0, 1.0, 0.0] #up     
     cmd2.CameraControl_SetSpecificView(e, t, u)       
     remote.runCommand(cmd2)
I end up with:
Code: [Select]
TypeError: in method 'StoredCommands_CameraControl_SetSpecificView', argument 2 of type 'mm::vec3f const &'This is somehow clear for I miss to point to the reference. But how to do that right?

Sorry, if that's a dumb question or I missed some basic stuff.


3
Scripting / API Help / MassBoolean
« on: March 24, 2016, 07:30:26 AM »
I'm working on a Tkinter GUI applet doing some scripted workflows with a single click.

One thing should be a mass BooleanUnion operation where multiple objects are joined.
I'm that far (and it works fine as long as there are no problems in the single Boolean steps. Just simplified):

Code: [Select]
def union(): #operation to get Union from multiple objects
    cur_objects = mm.list_selected_objects(remote)
    if len(cur_objects) <2:
        print "this script requires more than one active object"
        raw_input("Press Enter to exit...")
        os._exit(1)
    else:
        i = len(cur_objects)
        while (i > 1):       
            mm.select_objects(remote, [cur_objects[0], cur_objects[1]])
            mm.begin_tool(remote, "union")       
            mm.accept_tool(remote)           
            cur_objects.pop(1) # removes objB from the list           
            i -= 1

Now it may happen that a "boolean pair" does NOT intersect. Therefor MM falls into the Error(Aborting Tool) dialog  which interrupts the automated process.

I couldn't find some API way to confirm such a dialog - Any idea?

The simplest solution in case of not intersecting objects would be to Combine not intersecting objects instead of a failing BooleanUnion (besides the API advantages - think this would make sense for standard usage too).
Is there some query to get MM's state (meaning is it possible to check if there's some MM error doing something via API)?
Sorry if I missed something...

4
Wish List / Setting SecondaryBrushes
« on: March 17, 2016, 05:55:06 PM »
ATM SCULPT's secondary brushes (Shift+Hold) are the smooth brushes only.

Modifying meshmixer.ini it is possible to set any type of of brush as the secondary one (one can't set a Surface brush to be the secondary Volume brush and vice versa) so this seems to be a GUI issue only.
Although the smooth brushes are likely to be the most used secondary type in many cases it would speed up sculpting if the GUI would allow to set any brush as the secondary one.
Just to give two examples :
- If I set Pinch to be the first AND secondary brush this allows to use two Depths (one for the first at minus, one for the secondary at plus). This way it is possible to switch pinching out and in only by Shift without pulling the depth slider each time. All brush parameters (except Size any Lazyness)  of the Volume brushes are remembered for the first and secondary brush separately....
- If I set Surface/PaintVertex to be the first brush and SmoothColor to be the secondary one eases painting.

Unfortunately the Stencil seems to be ignored by a secondary brush in Surface mode.

Instead of having two sections in the brushes palette: Maybe its doable to select the primary brush with a simple click and the secondary with a Shift+click in a common list?
Having that possibility it would be nice if the brush icon would update to the secondary brush pressing shift while working.

5
Beta / Beta 3.1.28
« on: February 13, 2016, 09:10:32 AM »
Nice to see multiple materials in the scene!
I attach a collecting of materials I did some time ago (download attached .zip). Feel free to add it to the shaders library - maybe those are useful.

Unfortunately the different material definitions seem not to be saved in a .mix

EDIT: I could fix the following issue by setting some printer via the new ActivePrinter selection. So the issue below occured when no printer was set as active
Here I found some rendering issue though:
If I create a new object in MM (e.g. by duplicating a sphere or dropping a MESHMIX solid) only the original object or objects combined with the original are rendered properly if one rotates the cam (see RenderIssue.jpg). It does not matter if they share a common material or use different ones.
Maybe that's due to my GPU? The Logg says:

[System Information] Machine OS:OSX; Graphics Card Vendor : ATI Technologies Inc.; GLVersion : 2.1 ATI-1.40.16; Graphics Renderer : AMD Radeon HD 6970M OpenGL Engine;

and I get these warnings:

   [Shader LinkLog]WARNING: Output of vertex shader 'halfVector' not read by fragment shader
WARNING: Output of vertex shader 'projPos' not read by fragment shader
WARNING: Output of vertex shader 'dist' not read by fragment shader
WARNING: Output of vertex shader 'backdiffuse' not read by fragment shader
WARNING: Output of vertex shader 'ambient' not read by fragment shader


I got this warnings using previous versions too (but I never could find something not working as expected)
Now I get a bunch of OpenGL errors. This is the very last and the end of the log:

[OPENGL ERROR] stack overflow
[EnableDrawSurfaceShader] OpenGL errors ocurrred:  OpenGL errors found
[Config::SetSelectedShaderName] set selected shader name to //PHONG
[OPENGL ERROR] stack overflow
  [GraphicsViewScene3D::drawLastFrame blit] OpenGL errors found
  [GraphicsViewScene3D::drawLastFrame] blit failed, falling back to textured quad
[OPENGL ERROR] stack overflow
  [GraphicsViewScene3D::drawLastFrame fbo] OpenGL errors found
[gaManager::onEventQueueUpdated] got return code 0, message




Multiple Import works fine even importing different formats in one go.  :)

Active Printer selection works fine. Is it possible to add a custom printer?
EDIT 2: Very big printers as the DeltaWASP 60 100: Sometimes the build volume is cut by a "to far off cam" clipping plane.

6
Bug Reports / Setting a target while being in MakeSolid
« on: February 03, 2016, 01:55:48 PM »
For 3.0, 3.1.7beta and 3.1.16beta (seems this is since at least 2.4):

Found an issue where one can create an object (a MakeSolid result) which is a separate object in the scene but does not find its way to the object's browser (here on OSX 10.11.3) - of course this is some unexpected mistake of a user:
If there's one object and one runs MakeSolid on that object. When the preview of this computation is visible (before accepting) and one set's the source object as a target via object browser, one gets the message that only one object can be set as a target (seems MakeSolid uses the source mesh as a target in the background). Clicking OK on that message now closes MakeSolid.
Now there are two objects clickable in the scene (source and MakeSolid result) but there's no entry for the MakeSolid result in the object browser.
Tried to Combine both surfaces and Separate the shells again, but this does not fix the entries in the browser.

If one kills MM after a autosave was written and one restores that backup at a new launch there are two entries in the object browser.
Edit: another way to solve this is to discard the source mesh and to undo that again.

7
Bug Reports / SendToMakerware broken since 2.6
« on: January 27, 2016, 12:12:48 PM »
Hi,

found an issue here on the SendToMakerware button (which almost nobody seems to use?): With the PRINT module's new UI broke the connection here on MAC OSX 10.11.3.
Up to 2.5 it sends it fine (except that bug:http://meshmixer.com/forum/index.php?topic=1762.msg3901#msg3901) to Makerware 3.8.1.306.

8
Wish List / Paint and Color improvements
« on: December 10, 2015, 01:15:59 PM »
Another wishlist concerning PerVertexColor:

AutoPaint in SCULPT/Surface brushes:
As an option it would be great to have the current color applied while working with surface brushes which modify/deform the mesh based on a Stencil. (Maybe a checkbox "Colorize" in the surface brushes' options)

Imagine you use a brush with some "veins" stencil to create veins on a skin surface. ATM this only projects the stencil as a depth map modifier on the mesh. Now to get some red color for the veins you've to go to the paint brush. One may try to use a very tiny size without stencil pattern to paint the veins or use the same brush size stenciled as before. Hard to do in the first case, nearly impossible to hit the previous stroke in the second case.

So if painting and surface sculpting would happen at the same time it would be great.

Selection based on color
The already implemented feature to expand an existing selection based on VertexColorSimilarity is great but it stops to expand at the coast of a color island. I'd like to see a selection mode which detects all verticies of an object owning the same color too, a global detection of all islands. These islands selection could be the core to expand based on color similarity.
This kind of selection could be based on the same palette as the surface paint brush and the color picker hotkey.
If such a feature would exist we'd have a second level to group regions (besides the FaceGroups) based on color even if you not interested in painting at all.

Flood fill a selection
Along with this I'd wish to have a SELECT/Modify feature were the verticies of selected regions get a certain color information. Besides the FaceGroups, together with a SelectionBasedOnColor, this would provide an new level of storing selections which may be different to FaceGroups.
Also it would provide a way to rapidly modify an already painted color.

9
Wish List / Transform (Move) along target
« on: December 10, 2015, 06:47:06 AM »
While dropping a MESHMIX solid part on an object we can move it along the surface it is dropped to. Unfortunately this kind of placing an object is available only in this situation.

It would be great to have this in MM's Transform tools as well which makes the to be transformed object stick to a defined Target object.
Maybe it's doable to add a checkbox "MoveAlongTarget" to Transform tools' options (or some modifier key) that makes MM Transform fall in that d&d mode.

(Another possibility would be to to use a big SCULPT/Move brush with BrushOnTarget activated. But for a "NoFalloff"-falloff type is missing in the Volume brushes this distorts the moved objects in most cases.)

Think this would pretty useful to correct the position of objects in relation to a main object or to multiply some detail object using the drop duplicate "D" key....

It would be great too to have drop duplicate "D" in MESHMIX too. This would speed up dropping the same part multiple times. Now MESHMIX closes automatically after dropping a part so you've to reenter MESHMIX and do d&d for each copy of the very same part...

10
General Discussion / Meshmixer on OSX 10.11 El Capitan
« on: October 01, 2015, 01:54:57 PM »
Just a note for those who consider to upgrade MAC OSX to 10.11 El Capitan:

Concerning Meshmixer all runs fine here.

Some notes on Mesmixer export file formats compatible to the Finder built in Preview fast 3D viewer:
- to get STL files displayed you've to use STL ASCII (Binary does not work).
- simple OBJ format works nicely.
- MM's OBJ with per vertex color gives strange spikes (see attachment) BTW: ZB's way to write per vertex color is compatible

11
Wish List / Cut Mirror and Weld
« on: September 14, 2015, 07:14:20 PM »
I'm aware of the advantages of remeshing the welding seam using the mirror tool - but there are cases where this tool deforms the mesh to much.
There's a pretty complicated workflow to mirror meshes and to keep sharp edges even on very low poly meshes:

- do a PlaneCut without fill. The cutting plane will be your mirror plane finally.
- mirror this part with an offset so MM can't weld (and remesh) the parts.
- separate
- drop a pivot on the open boundary of each part
- align pivot to pivot
- combine
- select the open boundaries
- run weld boundaries.

Mirroring without remeshing (at the risk of mesh errors) gives interesting possibilities - especially with some rotation....
Could there be an option in the Mirror tool to disable remeshing the seam?

12
Wish List / Pivot only Start
« on: August 27, 2015, 06:38:38 PM »
Meshmixer can not handle an empty scene.
But the most primitive scene one can keep and save is a scene with a single pivot only.

At the start up splash screen I can import or load or some default objects (e.g. the sphere). Often it happens that I do not want to start with a sphere, a plane or a bunny. Nor do I have some object or .mix yet to import. Instead I want to start with a cube, a cone, a ring or something else.

To do this I use MESHMIX primitives. So I've to load some stuff as e.g. the sphere to discard that object after I dropped another primitive to the scene.

I'd like to ask for a startup scene which sets a Pivot at the origin only and switches to MESHMIX (maybe to Primitives) where one can drop the object of ones choice.
Know, the scale of the scene is missing and after dropping a part to a pivot-only scene the part may be much bigger than the current view, but maybe an automatic RecenterView is doable dropping a part onto a pivot-only scene.

This start up option might bring users to different ideas....


13
Bug Reports / ConstantColor MeshColorMode on MAC
« on: August 22, 2015, 08:19:10 PM »
Not sure if it is a bug or due to my GPU:

On a per-vertex colored mesh with MeshColorMode (in menu:File/Preferences) set to ConstantColor shows (as expected) no vertex colors.
In SCULPT hovering the mouse over the object recovers the color underneath the cursor.
See attachment.

Doing some navigation resets to no color again.

This happened here since you introduced that rendering mode but it gets more important since you introduced Texture to vertex color transfer.
One can hardly sculpt on those surfaces in that mode.
My workaround is to do a second MakeSolid without color transfer for sculpting and use Attract to transfer geometry to the colored mesh if I need to see the mesh itself.

14
Bug Reports / 2.9.2 MAC: Crash leaving PRINT
« on: August 22, 2015, 04:25:16 AM »
There's a repeatable crash causing issue leaving Overhangs tool in PRINT on Mac 10.9 which is confirmed to happen at 10.10 as well.
See: http://meshmixer.com/forum/index.php?topic=2358.msg5760#msg5760

Import bunny;
Close its base hole using ANALYSIS/Inspector;
Go to PRINT;
I set the Dremel as the current printer (- just to be sure to have working presets - happens on other settings as well);
Hit the little tool icon right of AddSupports;
Hit GenerateSupport;
Hit Done;
>>>>
Now I get a window without GUI elements but the Back arrow at top right and just the printer scene with bunny and supports.
Hitting the arrow calls a confirmation dialog:
No - makes me fall back to the previous window without GUI;
Yes -  shows Meshmixer's main module for just a moment before Meshmixer crashes;

Pages: [1] 2 3 ... 5