profile
viewpoint
Boris Dalstein dalboris VGC Software (@vgc) Montpellier, France https://www.vgc.io Founder of VGC Software, I make open-source software for graphic design & 2D animation. Got a PhD in CS from UBC. Worked 18 months at Pixar as intern/postdoc.

dalboris/vpaint 508

Experimental vector graphics and 2D animation editor

dalboris/minimal-qt-opengl-sketch-app 5

A minimal working app using QOpenGLWidget for sketching

dalboris/QtProjectTemplate 1

A template directory structure for Qt projects

dalboris/covid19comparator 0

A website to compare cases and/or deaths of covid19 between countries

dalboris/FindWiX 0

CMake module for building Windows Installer packages with WiX toolset

dalboris/homebrew-cask 0

🍻 A CLI workflow for the administration of macOS applications distributed as binaries

dalboris/learning-symbol-visibility 0

Test project to learn C++ symbol visibility

dalboris/pybind11 0

Seamless operability between C++11 and Python

push eventdalboris/vpaint

Boris Dalstein

commit sha a86176c2adaf85591e6ff12edbe266557983b93d

Implement 3D View mesh export to OBJ file

view details

push time in 4 days

push eventdalboris/vpaint

Boris Dalstein

commit sha a76fb8276c4c4491cc4c1685f1abee4165187d86

Add more selection filters: [de]select key/inbetween cells/vertices/edges/faces

view details

push time in 15 days

push eventdalboris/Lily58

Boris Dalstein

commit sha f24a505e3165dfc82bbcfc5cf1e7fcf8a01e2581

Convert Lily58_Pro_Case.svg to PDF

view details

push time in a month

push eventdalboris/Lily58

Boris Dalstein

commit sha 84ec33582d269d5add2446763b4831b71daf3b96

Rename files containing colon character: not allowed in NTFS and exFAT, causing problems

view details

push time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha 5b6d536ce6166fe5e8ca7d3376e8a7b945987463

Allow to export subframes in 3D view

view details

push time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha 1cf7e4c4bd509fdae24943fd7ccb434d61bcfa43

Allow to export 3D view as image sequence

view details

push time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha 1ec654ca60791ac7577f2425db824427d1226d16

Fix typo in PNG export settings

view details

push time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha c0f766a9900cb1b0ba718f44e8f8de9f57df99d2

Add PNG export to 3D View Settings

view details

push time in a month

issue closeddalboris/vpaint

Crash after deleting part of the animation after motion paste

A user reported that VPaint often crashes when deleting part of the animation after motion paste. I should investigate that.

closed time in a month

dalboris

issue commentdalboris/vpaint

Crash after deleting part of the animation after motion paste

Alright, this issue, and possibly other related issues, are now partially fixed. More precisely, deleting cells should now never crash: it might delete more than we expect (example: all incident inbetween cells), or less than we expect (example: soft-deleting inbetween edges does nothing), but at least it should not crash VPaint.

The bug was that the uncut operator, which was initially implemented for fixed illustrations, was not properly generalized to support animation. Such generalization was properly implemented for the cut and the glue operators, only partially implemented for unglue (see below), and not at all implemented for uncut (it seems to have been an oversight).

Generalizing unglue and uncut to animation is complicated (more complicated than cut and glue), and I haven't yet taken the time to properly study and implement these generalizations. In the case of unglue, while a proper generalization is not implemented, there was at least already a failsafe: all incident inbetween cells are deleted before performing the operation, which might be unexpected, but at least doesn't cause a crash and does what's expected in the current frame.

Such failsafe was not even implemented for uncut, but I just added it. The behavior is now that the uncut operator returns "impossible to uncut" whenever there are inbetween cells incident to the selected cell. Consequently, this means that a soft-delete of any key cell with incident inbetween cells always become a hard-delete. In the future, we should instead do something smarter, and actually detect cases where both the key cell and its incident inbetween cells can be uncut, and change the topology accordingly.

Note that before the failsafe was implemented, it was just "luck" that in many cases, uncutting/soft-deleting didn't crash. Inbetween cells where often indirectly deleted as a result of deleting the old key cells to merge. But in the specific case of uncutting at a key vertex with an incident looping key open edge, the existing incident key edge is not deleted: it is "converted" to a closed edge. As a result, the incident inbetween edge was not deleted neither made aware of this conversion, and later caused a crash when attempting to dereference the end-vertices of the now-closed key edge.

dalboris

comment created time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha d630d7abdbd7111a2c4b939946db6580f49deac3

Fix crash when soft-deleting a key vertex with an incident 'looping key open edge' and incident inbetween cells (#117)

view details

push time in a month

issue commentdalboris/vpaint

Bone Tool

Thanks for the kind comments :) I'm planning to work on VGC Illustration and VGC Animation at the same time, because I need to make sure that the tools implemented in VGC Illustration can also work properly in the context of animation. That being said, I need a minimal set of features in VGC Illustration before I can even start working on VGC Animation, which is why I haven't started to work on VGC Animation yet.

Indeed, it seems more and more clear that the 3D View is in fact very helpful, not only for academic research (SIGGRAPH papers, etc.), but also for animating. Thanks for commenting on this, it adds one more voice in favor of keeping this view, and even improving it. I have myself found this view helpful recently, while working on an animation: it was useful to see the arcs of motion in 3D to be able to get smoother trajectories. Sometimes, onion skinning in the 2D View was the better visualization tool, but sometimes the 3D View was better, depending on the situation. Being able to directly pick/edit the vertices and edges in the 3D View would have been even better, I was sometimes frustrated not to be able to do it, so clearly that's something I'll keep in mind for VGC. In fact, I'd like to be able to smoothly transition between 2D and 3D within the same view with a button/shortcut, that would be super cool. In a nutshell, the main window could be split into several views (like you can do with 2D views in VPaint currently), and any of these views could be smoothly turned into a 3D view if desired at the press of a button. Again, that's the vision at least, it might still take a few years before we have that :)

phillycheese007

comment created time in a month

issue commentdalboris/vpaint

Crash after deleting part of the animation after motion paste

Minimal repro:

  1. On frame 1, draw vertex + open edge starting and ending at the same vertex
  2. Motion paste to frame 5
  3. Soft-delete (Del) vertex at frame 0 (or 5).

image

What happens? VPaint crashes. Note that if instead of a soft-delete, we do a hard-delete (Ctrl+Del) on the vertex, then VPaint doesn't crash: it correctly deletes the vertex, the incident open edge, and the incident inbetween vertex and inbetween edge.

What should happen? Good question. Probably something similar as what happens when soft-deleting the vertex in this situation (no animation here, just vertices/edges/faces):

image

The space-time equivalent for the situation described in the minimal repro would be to merge the vertex and open edge at frame 0 into a closed edge, and to merge the inbetween vertex and inbetween open edge into an inbetween closed edge. That isn't a very trivial operation to do in the general case, and especially it isn't even trivial to verify that such soft-delete is possible in any given situation (the space-time topology much be locally manifold at the vertex).

Note that if instead of the minimal repro, we do the following:

  1. Draw open edge, split in the middle (3 vertices, 2 open edges)
  2. Motion-paste
  3. Soft-delete one of the middle key vertex

What happens: it doesn't crash, but behaves like a hard-delete:

image

Doing a hard-delete is probably the "simplest/safest" thing to do, when there are incident inbetween cells. Although it might be nice to do something smarter like the soft-delete in the non-animated example.

dalboris

comment created time in a month

issue commentdalboris/vpaint

Bone Tool

Hi @phillycheese007 ,

I don't know if there will be something exactly similar to the Bone Tool in Cacani (example: https://www.youtube.com/watch?v=wV46dFf2iVc), but there should definitely be something to be able to control the trajectories of tweens, including drastic rotations.

I envision a tool where you would directly draw rough trajectories ( = "arcs of motion", or "speed lines"), and the interpolation would loosely follow those trajectories. This could be similar to how a lead traditional animator might annotate its keys for an assistant animator to draw the inbetweens.

I would love the interface to look somehow like those hand-drawn images:

image

image

image

(source: http://www.animatedspirit.com/the-breakdown-key/)

Those trajectories might also include timing charts directly in them, like we see in the second image above. Anyway, this is the "vision", all of this will take a long time to implement. :)

phillycheese007

comment created time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha 88468f6b725eb5c398d3cc836f676c97002ba637

Allow inbetween cells to be semi-transparent in 3D View

view details

push time in a month

issue openeddalboris/vpaint

Crash after deleting part of the animation after motion paste

A user reported that VPaint often crashes when deleting part of the animation after motion paste. I should investigate that.

created time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha b711eba0cd6e922eed4252e7ef45cbb6e80e4115

Fix View3D caching issue: inbetween edges mesh was not updated when changing time/space-scale or spatial/temporal res

view details

push time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha 3fdb6e92b9dcf1d84c9f71439e0ee7b8dd35138b

Minimal motion blur implementation

view details

push time in a month

push eventdalboris/vpaint

Boris Dalstein

commit sha a931fc12498a4e20ecc71533e18553cea08ae813

Cleanup unused code in ExportPngDialog

view details

push time in a month

push eventvgc/vgc

Boris Dalstein

commit sha 919059754af79236b651ab7addaa08af30441a5b

Use intrusive tree-aware smart pointers for Object class (#387) (#388)

view details

push time in 2 months

PR merged vgc/vgc

Use intrusive tree-aware smart pointers for Object class (#387)

#387

+1686 -947

0 comment

55 changed files

dalboris

pr closed time in 2 months

create barnchdalboris/vgc

branch : gh387a

created branch time in 2 months

PR opened vgc/vgc

Use intrusive tree-aware smart pointers for Object class (#387)

#387

+1686 -947

0 comment

55 changed files

pr created time in 2 months

issue commentvgc/vgc

Use intrusive tree-aware smart pointers for Object class

Also note that with the use of shared_ptr, we had to use an awkward ConstructorKey idiom to prevent creation of objects without the factory methods, but still allow make_shared to create the object. See:

https://stackoverflow.com/questions/8147027/how-do-i-call-stdmake-shared-on-a-class-with-only-protected-or-private-const

Since we are now be using our own custom smart pointer, this isn't necessary anymore.

dalboris

comment created time in 2 months

issue openedvgc/vgc

Use intrusive tree-aware smart pointers for Object class

Until now, Object instances were managed using std::shared_ptr. Unfortunately, this has proven to be problematic for tree-like data structures, which couldn't be wrapped in Python with the desired behavior.

In particular, some data structures have invariants, such that: "this object always have a parent". For example, a dom::Element always has a dom::Node parent, and a graphics::FontFace always has a graphics::FontLibrary parent. In such cases, the children should typically be uniquely owned by their parents: the parent should be able to destruct the object, and "observers" shouldn't be able to extend the lifetime of the observed object.

Unfortunately, this wasn't possible using shared_ptr: if in Python, a variable was bound to a given node, then whenever its parent removed the node from its list of children (e.g., removing it from a std::vector<std::shared_ptr<Node>>), the node would actually still be alive but in an invalid state. Using the now-invalid node in a python script might lead to a crash of the application, which is undesired.

In the case of dom::Node, we had solved this with an ad-hoc isAlive() flag, but it turns out that many Objects subclasses also need this type of mechanism, and therefore we implement it directly as part of the Object class.

With this change, the whole parent-child mechanism is now handled by the Object class itself. The lifetime of Object instances are managed via a custom smart pointer called ObjPtr, which acts like a shared_ptr for root objects, but like a weak_ptr for non-root objects.

More specifically, an ObjPtr to a given object keeps the root of the tree alive, but doesn't necessarily keep the object itself alive. If the object is destroyed by their parent, then the object is set as non-alive, and accessing any of its attribute in Python raises an exception.

More details can be found in the documentation of Object and ObjPtr.

created time in 2 months

issue closedvgc/vgc

Add core::asAddress function for formatting pointer addresses

The idea is to be able to format addresses like so:

int* p = new int(0);
core::print("The address of p is {}", core::asAddress(p));

closed time in 2 months

dalboris

issue closedvgc/vgc

TravisCI status not showing up - migrate from legacy Services integration to GitHub Apps

When submitting a PR or merging it, there is no notification status anymore for TravisCI:

image

Although the build is actually triggered:

image

This seems to be an issue with Travis reaching some GitHub API limits:

https://travis-ci.community/t/travis-ci-build-no-longer-showing-as-check-on-github-pull-request-page/6955 https://travis-ci.community/t/github-status-not-posted-on-commits-on-repositories-using-legacy-service-integration/7798

The recommendation seems to be to migrate to a newer system:

https://docs.travis-ci.com/user/migrate/legacy-services-to-github-apps-migration-guide/

closed time in 2 months

dalboris

delete branch dalboris/vgc

delete branch : gh384b

delete time in 2 months

push eventdalboris/vgc

Boris Dalstein

commit sha 1309af61c231f43d6e5ec490e9e98c63d552ff41

Update TravisCI build status badge: use travis-ci.com instead of travis-ci.org (#384) (#386)

view details

push time in 2 months

push eventvgc/vgc

Boris Dalstein

commit sha 1309af61c231f43d6e5ec490e9e98c63d552ff41

Update TravisCI build status badge: use travis-ci.com instead of travis-ci.org (#384) (#386)

view details

push time in 2 months

PR opened vgc/vgc

Update TravisCI build status badge: use travis-ci.com instead of travis-ci.org (#384)

#384

+1 -1

0 comment

1 changed file

pr created time in 2 months

create barnchdalboris/vgc

branch : gh384b

created branch time in 2 months

delete branch dalboris/vgc

delete branch : gh384a

delete time in 2 months

push eventdalboris/vgc

Boris Dalstein

commit sha 759f3a2226d1567f23d0bb56c71fd0a4f14b8a1f

Minor doc fix + test migration to travis-ci.com (#384) (#385)

view details

push time in 2 months

issue commentvgc/vgc

TravisCI status not showing up - migrate from legacy Services integration to GitHub Apps

Alright, here is what I did:

I signed in to travis-ci.com with my GitHub credentials. There, I activated the GitHub app integration for the vgc/vgc repository:

image

However, I still couldn't migrate from .org to .com: the repository was greyed out:

image

However, after deleting the old .org webhook in the Github settings of the repository:

image

I was then able to do the migration:

image

After doing so, the repository vgc/vgc was finally appearing on my travis-ci.com dashboard, and I could change its settings (for example, ensure that my private environment variables were set up).

Once everything seemed to be in place, I made a new PR to test (see PR above). It correctly triggered the Travis build:

image

image

Once the tests were completed, it correctly updated the status on GitHub, and after merging the PR the new travis build was correctly triggered too:

image

Everything seems to have worked as it should (tests passed, and artifacts uploaded to VGC servers).

dalboris

comment created time in 2 months

push eventvgc/vgc

Boris Dalstein

commit sha 759f3a2226d1567f23d0bb56c71fd0a4f14b8a1f

Minor doc fix + test migration to travis-ci.com (#384) (#385)

view details

push time in 2 months

PR merged vgc/vgc

Minor doc fix + test migration to travis-ci.com (#384)

#384

+3 -3

0 comment

1 changed file

dalboris

pr closed time in 2 months

PR opened vgc/vgc

Minor doc fix + test migration to travis-ci.com (#384)

#384

+3 -3

0 comment

1 changed file

pr created time in 2 months

create barnchdalboris/vgc

branch : gh384a

created branch time in 2 months

delete branch dalboris/vgc

delete branch : gh382a

delete time in 2 months

push eventdalboris/vgc

Boris Dalstein

commit sha 86c8f6c224db0d6541c8984980afa0f0033139d5

Add core::asAddress function for formatting pointer addresses (#382) (#383)

view details

push time in 2 months

issue openedvgc/vgc

TravisCI status not showing up - migrate from legacy Services integration to GitHub Apps

When submitting a PR or merging it, there is no notification status anymore for TravisCI:

image

Although the build is actually triggered:

image

This seems to be an issue with Travis reaching some GitHub API limits:

https://travis-ci.community/t/travis-ci-build-no-longer-showing-as-check-on-github-pull-request-page/6955 https://travis-ci.community/t/github-status-not-posted-on-commits-on-repositories-using-legacy-service-integration/7798

The recommendation seems to be to migrate to a newer system:

https://docs.travis-ci.com/user/migrate/legacy-services-to-github-apps-migration-guide/

created time in 2 months

push eventvgc/vgc

Boris Dalstein

commit sha 86c8f6c224db0d6541c8984980afa0f0033139d5

Add core::asAddress function for formatting pointer addresses (#382) (#383)

view details

push time in 2 months

PR merged vgc/vgc

Add core::asAddress function for formatting pointer addresses (#382)

#382

+12 -1

0 comment

1 changed file

dalboris

pr closed time in 2 months

PR opened vgc/vgc

Add core::asAddress function for formatting pointer addresses (#382)

#382

+12 -1

0 comment

1 changed file

pr created time in 2 months

create barnchdalboris/vgc

branch : gh382a

created branch time in 2 months

issue openedvgc/vgc

Add core::asAddress function for formatting pointer addresses

The idea is to be able to format addresses like so:

int* p = new int(0);
core::print("The address of p is {}", core::asAddress(p));

created time in 2 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha 6371c2fa665cf48567177820a58f46beac510055

Update data

view details

push time in 2 months

issue closeddalboris/vpaint

Qihoo-360 detects HEUR/QVM202.0.E64C.Malware.Gen in vpaint1.7.exe

A user has reported that Qihoo-360 detected a malware in vpaint1.7.exe:

image

However, I have just run a scan on virustotal.com, which detected no virus:

https://www.virustotal.com/gui/url/3e4b25e659d82cade1e4bdc103a4aba79ed7ba8fbb3c20382492181fe73db131/detection

Therefore, this seems to be a false negative.

closed time in 2 months

dalboris

issue openeddalboris/vpaint

Qihoo-360 detects HEUR/QVM202.0.E64C.Malware.Gen in vpaint1.7.exe

A user has reported that Qihoo-360 detected a malware in vpaint1.7.exe:

image

However, I have just run a scan on virustotal.com, which detected no virus:

https://www.virustotal.com/gui/url/3e4b25e659d82cade1e4bdc103a4aba79ed7ba8fbb3c20382492181fe73db131/detection

Therefore, this seems to be a false negative.

created time in 2 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha 0d03509bd3b4e26713a62d23476a45045275e1d8

Update data

view details

push time in 2 months

startedcovidatlas/coronadatascraper

started time in 2 months

push eventdalboris/qmk_firmware

Boris Dalstein

commit sha b0f65be9295a66bff255e75d1e4ee8b4c8227490

Switch Ctrl and Shift

view details

push time in 2 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha f03bf5e42ea5beecc2da8a153c9d897cc8daef10

update data

view details

push time in 2 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha ab6fea255aa3bd7066f47f14e00033d95bee6279

Update data

view details

push time in 2 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha 111d91741d57304ceb2d21029b173a8f39b14dc5

Update data

view details

push time in 2 months

push eventdalboris/qmk_firmware

Boris Dalstein

commit sha 3725937fc35a1f5cef7351d7292e35baf7f8140d

Move two ASCII art together for easier printing

view details

push time in 2 months

push eventdalboris/qmk_firmware

Boris Dalstein

commit sha 827c3ec68911047a18db078533f915fe478523ff

Symmetric Ctrl/Alt/Shift modifiers + easier desktop switching

view details

push time in 2 months

push eventdalboris/qmk_firmware

Boris Dalstein

commit sha 0f14b3c2fe85ac3dcdaf54d6ddabe8933c51e090

Add 'boris' layout to 'lily58' keyboard

view details

push time in 2 months

fork dalboris/qmk_firmware

Open-source keyboard firmware for Atmel AVR and Arm USB families

https://qmk.fm

fork in 3 months

startedqmk/qmk_firmware

started time in 3 months

issue commentyousseb/meld

Meld for Mac won't open if previously closed without using Menu::Quit

Thanks @yousseb, I can confirm that this seems fixed :-) I could reproduce the bug with the osx-18 release, but not with the osx-19 release.

alpiepho

comment created time in 3 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha 9745e338439b30030d7928646fdd35665baeb09c

Fix 'John Hopkins' -> 'Johns Hopkins'

view details

push time in 3 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha 7e3a9f03d75ace438e683e4dad2209ae08c72b2c

Update data

view details

push time in 3 months

issue commentyousseb/meld

Meld for Mac won't open if previously closed without using Menu::Quit

@yousseb Thanks for your work, let's hope that this works (I'm not familiar with py2app at all, and I rarely use macOS). I'll try to think about testing this fix next week when it's released. Feel free to ping me if I forget.

alpiepho

comment created time in 3 months

issue commentyousseb/meld

Meld for Mac won't open if previously closed without using Menu::Quit

@yousseb Have you tried, at the very beginning of the main() function, to delete the ~/Library/Saved Application State/org.gnome.meld.savedState folder?

alpiepho

comment created time in 3 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha d4f0030052b91cdf8fa02d94afb7e72dc9e7a747

Update last updated

view details

push time in 3 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha 7f8646591a0fe11e1fabcf4ff1f8d627c19144bc

Stop using data from Worldometers.info

view details

Boris Dalstein

commit sha 3b76aea6acb0c6af749254177d3215b93e1ee66c

Update data

view details

push time in 3 months

push eventdalboris/covid19comparator

Boris Dalstein

commit sha 44d21db8fddcc7202cfca3075e827fbac8d3478c

Update data

view details

push time in 3 months

more