MCPcopy Create free account
hub / github.com/BIMCoderLiang/LNLib / Extract

Method Extract

src/LNLib/Geometry/Volume/NurbsVolume.cpp:673–844  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

671}
672
673bool LNLib::NurbsVolume::Extract(const LN_NurbsVolume& volume, double parameter, VolumeDirection direction, LNLib::LN_NurbsSurface surface)
674{
675 int degreeU = volume.DegreeU;
676 int degreeV = volume.DegreeV;
677 int degreeW = volume.DegreeW;
678
679 std::vector<double> kvU = volume.KnotVectorU;
680 std::vector<double> kvV = volume.KnotVectorV;
681 std::vector<double> kvW = volume.KnotVectorW;
682
683 std::vector<std::vector<std::vector<LNLib::XYZW>>> controlPoints = volume.ControlPoints;
684 std::vector<std::vector<LNLib::XYZW>> Pwc;
685
686 LN_NurbsVolume insertVolume;
687 int k, s, rr;
688
689 int newDegreeU, newDegreeV;
690 std::vector<double> newKvU, newKvV;
691
692 if (direction == VolumeDirection::U)
693 {
694 if (LNLib::MathUtils::IsAlmostEqualTo(parameter, kvU[0]))
695 {
696 Pwc = controlPoints[0];
697 }
698 else if (LNLib::MathUtils::IsAlmostEqualTo(parameter, kvU[kvU.size() - 1]))
699 {
700 Pwc = controlPoints[controlPoints.size() - 1];
701 }
702 else
703 {
704 k = LNLib::Polynomials::GetKnotSpanIndex(degreeU, kvU, parameter);
705 s = LNLib::Polynomials::GetKnotMultiplicity(kvU, parameter);
706 rr = degreeU - s;
707
708 if (rr > 0)
709 {
710 InsertKnot(volume, parameter, rr, direction, insertVolume);
711
712 kvU = insertVolume.KnotVectorU;
713 kvV = insertVolume.KnotVectorV;
714 kvW = insertVolume.KnotVectorW;
715 controlPoints = insertVolume.ControlPoints;
716
717 k = LNLib::Polynomials::GetKnotSpanIndex(degreeU, kvU, parameter);
718 s = LNLib::Polynomials::GetKnotMultiplicity(kvU, parameter);
719 }
720 Pwc = controlPoints[k - s];
721
722 newDegreeU = degreeV;
723 newDegreeV = degreeW;
724 newKvU = kvV;
725 newKvV = kvW;
726 }
727 }
728 else if (direction == VolumeDirection::V)
729 {
730 if (LNLib::MathUtils::IsAlmostEqualTo(parameter, kvV[0]))

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected