WEBVTT

00:00.000 --> 00:17.800
Okay, our next speaker is going to be talking to us about canned query, and the canned query,

00:17.800 --> 00:23.240
this is the new free function API for a canned query.

00:23.240 --> 00:32.400
One of the lead authors of canned query, this is a critical piece of software for certainly

00:32.400 --> 00:38.240
for keycad, but I know for a number of other programs as well, so please give a warm welcome

00:38.240 --> 00:39.240
to Adam.

00:39.240 --> 00:47.240
Okay, thank you, so let's start.

00:47.240 --> 00:48.240
So, what is canned query?

00:48.240 --> 00:53.240
Well, it's a Python package for parameter feed modeling.

00:53.240 --> 00:59.240
It is based on a variable kernel, so it's not CSG or not Efra, it doesn't use implicit's,

00:59.240 --> 01:05.240
and we can import an export existing canned notice using step, right?

01:05.240 --> 01:12.840
So, up to now, we like to have it on fluent APIs, and there are some random models

01:12.840 --> 01:15.840
that you can make with it.

01:15.840 --> 01:23.040
So, here is also a brief overview of the dependencies and modules in canned query, so we

01:23.040 --> 01:30.240
are focusing on this part, and also we have our own, let's say, custom binding to open

01:30.240 --> 01:34.840
casket, which is the beer kernel underlying canned query.

01:34.840 --> 01:45.800
All right, so maybe let's keep the capabilities given the time constraints, but I say,

01:45.800 --> 01:53.800
they are quite extensive, and we support many file formats for reading and writing.

01:53.800 --> 02:01.300
So, yeah, and the talk is about the feed function API, and let's first contrast it with

02:01.300 --> 02:06.800
fluent APIs, what it was, what it used to be before.

02:06.800 --> 02:14.800
So, here's a random example that I'm going to step through, import, define some parameters,

02:14.800 --> 02:24.800
and we, and say, construct this fluent statement or blow up of lines.

02:24.800 --> 02:32.800
And it is a times, again, but the times is also somewhat difficult, maintain and read, right?

02:32.800 --> 02:37.800
So, that's the motivation to develop something else.

02:37.800 --> 02:44.800
Either way, this code results in such a model, and it's reasonably compact.

02:44.800 --> 02:49.800
And the new thing goes like this.

02:49.800 --> 02:57.800
Obviously, we have a module, and then step by step, we define the entities, and every, let's say,

02:57.800 --> 03:02.800
a statement here has no implicit state, right?

03:02.800 --> 03:09.800
Just functions that I'm calling, and defining certain, let's say, the cat objects.

03:09.800 --> 03:15.800
And I use certain operations like extrude, fillets, here's a Boolean cat, another Boolean cat,

03:15.800 --> 03:22.800
with an extrusion, to obtain the final model, and this is the final model that we get, right?

03:22.800 --> 03:24.800
So, the same thing.

03:24.800 --> 03:30.800
So, you can clearly see that it is more verbose, but on the other hand, you're more explicit,

03:30.800 --> 03:38.800
and more precise in, let's say, defining the operations, which is, in the end, for complicated models, quite handy.

03:38.800 --> 03:43.800
So, some key points of this new API.

03:43.800 --> 03:51.800
So, as I said, no hidden state, we are operating on, shape objects on the, let's say, lowest level objects,

03:51.800 --> 03:57.800
in calculate it represents cat entities.

03:57.800 --> 04:04.800
All primitive are created using three functions, and so are all operations.

04:04.800 --> 04:09.800
And also for convenience, Boolean observance implemented as a operator.

04:09.800 --> 04:17.800
So, we can either use a function or an operator to do cats and whatnot, which results,

04:18.800 --> 04:22.800
and ends in more redo code, not necessarily in better performance.

04:22.800 --> 04:29.800
And, last but not least, we can now use selectors on shapes.

04:29.800 --> 04:32.800
That's also a new addition.

04:32.800 --> 04:36.800
It's not, this is the last but least.

04:36.800 --> 04:39.800
Objects are placed and ready to get using moved.

04:39.800 --> 04:46.800
So, we can, let's say, create arrays in copies and whatnot on the design locations.

04:46.800 --> 04:54.800
And, one additional point that you need to keep in mind is, for some operations,

04:54.800 --> 04:58.800
or let's say, we're reasonably applicable, they're multiple overloads provided.

04:58.800 --> 05:04.800
So, sometimes it makes sense to work on the list of shapes or, or some other thing or compounds,

05:04.800 --> 05:09.800
and usually both of those are provided.

05:09.800 --> 05:11.800
So, let's see.

05:12.800 --> 05:19.800
So, we can, that's also an important point.

05:19.800 --> 05:21.800
We can use this refraction.

05:21.800 --> 05:28.800
We can assemble higher order typological objects, shapes, solids from lower order typological objects.

05:28.800 --> 05:37.800
So, we can, let's say, sample wires to edges, or edges to wires, faces to wires to faces, and faces to solids.

05:37.800 --> 05:42.800
And, this allows really a lot of freedom to construct models.

05:42.800 --> 05:46.800
And, sometimes, allows to optimize the way Boolean operations, which are extremely slow.

05:46.800 --> 05:47.800
And, good.

05:47.800 --> 05:49.800
We have more time, so we don't need to rush.

05:49.800 --> 05:52.800
Oh, it's a timeshow.

05:52.800 --> 05:55.800
Okay, okay, okay, okay.

05:55.800 --> 06:04.800
So, yeah, actually, we have, let's say, this capability, we can assemble shapes, step-for-step, right?

06:04.800 --> 06:09.800
And that allows, sometimes, to get rid of Boolean operations, to optimize them way,

06:09.800 --> 06:15.800
because they are usually the bottleneck in modeling, or additional, in cascade.

06:15.800 --> 06:18.800
So, yeah, this is an example of doing so.

06:18.800 --> 06:22.800
So, let's, we start with two circles, right?

06:22.800 --> 06:28.800
We define, in this case, a bottom face by lofting, between two circles, right?

06:28.800 --> 06:33.800
And then, define the sides by extruding the set circles.

06:33.800 --> 06:37.800
And then, again, we define certain top face by lofting.

06:37.800 --> 06:43.800
The initial two circles with some additional edge, I don't know, visual for that.

06:43.800 --> 06:47.800
But, either way, then we construct a solid, as I mentioned.

06:47.800 --> 06:50.800
And, this is the, this is what we get, right?

06:50.800 --> 06:58.800
So, of course, in a particular example, but, maybe, we say some time, but, by not, let's say,

06:58.800 --> 07:05.800
we're not using Boolean operations for, say, define the center hall and the top shape.

07:05.800 --> 07:08.800
So, that's also handy.

07:08.800 --> 07:17.800
What more, yeah, there are some more additions like, we can now check for correctness.

07:17.800 --> 07:20.800
It's a, it's a, it's a quite extensive check.

07:20.800 --> 07:26.800
Also, tries to detect self intersections and returns.

07:26.800 --> 07:32.800
If, as to, returns the errors that your shape has.

07:32.800 --> 07:38.800
And, of course, we can also mix and match with the existing APIs.

07:38.800 --> 07:44.800
So, we can add our shapes to work plane, to sketch, and then we can, on the other hand,

07:44.800 --> 07:48.800
convert back from work plane or sketch to shape.

07:48.800 --> 07:57.800
And, assembly is to always support the direct, of assembly of objects, objects, meaning shapes.

07:57.800 --> 08:03.800
So, this is the current state of the three-function PI, ball.

08:03.800 --> 08:08.800
The idea is to stabilize it a little bit and polish, based on experience.

08:08.800 --> 08:11.800
So, I'm personally using it quite extensively.

08:11.800 --> 08:16.800
It also results in some, let's say, additions.

08:16.800 --> 08:22.800
But I would like to hear also about other people to say about it.

08:22.800 --> 08:25.800
Certainly would like to add local operations.

08:25.800 --> 08:29.800
So, sometimes you can, again, save time by not using Boolean operations,

08:29.800 --> 08:38.800
but certain, let's say, variety of operations that only take into account the local entities' faces.

08:39.800 --> 08:45.800
And, another important point is, if you model a complicated object,

08:45.800 --> 08:47.800
we want to have some history.

08:47.800 --> 08:50.800
So, there is a support for that in the kernel.

08:50.800 --> 08:54.800
We'd like to expose that also in the free-function PI.

08:54.800 --> 09:01.800
Some other additions would require quite many, let's say, quality of life improvements in the latest release,

09:01.800 --> 09:07.800
not related to the function PI, so I'm just, it's a quickly stepping for those.

09:08.800 --> 09:15.800
So, we have many additions to shape, regarding the geometry.

09:15.800 --> 09:20.800
So, let's say, journey guidelines, normals, sampling and whatnot.

09:20.800 --> 09:24.800
There are these new special methods added to work when in sketch.

09:24.800 --> 09:34.800
So, they allow to write as a quick extension, without suppressing those objects.

09:34.800 --> 09:44.800
And, also, other additions like, okay, Boolean operations are now uniformly supported operators.

09:44.800 --> 09:48.800
So, for work plane and sketch, I think it used to be the case only for work plane.

09:48.800 --> 10:00.800
In the previous releases, we can iterate easily, and you can also, for work plane work with selected faces, this will be only wires.

10:00.800 --> 10:05.800
So, this also handy, although some lower-level details.

10:05.800 --> 10:11.800
Okay, and one more important addition, I would like to pitch a little bit is,

10:11.800 --> 10:16.800
actually used to be already in the previous release release.

10:16.800 --> 10:19.800
We have built-in visualization, right?

10:19.800 --> 10:22.800
It's really handy for, let's say, ad hoc debugging.

10:22.800 --> 10:27.800
Also, if you're doing interactive debugging, as if you put a break on summer,

10:27.800 --> 10:34.800
you can use it. So, that's super useful.

10:34.800 --> 10:38.800
And, now it is extended to support other, let's say, objects.

10:38.800 --> 10:45.800
So, you can visualize, let's say, locations, points, lists of locations, points.

10:45.800 --> 10:51.800
And, if you're into VDK, you can, let's say, visualize any VDK actor.

10:51.800 --> 10:59.800
So, you can, let's say, use this also for applications involving ad hoc machine,

10:59.800 --> 11:04.800
or use VDK's underlying, let's say library.

11:04.800 --> 11:08.800
Okay, this is a lot of text.

11:08.800 --> 11:10.800
This has looks.

11:10.800 --> 11:20.800
So, here again, we have shapes, the locations, points.

11:20.800 --> 11:25.800
And, in that VDK actor, that's also works.

11:25.800 --> 11:29.800
And, this is how it looks in Jupyter.

11:29.800 --> 11:34.800
So, one additional point was that there was also a repository built in support for rendering in Jupyter.

11:34.800 --> 11:42.800
So, it's all, let's say, it's supposed to work in various use cases,

11:42.800 --> 11:47.800
without additional tools, although there are many.

11:48.800 --> 11:54.800
And, that is it on visualization.

11:54.800 --> 12:00.800
I usually like to add, or add a slider to about the processing categories.

12:00.800 --> 12:02.800
So, this time is kind of interesting.

12:02.800 --> 12:09.800
So, it's actually used for designing nucleophishing vectors.

12:10.800 --> 12:16.800
Here we have an example of magnate shapes.

12:16.800 --> 12:21.800
As you can see, this is quite complicated shapes.

12:21.800 --> 12:27.800
So, rather difficult to mold those with, let's say, conventional case.

12:27.800 --> 12:30.800
We have to use some kind of programmatic approach for modeling.

12:30.800 --> 12:38.800
So, you have this right, right, you have to use,

12:39.800 --> 12:44.800
probably something else in the conventional case, right.

12:44.800 --> 12:46.800
To get these kind of shapes.

12:46.800 --> 12:52.800
So, here's all yet another visual of plasma and ceramic layers.

12:52.800 --> 12:59.800
So, yeah, let's say, I suppose, let's say, I did not initiate this,

12:59.800 --> 13:05.800
but I suppose using this kind of tool for in this application is,

13:05.800 --> 13:10.800
let's say, an necessity because of the organic nature of the shapes.

13:10.800 --> 13:17.800
Alright, now I have too much time, I suppose.

13:17.800 --> 13:20.800
So, how to support us?

13:20.800 --> 13:25.800
Well, I would really like to hear about some interesting work,

13:25.800 --> 13:28.800
and these are examples for get's query, right.

13:28.800 --> 13:34.800
It's actually quite difficult sometimes to get to know what people are doing.

13:34.800 --> 13:38.800
So, I know more interesting, as an example from the industry,

13:38.800 --> 13:42.800
but only via via, so, no specifics.

13:42.800 --> 13:44.800
If you use it for scientific work,

13:44.800 --> 13:47.800
there are quite some papers, suddenly,

13:47.800 --> 13:51.800
also a lot of papers.

13:51.800 --> 13:54.800
I'll say, using category with LNs, but anyways,

13:54.800 --> 13:58.800
we do have a generic DUI, so please use it if you are into,

13:58.800 --> 14:01.800
let's say, publishing scientific papers.

14:01.800 --> 14:08.800
And if you're feeling rich, and have something interesting to develop,

14:08.800 --> 14:15.800
I think we're also open for a sponsor development of new features.

14:15.800 --> 14:22.800
Alright, so, let's sum up.

14:22.800 --> 14:27.800
So, I think it's available, that's a pre-functional device,

14:27.800 --> 14:29.800
for addition to category.

14:29.800 --> 14:33.800
I'm using it extensively now, and I must say,

14:33.800 --> 14:40.800
I do enjoy the experience, although I obviously bias, right.

14:40.800 --> 14:46.800
It will be continued, the development of the API will be continued, right.

14:46.800 --> 14:53.800
And the expectations should be stable soon,

14:53.800 --> 14:59.800
so, next release, or maybe we can do releases.

14:59.800 --> 15:02.800
And there are some other features that are, I'll say,

15:02.800 --> 15:07.800
in a conceptual preparation for the time being, but,

15:07.800 --> 15:12.800
so, number one is integration of category of machine tools.

15:12.800 --> 15:16.800
So, if you have those complicated models,

15:16.800 --> 15:19.800
then usually you want to use the first simulation,

15:19.800 --> 15:22.800
and then you need to do a well-meshing,

15:22.800 --> 15:25.800
and then there's the question of, let's say,

15:25.800 --> 15:29.800
establishing or transferring metadata,

15:29.800 --> 15:33.800
which phase belongs to which, let's say, phase in your mesh.

15:33.800 --> 15:37.800
And the other thing is, actually, based on experience,

15:37.800 --> 15:42.800
there are many rough corners in open cascade.

15:42.800 --> 15:47.800
So, for certain, for certain modeling applications,

15:47.800 --> 15:52.800
it's actually necessary to develop your own functionality.

15:52.800 --> 15:58.800
And it would be quite handy to have, like,

15:58.800 --> 16:01.800
a geometry, like, independent terms geometry layer in category.

16:01.800 --> 16:05.800
So, I think it will be, it will be developed in some form,

16:05.800 --> 16:08.800
not as extensive as open cascade,

16:08.800 --> 16:11.800
but something that would allow to quickly,

16:11.800 --> 16:14.800
and say, implement certain algorithms.

16:14.800 --> 16:17.800
So, yeah, this is it.

16:17.800 --> 16:20.800
This is actually all slides.

16:20.800 --> 16:23.800
I did speed up a little bit at the beginning, so,

16:23.800 --> 16:27.800
I'm sure we should handle it.

16:27.800 --> 16:29.800
But, anyway, it's almost gone.

16:29.800 --> 16:30.800
So, thank you.

16:31.800 --> 16:51.800
So, you were, I think, to some selection of shape or forget exactly.

16:51.800 --> 16:53.800
What does it mean exactly?

16:53.800 --> 16:58.800
Because you have already, you've already objected in a variable name,

16:58.800 --> 17:02.800
so, what does this feature bring to it?

17:02.800 --> 17:06.800
This selection of selected selector.

17:06.800 --> 17:07.800
Okay, yeah.

17:07.800 --> 17:12.800
So, this question is, essentially, what are selectors in category?

17:12.800 --> 17:13.800
Okay.

17:13.800 --> 17:18.800
So, I guess we can go to this example here.

17:18.800 --> 17:22.800
Let's go here.

17:22.800 --> 17:24.800
Let's go here.

17:25.800 --> 17:27.800
So, yeah.

17:27.800 --> 17:28.800
There you go.

17:28.800 --> 17:30.800
So, for example, for certain operations,

17:30.800 --> 17:32.800
I have this object here, right?

17:32.800 --> 17:36.800
And I do want to do a transfer on the top face, right?

17:36.800 --> 17:39.800
So, I need to select the top face,

17:39.800 --> 17:44.800
and the shape object and other objects in category

17:44.800 --> 17:47.800
have specific special methods for selection of,

17:47.800 --> 17:49.800
it will be quantities.

17:49.800 --> 17:52.800
So, there is a, like, there's like a DSL,

17:52.800 --> 17:55.800
and also, let's say,

17:55.800 --> 18:00.800
bit maps to select the objects for acquiring the geometry.

18:00.800 --> 18:03.800
So, in this case, I have this guy, right?

18:03.800 --> 18:07.800
And I want to get a reference to the top face.

18:07.800 --> 18:09.800
So, I say, okay, please select faces,

18:09.800 --> 18:12.800
and this higher than Z means, well, top.

18:12.800 --> 18:15.800
So, that's essentially, so,

18:15.800 --> 18:17.800
selectors are methods for selecting,

18:17.800 --> 18:20.800
top.go entities in your model.

18:20.800 --> 18:22.800
Hi.

18:22.800 --> 18:26.800
First of all, thank you very much for doing this.

18:26.800 --> 18:27.800
Really appreciate it.

18:27.800 --> 18:28.800
Thank you.

18:28.800 --> 18:30.800
Moving forward.

18:30.800 --> 18:33.800
Do you plan on the fluent API to stay

18:33.800 --> 18:36.800
a first-class citizen of category?

18:36.800 --> 18:37.800
Okay.

18:37.800 --> 18:42.800
So, question was, is the fluent API a few to stay?

18:42.800 --> 18:44.800
And that's, yes, yes.

18:44.800 --> 18:49.800
There is no plans to deprecate it or remove it or not.

18:49.800 --> 18:53.800
So, that's sort of the assurance, yes.

18:53.800 --> 18:55.800
Thank you very much for your talk.

18:55.800 --> 19:00.800
One, two questions for the show command is there an option

19:00.800 --> 19:05.800
to set the viewpoint of the model,

19:05.800 --> 19:11.800
or is there, like, individual possibility to manually rotate

19:12.800 --> 19:14.800
the part after showing it.

19:14.800 --> 19:19.800
And second question is, what possibilities do I have to export

19:19.800 --> 19:23.800
the result to some file later on?

19:23.800 --> 19:24.800
Okay.

19:24.800 --> 19:25.800
So, two questions.

19:25.800 --> 19:29.800
One is, is the built-in visualization interactive?

19:29.800 --> 19:33.800
I think this is the, the, the, the, the, the, the, the, the, the, the, the, the,

19:33.800 --> 19:37.800
the answer is, yes, it is.

19:37.800 --> 19:39.800
So, actually,

19:40.800 --> 19:42.800
I say,

19:42.800 --> 19:47.800
doing this or re-hawking show is blocking, right?

19:47.800 --> 19:52.800
So, it starts an event loop and it, it is interactive

19:52.800 --> 19:55.800
so you can manually let's say, rotate it and,

19:55.800 --> 19:58.800
I say, inspect what you have.

19:58.800 --> 20:01.800
And the other question was,

20:01.800 --> 20:06.800
yeah, what are the, what are the file formats or how do I export?

20:06.800 --> 20:12.800
So, uh, it's, uh, briefly, uh,

20:12.800 --> 20:16.800
I briefly mentioned, but, uh, but yeah, it's a list here,

20:16.800 --> 20:20.800
uh, actually, it's not a full list, but, for, let's say, the most important

20:20.800 --> 20:23.800
formats, right? You, for lossless, uh,

20:23.800 --> 20:27.800
um, exports, you do have the built-in open task platform on the

20:27.800 --> 20:31.800
breadth and, uh, for interoperability with catals,

20:31.800 --> 20:34.800
you can do step or, uh, for to the, uh, for

20:34.800 --> 20:38.800
the first application entity itself. So, that is it.

20:38.800 --> 20:43.800
Uh, yeah, so, uh, this cat query is going to be

20:43.800 --> 20:47.800
installable by pip, uh, but CPU editor is not.

20:47.800 --> 20:48.800
Yeah.

20:48.800 --> 20:51.800
Uh, and does this interactive visualization require something

20:51.800 --> 20:54.800
that is not installable outside conduct?

20:54.800 --> 21:01.800
Uh, do, do, do, do, do, do, do, do, do, do, do, do, do,

21:01.800 --> 21:08.800
do, does the visualization require dependencies that are not

21:08.800 --> 21:16.800
pip installable? Uh, not as far as I know, uh, so, uh,

21:16.800 --> 21:20.800
uh, we are here, right? So, actually, it is just, uh, using

21:20.800 --> 21:23.800
the decay for visualization and that as far as I know, is

21:23.800 --> 21:28.800
pip installable. Um, so, I think this answer.

21:28.800 --> 21:33.800
It is this.

21:33.800 --> 21:36.800
Just a complete equation if I make a pip installable,

21:36.800 --> 21:38.800
I can play again for the dependency.

21:38.800 --> 21:43.800
Uh, as far as I know, yes, I know there are, uh,

21:43.800 --> 21:48.800
there can be issues, right, but it should work.

21:48.800 --> 21:53.800
In Christmas York, yeah.

21:53.800 --> 21:57.800
Thank you for the talk. I'm new to, uh, cat query.

21:57.800 --> 22:02.800
Uh, but I'm very familiar to, uh, open scar.

22:02.800 --> 22:07.800
Uh, could you give me a gift of, uh,

22:07.800 --> 22:12.800
why cat query came to exist in comparison to other

22:12.800 --> 22:16.800
programmatic, uh, like, cat tools?

22:16.800 --> 22:21.800
Okay, so, uh, briefly questions why, what was the motivational

22:21.800 --> 22:26.800
patent category, uh, given that other, uh, let's say,

22:26.800 --> 22:31.800
so, through cat tools existed. Um, so, let's say,

22:31.800 --> 22:35.800
and, and specifically open scar. So, open scar is, is,

22:35.800 --> 22:39.800
is, is, not based on a bureau panel, right?

22:39.800 --> 22:43.800
Uh, so it uses, uh, I think,

22:43.800 --> 22:48.800
meshes for modeling. So, there is no way you can, uh,

22:49.800 --> 22:53.800
uh, let's say, as far as I know, it's not possible to get,

22:53.800 --> 22:57.800
I step forward a bit, and that's more or less,

22:57.800 --> 23:01.800
the son of a way of, of, let's say,

23:01.800 --> 23:05.800
exchanging cat information, um,

23:05.800 --> 23:09.800
to the main motivational, as I didn't create the project, right?

23:09.800 --> 23:12.800
It was, I think, day if you created it. So, I don't know,

23:12.800 --> 23:15.800
his main motivational, but I suppose, um,

23:16.800 --> 23:19.800
there were not so many tools that were really focused on

23:19.800 --> 23:23.800
programmatic cats that used, uh, a bureau panel.

23:23.800 --> 23:28.800
So, that, that's, that's, that's it, essentially.

23:28.800 --> 23:30.800
Okay, thank you very much, Alan.

23:30.800 --> 23:31.800
Thank you.

23:31.800 --> 23:33.800
Thank you.

