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.