| 1867 | |
| 1868 | |
| 1869 | def test_constrain(simple_assy, nested_assy): |
| 1870 | |
| 1871 | subassy1 = simple_assy.children[0] |
| 1872 | subassy2 = simple_assy.children[1] |
| 1873 | |
| 1874 | b1 = simple_assy.obj |
| 1875 | b2 = subassy1.obj |
| 1876 | b3 = subassy2.obj |
| 1877 | |
| 1878 | simple_assy.constrain( |
| 1879 | simple_assy.name, b1.Faces()[0], subassy1.name, b2.faces("<Z").val(), "Plane" |
| 1880 | ) |
| 1881 | simple_assy.constrain( |
| 1882 | simple_assy.name, b1.Faces()[0], subassy2.name, b3.faces("<Z").val(), "Axis" |
| 1883 | ) |
| 1884 | simple_assy.constrain( |
| 1885 | subassy1.name, |
| 1886 | b2.faces(">Z").val(), |
| 1887 | subassy2.name, |
| 1888 | b3.faces("<Z").val(), |
| 1889 | "Point", |
| 1890 | ) |
| 1891 | |
| 1892 | assert len(simple_assy.constraints) == 3 |
| 1893 | |
| 1894 | nested_assy.constrain("TOP@faces@>Z", "SECOND/BOTTOM@faces@<Z", "Plane") |
| 1895 | nested_assy.constrain("TOP@faces@>X", "SECOND/BOTTOM@faces@<X", "Axis") |
| 1896 | |
| 1897 | assert len(nested_assy.constraints) == 2 |
| 1898 | |
| 1899 | constraint = nested_assy.constraints[0] |
| 1900 | |
| 1901 | assert constraint.objects == ("TOP", "SECOND") |
| 1902 | assert ( |
| 1903 | constraint.sublocs[0] |
| 1904 | .wrapped.Transformation() |
| 1905 | .TranslationPart() |
| 1906 | .IsEqual(gp_XYZ(), 1e-9) |
| 1907 | ) |
| 1908 | assert constraint.sublocs[1].wrapped.IsEqual( |
| 1909 | nested_assy.objects["SECOND/BOTTOM"].loc.wrapped |
| 1910 | ) |
| 1911 | |
| 1912 | simple_assy.solve() |
| 1913 | |
| 1914 | assert solve_result_check(simple_assy._solve_result) |
| 1915 | |
| 1916 | assert ( |
| 1917 | simple_assy.loc.wrapped.Transformation() |
| 1918 | .TranslationPart() |
| 1919 | .IsEqual(gp_XYZ(2, -5, 0), 1e-9) |
| 1920 | ) |
| 1921 | |
| 1922 | assert ( |
| 1923 | simple_assy.children[0] |
| 1924 | .loc.wrapped.Transformation() |
| 1925 | .TranslationPart() |
| 1926 | .IsEqual(gp_XYZ(-1, 0.5, 0.5), 1e-6) |