Table of Contents

Class DemoTopo1

Namespace
Sample.Mech
Assembly
Hi.Sample.dll

Demonstrates the creation and visualization of mechanical assemblies with kinematic linkages. Shows how to build coordinate systems, establish kinematic relationships, and capture visual output.

public static class DemoTopo1
Inheritance
DemoTopo1
Inherited Members

Remarks

Source Code

using System;
using System.Collections.Generic;
using Hi.Disp;
using Hi.Geom;
using Hi.Mech.Topo;

namespace Sample.Mech
{
    /// <summary>
    /// Demonstrates the creation and visualization of mechanical assemblies with kinematic linkages.
    /// Shows how to build coordinate systems, establish kinematic relationships, and capture visual output.
    /// </summary>
    /// <remarks>
    /// ### Source Code
    /// [!code-csharp[SampleCode](~/../Hi.Sample/Mech/DemoTopo1.cs)]
    /// </remarks>
    public static class DemoTopo1
    {
        /// <summary>
        /// Creates a demonstration assembly with kinematic linkages.
        /// Builds a mechanical assembly with multiple anchors and branches, including both static and dynamic transformations.
        /// </summary>
        /// <returns>A tuple containing the assembly and root anchor</returns>
        static (Asmb asmb,Anchor root) GetDemoAsmb()
        {
            #region DocSite.DemoTopo1
            //build coordinate systems and the assembly.
            Asmb asmb = new Asmb { Name = "Mech" };
            Anchor O = new Anchor(asmb, "O");
            Anchor O1 = new Anchor(asmb, "O1");
            Anchor X = new Anchor(asmb, "X");
            Anchor Z = new Anchor(asmb, "Z");
            Anchor B = new Anchor(asmb, "B");

            //build kinematic link
            Branch.Attach(O, O1, new StaticTranslation(new Vec3d(0, 0, 80)));
            Branch brnX = Branch.Attach(O1, X, new DynamicTranslation(new Vec3d(1, 0, 0)));
            Branch brnZ = Branch.Attach(X, Z, new DynamicTranslation(new Vec3d(0, 0, 1)));
            Branch brnB = Branch.Attach(Z, B, new DynamicRotation(new Vec3d(0, 1, 0), 0, new Vec3d(-100, 0, 0)));

            //drive the dynamic transformation by single value for each branch.
            brnX.Step = 200;
            brnZ.Step = 100;
            brnB.Step = MathUtil.ToRad(-60);

            //Get and show the transform matrices relative to O.
            Dictionary<Anchor, Mat4d> matMap = asmb.GetMat4dMap(O);
            Console.WriteLine("Transform Matrix relative to O:");
            foreach (KeyValuePair<Anchor, Mat4d> keyValue in matMap)
                Console.WriteLine($"{keyValue.Key.Name} : {keyValue.Value}");
            #endregion

            return (asmb,O);
        }
        
        /// <summary>
        /// Captures the assembly visualization and saves it to a file.
        /// Initializes the display engine, sets up the assembly visualization with an isometric view, and saves a snapshot to a bitmap file.
        /// </summary>
        /// <param name="src">A tuple containing the assembly and root anchor for visualization</param>
        static void SnapshotToFile((Asmb asmb, Anchor root) src)
        {
            //all the drawing function has to call DispEngine.Init() before using.
            DispEngine.Init();
            DispEngine.EnableSuppressDefaultLogo = true;

            using (DispEngine dispEngine = new DispEngine(
                src.asmb.GetAsmbDraw(src.root)))
            {
                dispEngine.SetViewToIsometricView();
                dispEngine.Snapshot("DemoTopo1.bmp", 680, 480);
            }
            Console.WriteLine("Snapshot file output.");

            DispEngine.FinishDisp();
        }
        static void Main()
        {
            SnapshotToFile(GetDemoAsmb());
        }
    }
}