RepliCAD

Форк
0
/
makeProjectedEdges.ts 
54 строки · 1.5 Кб
1
import { cast } from "../shapes";
2
import { getOC } from "../oclib";
3
import { GCWithScope } from "../register";
4

5
import type { Edge, AnyShape } from "../shapes";
6
import type { ProjectionCamera } from "./ProjectionCamera";
7
import type { TopoDS_Shape } from "replicad-opencascadejs";
8

9
const getEdges = (shape: TopoDS_Shape) => {
10
  if (shape.IsNull()) return [];
11
  return cast(shape).edges;
12
};
13

14
export function makeProjectedEdges(
15
  shape: AnyShape,
16
  camera: ProjectionCamera,
17
  withHiddenLines = true
18
): { visible: Edge[]; hidden: Edge[] } {
19
  const oc = getOC();
20
  const r = GCWithScope();
21

22
  const hiddenLineRemoval = r(new oc.HLRBRep_Algo_1());
23
  hiddenLineRemoval.Add_2(shape.wrapped, 0);
24

25
  const projector = r(new oc.HLRAlgo_Projector_2(camera.wrapped));
26
  hiddenLineRemoval.Projector_1(projector);
27

28
  hiddenLineRemoval.Update();
29
  hiddenLineRemoval.Hide_1();
30

31
  const hlrShapes = new oc.HLRBRep_HLRToShape(
32
    new oc.Handle_HLRBRep_Algo_2(hiddenLineRemoval)
33
  );
34

35
  const visible = [
36
    ...getEdges(hlrShapes.VCompound_1()),
37
    ...getEdges(hlrShapes.Rg1LineVCompound_1()),
38
    ...getEdges(hlrShapes.OutLineVCompound_1()),
39
  ];
40

41
  visible.forEach((e) => oc.BRepLib.BuildCurves3d_2(e.wrapped));
42

43
  const hidden = withHiddenLines
44
    ? [
45
        ...getEdges(hlrShapes.HCompound_1()),
46
        ...getEdges(hlrShapes.Rg1LineHCompound_1()),
47
        ...getEdges(hlrShapes.OutLineHCompound_1()),
48
      ]
49
    : [];
50

51
  hidden.forEach((e) => oc.BRepLib.BuildCurves3d_2(e.wrapped));
52

53
  return { visible, hidden };
54
}
55

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.