본문으로 건너뛰기

GetPipeCenterlinesConnected

Overloads​

NameDescription
GetPipeCenterlinesConnected(List<Node> nodes)부재별 중심선을 끝이 맞닿는 것끼리 이어 하나의 선으로 만들어 기본값으로 얻습니다.
GetPipeCenterlinesConnected(List<Node> nodes, float joinTolerance)부재별 중심선을 이어붙일 허용 거리를 지정해 하나의 선으로 만듭니다.
GetPipeCenterlinesConnected(List<Node> nodes, float joinTolerance, int sliceCount, float roundnessThreshold)부재별 중심선을 허용 거리·구간 수·판정 기준까지 지정해 이어붙입니다.

GetPipeCenterlinesConnected(List<Node> nodes)​

public List<List<Vector3D>> GetPipeCenterlinesConnected(List<Node> nodes)

부재별 중심선을 끝이 맞닿는 것끼리 이어 하나의 선으로 만들어 기본값으로 얻습니다.

Remarks​

폴리라인 하나가 이어진 한 줄기이며, 각 폴리라인은 점 2개 이상으로 이루어집니다.
부재마다 따로 나오던 중심선을 끝점이 맞닿는 것끼리 이어 줄기 수를 줄입니다.
이어붙일 허용 거리는 관 반지름의 배수로 정해지며, 지정하지 않으면 1.5 배를 씁니다.
거리 안에 들어와도 이음점에서 크게 꺾이거나 굵기가 두 배 넘게 다르면 잇지 않습니다 —
나란히 지나가는 다른 계통의 관을 물고 들어가지 않도록 하기 위한 것입니다.
갈라지는 곳에서는 가장 길게 이어지는 쪽으로 계속 이어가고, 나머지 갈래는 별도 줄기가 됩니다.
결과를 View.Effect.AddPathLine 에 줄기마다 한 번씩 넘기면 흐름이 부재 경계에서 끊기지 않습니다.
이때 화살촉은 꺼 두십시오 — 줄기마다 하나씩 붙는 데다, 크기를 맡기면 하한이 있어
짧은 줄기에서는 관보다 커집니다.
배관처럼 단면이 둥근 부재에서만 얻어지며, 플랜지나 판처럼 납작한 형상은 제외됩니다.
계산 비용이 큽니다 — 중심선을 뽑는 비용에 이어붙이는 비용이 더해집니다.
선택한 배관 계통 하나에 쓰는 것을 전제로 하며, 모델 전체에 사용하지 마십시오.

Parameters​

NameTypeDescription
nodesList<Node>대상 노드 목록

Returns​

TypeDescription
List<List<Vector3D>>이어진 줄기 목록 (얻을 것이 없으면 빈 목록)

Examples​

// VIZCore3DX.NET Control
private VIZCore3DX.NET.VIZCore3DXControl vizcore3dx;

private void Example()
{
List<VIZCore3DX.NET.Data.Node> nodes
= vizcore3dx.Object3D.FromFilter(VIZCore3DX.NET.Data.Object3dFilter.SELECTED_TOP);
if (nodes.Count == 0) return;

List<List<VIZCore3DX.NET.Data.Vector3D>> lines
= vizcore3dx.GeometryUtility.GetPipeCenterlinesConnected(nodes);
if (lines.Count == 0) return;

VIZCore3DX.NET.Data.PathLineOptions options
= new VIZCore3DX.NET.Data.PathLineOptions();
options.Group = "PIPE_FLOW";
options.SpeedMmPerSec = 800.0f;
options.PatternLengthMm = 200.0f;
options.ShowArrow = false;

// 줄기마다 한 번씩 넘깁니다.
foreach (List<VIZCore3DX.NET.Data.Vector3D> line in lines)
{
vizcore3dx.View.Effect.AddPathLine(line, options);
}

// 나중에 한 번에 지웁니다.
// vizcore3dx.View.Effect.ClearPathLines("PIPE_FLOW");
}

GetPipeCenterlinesConnected(List<Node> nodes, float joinTolerance)​

public List<List<Vector3D>> GetPipeCenterlinesConnected(List<Node> nodes, float joinTolerance)

부재별 중심선을 이어붙일 허용 거리를 지정해 하나의 선으로 만듭니다.

Remarks​

폴리라인 하나가 이어진 한 줄기이며, 각 폴리라인은 점 2개 이상으로 이루어집니다.
joinTolerance 는 관 반지름의 배수입니다 — 값을 키우면 멀리 떨어진 것까지 잇고,
줄이면 바싹 맞닿은 것만 잇습니다. 지정하지 않으면 1.5 를 씁니다.
굵기가 제각각인 배관에서도 굵은 관은 넉넉히, 얇은 관은 촘촘히 판정됩니다.
거리 안에 들어와도 이음점에서 크게 꺾이거나 굵기가 두 배 넘게 다르면 잇지 않습니다 —
나란히 지나가는 다른 계통의 관을 물고 들어가지 않도록 하기 위한 것입니다.
갈라지는 곳에서는 가장 길게 이어지는 쪽으로 계속 이어가고, 나머지 갈래는 별도 줄기가 됩니다.
결과를 View.Effect.AddPathLine 에 줄기마다 한 번씩 넘기면 흐름이 부재 경계에서 끊기지 않습니다.
이때 화살촉은 꺼 두십시오 — 줄기마다 하나씩 붙는 데다, 크기를 맡기면 하한이 있어
짧은 줄기에서는 관보다 커집니다.
계산 비용이 큽니다 — 선택한 배관 계통 하나에 쓰는 것을 전제로 합니다.

Parameters​

NameTypeDescription
nodesList<Node>대상 노드 목록
joinTolerancefloat이어붙일 허용 거리 (관 반지름의 배수, 0.1 ~ 10 범위로 조정됩니다)

Returns​

TypeDescription
List<List<Vector3D>>이어진 줄기 목록 (얻을 것이 없으면 빈 목록)

Examples​

// VIZCore3DX.NET Control
private VIZCore3DX.NET.VIZCore3DXControl vizcore3dx;

private void Example()
{
List<VIZCore3DX.NET.Data.Node> nodes
= vizcore3dx.Object3D.FromFilter(VIZCore3DX.NET.Data.Object3dFilter.SELECTED_TOP);
if (nodes.Count == 0) return;

// 부재 사이가 살짝 벌어져 있어 허용 거리를 넉넉히 줍니다.
List<List<VIZCore3DX.NET.Data.Vector3D>> lines
= vizcore3dx.GeometryUtility.GetPipeCenterlinesConnected(nodes, 3.0f);

VIZCore3DX.NET.Data.PathLineOptions options
= new VIZCore3DX.NET.Data.PathLineOptions();
options.Group = "PIPE_FLOW";
options.SpeedMmPerSec = 800.0f;
options.ShowArrow = false;

foreach (List<VIZCore3DX.NET.Data.Vector3D> line in lines)
{
vizcore3dx.View.Effect.AddPathLine(line, options);
}
}

GetPipeCenterlinesConnected(List<Node> nodes, float joinTolerance, int sliceCount, float roundnessThreshold)​

public List<List<Vector3D>> GetPipeCenterlinesConnected(List<Node> nodes, float joinTolerance, int sliceCount, float roundnessThreshold)

부재별 중심선을 허용 거리·구간 수·판정 기준까지 지정해 이어붙입니다.

Remarks​

폴리라인 하나가 이어진 한 줄기이며, 각 폴리라인은 점 2개 이상으로 이루어집니다.
joinTolerance 는 관 반지름의 배수입니다 — 값을 키우면 멀리 떨어진 것까지 잇습니다.
sliceCount 는 중심선을 몇 토막으로 나눠 잴지, roundnessThreshold 는 단면이 얼마나 둥글어야
배관으로 볼지 정합니다. 지정하지 않을 때와 같은 뜻으로 각각 8 과 0.5 를 기본으로 씁니다.
거리 안에 들어와도 이음점에서 크게 꺾이거나 굵기가 두 배 넘게 다르면 잇지 않습니다 —
나란히 지나가는 다른 계통의 관을 물고 들어가지 않도록 하기 위한 것입니다.
갈라지는 곳에서는 가장 길게 이어지는 쪽으로 계속 이어가고, 나머지 갈래는 별도 줄기가 됩니다.
결과를 View.Effect.AddPathLine 에 줄기마다 한 번씩 넘기면 흐름이 부재 경계에서 끊기지 않습니다.
이때 화살촉은 꺼 두십시오 — 줄기마다 하나씩 붙는 데다, 크기를 맡기면 하한이 있어
짧은 줄기에서는 관보다 커집니다.
한 줄기의 점 개수에 상한이 있어, 아주 긴 줄기는 상한에서 끊겨 다음 줄기로 이어집니다.
계산 비용이 큽니다 — 선택한 배관 계통 하나에 쓰는 것을 전제로 합니다.

Parameters​

NameTypeDescription
nodesList<Node>대상 노드 목록
joinTolerancefloat이어붙일 허용 거리 (관 반지름의 배수, 0.1 ~ 10 범위로 조정됩니다)
sliceCountint중심선을 나눌 구간 수 (2 ~ 64 범위로 조정됩니다)
roundnessThresholdfloat배관으로 볼 단면의 최소 둥근 정도 (0.05 ~ 0.95 범위로 조정됩니다)

Returns​

TypeDescription
List<List<Vector3D>>이어진 줄기 목록 (얻을 것이 없으면 빈 목록)

Examples​

// VIZCore3DX.NET Control
private VIZCore3DX.NET.VIZCore3DXControl vizcore3dx;

private void Example()
{
List<VIZCore3DX.NET.Data.Node> nodes
= vizcore3dx.Object3D.FromFilter(VIZCore3DX.NET.Data.Object3dFilter.SELECTED_TOP);
if (nodes.Count == 0) return;

// 굽은 관을 촘촘히 나누고, 확실한 원통만 남깁니다.
List<List<VIZCore3DX.NET.Data.Vector3D>> lines
= vizcore3dx.GeometryUtility.GetPipeCenterlinesConnected(nodes, 2.0f, 16, 0.8f);

VIZCore3DX.NET.Data.PathLineOptions options
= new VIZCore3DX.NET.Data.PathLineOptions();
options.Group = "PIPE_FLOW";
options.SpeedMmPerSec = 1200.0f;
options.ShowArrow = false;

foreach (List<VIZCore3DX.NET.Data.Vector3D> line in lines)
{
vizcore3dx.View.Effect.AddPathLine(line, options);
}
}