{"id":5421,"date":"2024-12-27T15:21:57","date_gmt":"2024-12-27T15:21:57","guid":{"rendered":"https:\/\/castle-engine.io\/wp\/?p=5421"},"modified":"2024-12-27T15:21:57","modified_gmt":"2024-12-27T15:21:57","slug":"new-castletransformmanipulate-unit-to-move-rotate-scale-3d-objects-in-your-applications-wireframe-shading-toggle-for-indexedfaceset-steam-achievements-fixed-with-delphi-slides-from-my-presentat","status":"publish","type":"post","link":"https:\/\/castle-engine.io\/wp\/2024\/12\/27\/new-castletransformmanipulate-unit-to-move-rotate-scale-3d-objects-in-your-applications-wireframe-shading-toggle-for-indexedfaceset-steam-achievements-fixed-with-delphi-slides-from-my-presentat\/","title":{"rendered":"New CastleTransformManipulate unit to move\/rotate\/scale 3D objects in your applications, wireframe &#8220;shading&#8221; toggle for IndexedFaceSet, Steam achievements fixed with Delphi, slides from my presentation in Bielsko-Bia\u0142a"},"content":{"rendered":"<table class=\"thumbnails thumbnails-align-right\"><tr><td>\n          <a href=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2024\/12\/Zrzut-ekranu-z-2024-12-27-16-11-48.png\"\n             class=\"screenshot\"\n             title=\"Transform editing using CastleTransformManipulate\"><img loading=\"lazy\" decoding=\"async\"\n            style=\"float: right\"\n            src=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2024\/12\/Zrzut-ekranu-z-2024-12-27-16-11-48-200x119.png\"\n             width=\"200\" height=\"119\" \n            alt=\"Transform editing using CastleTransformManipulate\"\n          ><\/a><\/td><\/tr><tr><td>\n          <a href=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2024\/12\/Zrzut-ekranu-z-2024-12-27-16-11-38.png\"\n             class=\"screenshot\"\n             title=\"Transform editing using CastleTransformManipulate\"><img loading=\"lazy\" decoding=\"async\"\n            style=\"float: right\"\n            src=\"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2024\/12\/Zrzut-ekranu-z-2024-12-27-16-11-38-200x119.png\"\n             width=\"200\" height=\"119\" \n            alt=\"Transform editing using CastleTransformManipulate\"\n          ><\/a><\/td><\/tr><\/table>\n<p>You love the super-long news titles, right? \ud83d\ude42 Again I have a backlog of announcements to do, to communicate everything happening around the engine development. There will be more news in 2024 (stay tuned for traditional <em>&#8220;summary of this year, plans for next&#8221;<\/em>), for today a bag of improvements to announce:<\/p>\n<ol>\n<li>We have a new unit <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.html\">CastleTransformManipulate<\/a><\/code> with 2 new components: <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.TCastleTransformHover.html\">TCastleTransformHover<\/a><\/code> (visualize the <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransform.TCastleTransform.html\">TCastleTransform<\/a><\/code> we hover over) and <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.TCastleTransformManipulate.html\">TCastleTransformManipulate<\/a><\/code> (visualize selection and move \/ rotate \/ scale <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransform.TCastleTransform.html\">TCastleTransform<\/a><\/code>).\n<p>Together, they allow you to implement selection \/ manipulation of 3D objects in your own applications just like the <a href=\"https:\/\/castle-engine.io\/editor\">Castle Game Engine editor<\/a> does.<\/p>\n<p>Their usage is rather simple:<\/p>\n<ul>\n<li>just create <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.TCastleTransformManipulate.html\">TCastleTransformManipulate<\/a><\/code>, call <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.TCastleTransformManipulate.html#SetSelected-TComponentList-\">TCastleTransformManipulate.SetSelected<\/a><\/code>, set <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.TCastleTransformManipulate.html#Mode\">TCastleTransformManipulate.Mode<\/a><\/code>.<\/p>\n<\/li>\n<li>\n<p>just create <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.TCastleTransformHover.html\">TCastleTransformHover<\/a><\/code>, set <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.TCastleTransformHover.html#Current\">TCastleTransformHover.Current<\/a><\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>Practical examples of using them are in:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/castle-engine\/castle-engine\/tree\/master\/examples\/ifc\">examples\/ifc<\/a>, example of using <a href=\"https:\/\/castle-engine.io\/ifc\">IFC<\/a> in our engine.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/castle-engine\/castle-and-mormot-collaborative-editing\/\">example of our engine integration with mORMot<\/a><\/p>\n<\/li>\n<\/ul>\n<p>Note: We still work on 2 examples above (we want to improve some things in IFC support, and we want to make mORMot example really support collaborative editing). But their usage of <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/CastleTransformManipulate.html\">CastleTransformManipulate<\/a><\/code> is now completely stable \ud83d\ude42<\/p>\n<\/li>\n<li>\n<p>We support toggling any <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/X3DNodes.TIndexedFaceSetNode.html\">TIndexedFaceSetNode<\/a><\/code> to display as wireframe.<\/p>\n<p>To do this, set <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/X3DNodes.TAbstractShapeNode.html#Shading\">TAbstractShapeNode.Shading<\/a><\/code> to <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/X3DNodes.html#shWireframe\">shWireframe<\/a><\/code> using Pascal. If you&#8217;re unsure how to manipulate X3D nodes from Pascal, read <a href=\"https:\/\/castle-engine.io\/viewport_and_scenes_from_code#_building_a_mesh_using_code\">Writing code to modify scenes and transformations manual, section 11. Building a mesh using code<\/a> and <a href=\"https:\/\/castle-engine.io\/x3d\">X3D docs<\/a>.<\/p>\n<p>Or, in X3D file, set <code>shading=\"WIREFRAME\"<\/code> following <a href=\"https:\/\/castle-engine.io\/x3d_implementation_shape_extensions.php#section_ext_shading\">our X3D Shape.shading docs<\/a>. Test X3D file is <a href=\"https:\/\/github.com\/castle-engine\/demo-models\/blob\/master\/x3d\/castle_extensions\/shading_wireframe.x3dv\">shading_wireframe.x3dv<\/a>.<\/p>\n<p>Wireframe display done this way is often useful for model debugging, inspection etc. While you can also construct lines explicitly (using <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/X3DNodes.TLineSetNode.html\">TLineSetNode<\/a><\/code>, <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/X3DNodes.TIndexedLineSetNode.html\">TIndexedLineSetNode<\/a><\/code>), it is sometimes more convenient to just define a regular mesh using <code><a href=\"https:\/\/castle-engine.io\/apidoc\/html\/X3DNodes.TIndexedFaceSetNode.html\">TIndexedFaceSetNode<\/a><\/code> and then toggle it (based on any condition) to wireframe.<\/p>\n<p>For some design decisions (e.g. why this is called &#8220;shading&#8221;) see <a href=\"https:\/\/castle-engine.io\/x3d_implementation_shape_extensions.php#section_ext_shading\">Shape.shading docs<\/a>.<\/p>\n<\/li>\n<li>\n<p>We have fixed <a href=\"https:\/\/castle-engine.io\/steam\">Steam achievements<\/a> usage (getting, setting) with Delphi.<\/p>\n<\/li>\n<li>\n<p>I made a presentation about our engine at the beginning of December at <a href=\"https:\/\/evenea.pl\/pl\/wydarzenie\/meetupdelphi\">Meetup Delphi in Bielsko-Bia\u0142a (Poland)<\/a>. This was a bigger presentation about engine features, physics, Blender, Sketchfab, Steam integration.<\/p>\n<p><a href=\"https:\/\/castle-engine.io\/bb2024\">Slides (in Polish) are here<\/a>.<\/p>\n<p>( If you don&#8217;t speak Polish, but you&#8217;re interested in the topics &#8212; <a href=\"https:\/\/castle-engine.io\/cologne2024\">slides from my previous presentation in Cologne<\/a> are the closest equivalent in English. )<\/p>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>You love the super-long news titles, right? \ud83d\ude42 Again I have a backlog of announcements to do, to communicate everything happening around the engine development. There will be more news in 2024 (stay tuned for traditional &#8220;summary of this year, plans for next&#8221;), for today a bag of improvements to announce: We have a new &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/castle-engine.io\/wp\/2024\/12\/27\/new-castletransformmanipulate-unit-to-move-rotate-scale-3d-objects-in-your-applications-wireframe-shading-toggle-for-indexedfaceset-steam-achievements-fixed-with-delphi-slides-from-my-presentat\/\" class=\"more-link\">Continue reading  \u27a4<span class=\"screen-reader-text\"> &#8220;New CastleTransformManipulate unit to move\/rotate\/scale 3D objects in your applications, wireframe &#8220;shading&#8221; toggle for IndexedFaceSet, Steam achievements fixed with Delphi, slides from my presentation in Bielsko-Bia\u0142a&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":5422,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"publish_to_discourse":"1","publish_post_category":"9","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"5570","discourse_permalink":"https:\/\/forum.castle-engine.io\/t\/new-castletransformmanipulate-unit-to-move-rotate-scale-3d-objects-in-your-applications-wireframe-shading-toggle-for-indexedfaceset-steam-achievements-fixed-with-delphi-slides-from-my-presentation-in-bielsko-biala\/1492","wpdc_publishing_response":"","wpdc_publishing_error":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[3,27,13,15,25,26,28],"class_list":["post-5421","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-castleengine","tag-delphi","tag-gamedev","tag-gameengine","tag-pascal","tag-steam","tag-x3d"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/castle-engine.io\/wp\/wp-content\/uploads\/2024\/12\/Zrzut-ekranu-z-2024-12-27-16-11-48.png","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9IgYW-1pr","jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/posts\/5421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/comments?post=5421"}],"version-history":[{"count":4,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/posts\/5421\/revisions"}],"predecessor-version":[{"id":5427,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/posts\/5421\/revisions\/5427"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/media\/5422"}],"wp:attachment":[{"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/media?parent=5421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/categories?post=5421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/castle-engine.io\/wp\/wp-json\/wp\/v2\/tags?post=5421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}