// Own fields of AppliedGroupAssignment
- Handle(StepAP214_HArray1OfGroupItem) aItems;
+ Handle(StepAP214_HArray1OfGroupItem) anItems;
Standard_Integer sub2 = 0;
if ( data->ReadSubList (num, 2, "items", ach, sub2) ) {
Standard_Integer num2 = sub2;
Standard_Integer nb0 = data->NbParams(num2);
- aItems = new StepAP214_HArray1OfGroupItem (1, nb0);
- for ( Standard_Integer i0=1; i0 <= nb0; i0++ ) {
- StepAP214_GroupItem anIt0;
- data->ReadEntity (num2, i0, "items", ach, anIt0);
- aItems->SetValue(i0, anIt0);
+ if (nb0)
+ {
+ anItems = new StepAP214_HArray1OfGroupItem (1, nb0);
+ for ( Standard_Integer i0=1; i0 <= nb0; i0++ ) {
+ StepAP214_GroupItem anIt0;
+ data->ReadEntity (num2, i0, "items", ach, anIt0);
+ anItems->SetValue(i0, anIt0);
+ }
}
}
-
// Initialize entity
- ent->Init(aGroupAssignment_AssignedGroup,
- aItems);
+ ent->Init(aGroupAssignment_AssignedGroup, anItems);
}
//=======================================================================
iter.AddItem (ent->StepBasic_GroupAssignment::AssignedGroup());
// Own fields of AppliedGroupAssignment
-
- for (Standard_Integer i2=1; i2 <= ent->Items()->Length(); i2++ ) {
- StepAP214_GroupItem Var0 = ent->Items()->Value(i2);
- iter.AddItem (Var0.Value());
+ if (!ent->Items().IsNull())
+ {
+ for (Standard_Integer i2=1; i2 <= ent->Items()->Length(); i2++ ) {
+ StepAP214_GroupItem Var0 = ent->Items()->Value(i2);
+ iter.AddItem (Var0.Value());
+ }
}
}
const Standard_Integer Deg = BSCW->Degree();
const Standard_Integer NbPoles = BSCW->NbControlPointsList();
- //aControlPointsList = new StepGeom_HArray1OfCartesianPoint(1,NbPoles);
- const Handle(StepGeom_HArray1OfCartesianPoint)& aControlPointsList = BSCW->ControlPointsList();
- Array1OfPnt_gen Poles(1,NbPoles);
+ const Standard_Integer NbKnots = BSCW->NbKnotMultiplicities();
+ //aKnotMultiplicities = new TColStd_HArray1OfInteger(1,NbKnots);
+ const Handle(TColStd_HArray1OfInteger)& aKnotMultiplicities = BSCW->KnotMultiplicities();
+
Standard_Integer i;
+ Standard_Integer aFMulDiff = 0,aLMulDiff = 0;
+ TColStd_Array1OfInteger Mult(1,NbKnots);
+ for (i=1; i<=NbKnots; ++i) {
+ Standard_Integer aCurrentVal = aKnotMultiplicities->Value(i);
+ if (aCurrentVal > Deg + 1)
+ {
+ if (i == 1) aFMulDiff = aCurrentVal - Deg - 1;
+ if (i == NbKnots) aLMulDiff = aCurrentVal - Deg - 1;
+#ifdef DEB
+ cout << "\nWrong multiplicity " << aCurrentVal << " on " << i
+ << " knot!" << "\nChanged to " << Deg + 1 << endl;
+#endif
+ aCurrentVal = Deg + 1;
+ }
+ Mult.SetValue(i,aCurrentVal);
+ }
+
+ //aControlPointsList = new StepGeom_HArray1OfCartesianPoint(1,NbPoles);
+ const Handle(StepGeom_HArray1OfCartesianPoint)& aControlPointsList = BSCW->ControlPointsList();
+ Standard_Integer aSumMulDiff = aFMulDiff + aLMulDiff;
+ Array1OfPnt_gen Poles(1,NbPoles - aSumMulDiff);
CartesianPoint_gen P;
- for (i=1; i<=NbPoles; i++)
+
+ for (i = 1 + aFMulDiff; i<= NbPoles - aLMulDiff; ++i)
{
if (StepToGeom_MakeCartesianPoint_gen::Convert(aControlPointsList->Value(i),P))
- Poles.SetValue(i,P->Pnt_fonc());
+ Poles.SetValue(i - aFMulDiff,P->Pnt_fonc());
else
return Standard_False;
}
- const Standard_Integer NbKnots = BSCW->NbKnotMultiplicities();
-
- //aKnotMultiplicities = new TColStd_HArray1OfInteger(1,NbKnots);
- const Handle(TColStd_HArray1OfInteger)& aKnotMultiplicities = BSCW->KnotMultiplicities();
- TColStd_Array1OfInteger Mult(1,NbKnots);
- for (i=1; i<=NbKnots; i++) {
- Mult.SetValue(i,aKnotMultiplicities->Value(i));
- }
-
//aKnots = new TColStd_HArray1OfReal(1,NbKnots);
const Handle(TColStd_HArray1OfReal)& aKnots = BSCW->Knots();
TColStd_Array1OfReal Kn(1,NbKnots);
shouldBePeriodic = Standard_False;
//cout << "Strange BSpline Curve Descriptor" << endl;
}
-
+
if (SC->IsKind(STANDARD_TYPE(StepGeom_BSplineCurveWithKnotsAndRationalBSplineCurve))) {
const Handle(TColStd_HArray1OfReal)& aWeight = BSCWR->WeightsData();
TColStd_Array1OfReal W(1,NbPoles);