summaryrefslogtreecommitdiff
path: root/src/IGESSelect/IGESSelect_ChangeLevelList.cxx
blob: 6ce57be05b2ae5261fa03b86ca5a6af124110825 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright: 	Matra-Datavision 1994
// File:	IGESSelect_ChangeLevelList.cxx
// Created:	Thu Aug 25 15:53:24 1994
// Author:	Christian CAILLET
//		<cky>
#include <IGESSelect_ChangeLevelList.ixx>
#include <IGESData_LevelListEntity.hxx>
#include <IGESData_IGESEntity.hxx>
#include <Interface_Macros.hxx>
#include <stdio.h>
#include <Interface_Check.hxx>


    IGESSelect_ChangeLevelList::IGESSelect_ChangeLevelList ()
    :  IGESSelect_ModelModifier (Standard_True)    {  }

    Standard_Boolean  IGESSelect_ChangeLevelList::HasOldNumber () const
      {  return (!theold.IsNull());  }

    Handle(IFSelect_IntParam)  IGESSelect_ChangeLevelList::OldNumber () const
      {  return theold;  }

    void  IGESSelect_ChangeLevelList::SetOldNumber
  (const Handle(IFSelect_IntParam)& param)
      {  theold = param;  }

    Standard_Boolean  IGESSelect_ChangeLevelList::HasNewNumber () const
      {  return (!thenew.IsNull());  }

    Handle(IFSelect_IntParam)  IGESSelect_ChangeLevelList::NewNumber () const
      {  return thenew;  }

    void  IGESSelect_ChangeLevelList::SetNewNumber
  (const Handle(IFSelect_IntParam)& param)
      {  thenew = param;  }


    void  IGESSelect_ChangeLevelList::Performing
  (IFSelect_ContextModif& ctx,
   const Handle(IGESData_IGESModel)& ,
   Interface_CopyTool& ) const
{
  Standard_Integer oldl = 0;
  Standard_Boolean yaold = HasOldNumber();
  if (yaold) oldl = theold->Value();
  Standard_Boolean yanew = HasOldNumber();
  Standard_Integer newl = 0;
  if (yanew) newl = thenew->Value();
  if (oldl < 0) ctx.CCheck()->AddFail("ChangeLevelList : OldNumber negative");
  if (newl < 0) ctx.CCheck()->AddFail("ChangeLevelList : NewNumber negative");
  if (oldl < 0 || newl < 0) return;

  Handle(IGESData_LevelListEntity) nulist;
  for (ctx.Start(); ctx.More(); ctx.Next()) {
    DeclareAndCast(IGESData_IGESEntity,ent,ctx.ValueResult());
    if (ent.IsNull()) continue;
    if (ent->DefLevel() != IGESData_DefSeveral) continue;
    if (yaold && ent->Level() != oldl) continue;
    if (!yanew) {
      Handle(IGESData_LevelListEntity) list = ent->LevelList();
      if (list.IsNull()) continue;
      newl = (list->NbLevelNumbers() > 0 ? list->LevelNumber(1) : 0);
      if (newl < 0) newl = 0;
    }
    ent->InitLevel(nulist,newl);
    ctx.Trace();
  }
}

    TCollection_AsciiString  IGESSelect_ChangeLevelList::Label () const
{
  char labl[100];
  Standard_Integer oldl = 0;
  Standard_Boolean yaold = HasOldNumber();
  if (yaold) oldl = theold->Value();
  Standard_Boolean yanew = HasOldNumber();
  Standard_Integer newl = 0;
  if (yanew) newl = thenew->Value();

  if (yaold) sprintf(labl,"Changes Level Lists containing %d", oldl);
  else       sprintf(labl,"Changes all Level Lists in D.E. %d", oldl);
  TCollection_AsciiString label(labl);
  if (yanew) sprintf(labl," to Number %d",newl);
  else       sprintf(labl," to Number = first value in List");
  label.AssignCat(labl);
  return label;
}