!***************************************************************
! HW_COMPLETE_FLR / 2006-11-09 / Vertex Systems Oy
!***************************************************************
#GET_INTERFACE#

It= new_iterator("",0,"ROLED","PARAMS")
Param= next_item(It)
if !Param then exit
set_macro_param(Param) "IMP~COMPLETE","1"
set RETURN "1"

#GET_INTERFACE#
!
#COMPLETE#
!
set RETURN "0"
!
!debug ./HW_COMPLETE_FLR.dbg

common_indexes 1

# include hw_connection.def

FrameConn = get(P~FLOOR_FRAME_CONN)

if FrameConn then
  StudTrackGapB$ = get(P~FLOOR_JOIST_TOL)
  if (empty_string(StudTrackGapB$)) then StudTrackGapB$ = get(P~TOL_B)
  Sq$ = get(P~FLOOR_SCREW_QTY)

  FitTole= mm_to_dwg(4.0)
  EndTole= mm_to_dwg(15.0)
  Ovrtole= mm_to_dwg(18.0)
  FreeEnd= mm_to_dwg(50.0)
  !
  I= new_iterator("MACROBJ_TYPE")
  Tube= next_item(I)
  if Tube < 1 then exit

  JointProg$= get_obj_param(Tube,"JNTPROG")
  
  It= new_iterator("",0,"ROLED","PARAMS")
  Params= next_item(It)
  Adapt= 0
  if (Params) then
    Adapt= get_obj_param(Params,"ADAPT")
    JointProg$= get_obj_param(Params,"JNTPROG")
  endif

  J= new_iterator("MACROOBJ_TYPE")

  IC= new_iterator("")
  Ic= new_iterator("")
  ICP= new_iterator("")
  ICSubObjs= new_iterator("")

  !
  TP= 1;  TX= 2;  TY= 3;  TZ= 4;
  PP= 5;  PX= 6;  PY= 7;  PZ= 8;
  EP= 9;  EX= 10; EY= 11; EZ= 12;
  D= 13;  P= 14;  N= 15;  P1= 16; P2= 17;
  JP= 18; JX= 19; JY= 20; JZ= 21;
  OP= 22; OX= 23; OY= 24; OZ= 25
  FP= 26; MIN = 27; MAX = 28;
  MinX = 29; MinY = 30; MinZ = 31;
  MaxX = 32; MaxY = 33; MaxZ = 34;

  StartPt= 35; EndPt= 36; Z = 37;
  PntP = 38; PeP = 39; PeN = 40
  Dir = 41; Dir2 = 42

  HP= 43
  HX= 44
  HY= 45
  HZ= 46
  CH= 47
  CP= 48

  GT= 1
  GP= 2
  GeomP= 3
  GeomH= 4

  vec_to(JP) 0,0,0
  vec_to(JX) 1,0,0
  vec_to(JY) 0,1,0
  vec_to(JZ) 0,0,1
  !
  New0= get_macro_param(Tube,"NEW0")
  Main0= get_macro_param(Tube,"MAIN0")
  !
  Counter = 1

  if (Adapt) then
    init_iterator(I) "",0,"ROLED","PCE"
  else
    init_iterator(I) "PROFOBJ"
  endif
  loop
    Pce= next_item(I)
    exitif Pce < 1
    Ok= 1
    if (Adapt) then Ok= is_adapt_act(Pce)
    Use$ = get_obj_param(Pce,"USE")
    if ((findstr(Use$,"BLOCK") || cmp(Use$,"LADDER") || cmp(Use$,"BEAM") || cmp(Use$,"BOXED REINFORCEMENT")) && Ok) then
      END = 0
      loop 2
        get_vxgeom(GP) Pce
        get_origin_pos(Pce) PP,PX,PY,PZ

        End= get_actual_pcend(Pce,END)
        get_origin_pos(End) EP,EX,EY,EZ

        Found= 0
        FoundDot= 0.95

        if (Adapt) then
          init_iterator(J) "",0,"ROLED","PCE"
        else
          init_iterator(J) "PROFOBJ"
        endif
        loop
          Track = next_item(J)
          exitif Track < 1

          if Track != Pce then
            get_origin_pos(Track) TP,TX,TY,TZ
            get_vxgeom(GT) Track

            Ok1= 0
            Dot= vec_dot_prod(PY,TY)
            if abs(Dot) > 0.9999 then Ok1= 1
            Ok2= 0
            Dot= vec_dot_prod(TZ,EZ)
            if Dot < 0 then Dot= -Dot
            Ang= acos(Dot)
            if Ang > 10 then Ok2= 1
            Ok3= 0
            vec_sub(D) EP,TP
            Dot= vec_dot_prod(D,TY)
            if abs(Dot) < FitTole then Ok3= 1
            Ok4 = is_pce_end_in_pce(End,Track)

            if (Ok1 && Ok2 && Ok3 && Ok4) then
              if findstr(Use$,"HORIZ") then
                Found = Track
              else            
                vec_copy(D) TX
                Ok1= proj_to_piece(P,N,EP,D,Track,0,1)
                vec_sub(D) P,EP
                Dot1= vec_dot_prod(D,TX)
                vec_rev(D) TX
                Ok2= proj_to_piece(P,N,EP,D,Track,0,1)
                vec_sub(D) P,EP
                Dot2= vec_dot_prod(D,TX)
                Count= 0
                if Dot1 < 0 then Count= Count+1
                if Dot2 < 0 then Count= Count+1
                !if Ok1 && Ok2 && Count == 1 then
                if Ok1 && Ok2 then
                  if vxgeom_cross_pnts(GT,P1,GP,P2) then
                    if is_in_vxgeom(GT,P1,0,EndTole) && is_in_vxgeom(GP,P2,1,EndTole) then
                      Dot= vec_dot_prod(EZ,TZ)
                      Dot= abs(Dot)
                      if Dot < FoundDot then
                        vec_copy(FP) P1
                        Found= Track
                        FoundDot= Dot
                      endif
                    endif
                  endif
                endif
              endif          
            endif
          endif
        endloop

        if Found then
          Track= Found

          init_iterator(Ic) "",End,"CONNECTIONS"
          loop
            Conn= next_item(Ic)
            exitif !Conn        
            del_object(Conn)
          endloop

          init_iterator(Ic) "",End,"CONNECTIONS_HC"
          loop
            Conn= next_item(Ic)
            exitif !Conn        
            del_object(Conn)
          endloop

          if (len(JointProg$) > 1) then
            set "TYPE","TEE"
            set "PCE",Track
            set "END",End
            set "ENDGAP",StudTrackGapB$
            set "SQ",Sq$
            set "P",JP
            set "X",JX
            set "Y",JY
            set "Z",JZ
            
            call JointProg$
          else
            Ok1= 0
            Ok2= 0
            get_origin_pos(Track) TP,TX,TY,TZ
            Dot= vec_dot_prod(EZ,TX)
            if Dot < 0 then Ok1= 1
            Zc= vec_get_z(EY)
            if abs(Zc) > mm_to_dwg(0.01) then Ok2= 1

            Shp1$= get_material_param(Pce,"HOWICK")
            Shp2$= get_material_param(Track,"HOWICK")
            
            Wdt = get_section_param(Track,"WIDTH",1)
            Hgt = get_section_param(Track,"HEIGHT",1)

            Use$ = get_obj_param(Pce,"USE")
            NoDimple= 0
            if (findstr(Use$,"BOX")) then
              NoDimple= 1
            endif
            
            if cmp(Shp1$,"C") && cmp(Shp2$,"C") then
              if Ok1 && Ok2 then
                if Wdt == mm_to_dwg(65) && Hgt == mm_to_dwg(45) then
                  Jnt= new_djoint("JOINT_HOWICK","HW_0306AM",JP,JX,JY,JZ,0,0)
                else            
                  Jnt= new_djoint("JOINT_HOWICK","HW_0306A",JP,JX,JY,JZ,0,0)
                endif
                set_djmember(Jnt) Track,"PCE"
                set_djmember(Jnt) End,"END"
                set_djparam(Jnt) "PRE~SQ",Sq$
                set_djparam(Jnt) "PRE~SILENT","1"
                set_djparam(Jnt) "PRE~ENDGAP",StudTrackGapB$
                if (NoDimple) then
                  set_djparam(Jnt) "PRE~NODIMPLE",NoDimple
                endif
                Done= 1
              else
                if Wdt == mm_to_dwg(65) && Hgt == mm_to_dwg(45) then
                  Jnt= new_djoint("JOINT_HOWICK","HW_0306AN",JP,JX,JY,JZ,0,0)
                else            
                  Jnt= new_djoint("JOINT_HOWICK","HW_0306B",JP,JX,JY,JZ,0,0)
                endif
                set_djmember(Jnt) Track,"PCE"
                set_djmember(Jnt) End,"END"
                set_djparam(Jnt) "PRE~SQ",Sq$
                set_djparam(Jnt) "PRE~SILENT","1"
                Done= 1
              endif
            else
              if cmp(Shp1$,"C") && cmp(Shp2$,"U") then
                if Ok1 && Ok2 then
                  Jnt= new_djoint("JOINT_HOWICK","HW_0306I",JP,JX,JY,JZ,0,0)
                  set_djmember(Jnt) Track,"PCE"
                  set_djmember(Jnt) End,"END"
                  set_djparam(Jnt) "PRE~SQ",Sq$
                  set_djparam(Jnt) "PRE~SILENT","1"
                  set_djparam(Jnt) "PRE~ENDGAP",StudTrackGapB$
                  Done= 1
                else
                  Jnt= new_djoint("JOINT_HOWICK","HW_0306J",JP,JX,JY,JZ,0,0)
                  set_djmember(Jnt) Track,"PCE"
                  set_djmember(Jnt) End,"END"
                  set_djparam(Jnt) "PRE~SQ",Sq$
                  set_djparam(Jnt) "PRE~SILENT","1"
                  set_djparam(Jnt) "PRE~ENDGAP",StudTrackGapB$
                  Done= 1
                endif
              else
                Jnt= new_djoint("JOINT_HOWICK","HW_0306J",JP,JX,JY,JZ,0,0)
                set_djmember(Jnt) Track,"PCE"
                set_djmember(Jnt) End,"END"
                set_djparam(Jnt) "PRE~SQ",Sq$
                set_djparam(Jnt) "PRE~SILENT","1"
                set_djparam(Jnt) "PRE~ENDGAP",StudTrackGapB$
                Done= 1
              endif
            endif
          endif
        endif
      END = END + 1
      endloop
    endif
  endloop

  K= new_iterator("MACROOBJ_TYPE")
  L= new_iterator("MACROOBJ_TYPE")

  if (Adapt) then
    init_iterator(K) "",0,"ROLED","PCE"
  else
    init_iterator(K) "PROFOBJ"
  endif
  loop
    Pce= next_item(K)
    exitif !Pce
    Mat$= get_material_param(Pce,"HOWICK")
    Use$= get_obj_param(Pce,"USE")
    Type = get_obj_param(Pce,"FPTYPE")

    get_origin_pos(Pce) PP,PX,PY,PZ
    if (cmp(Mat$,"C") || cmp(Mat$,"U")) then
      Jnt= 0
      get_vxgeom(GeomP) Pce

      if (Adapt) then
        init_iterator(L) "",0,"ROLED","PCE"
      else
        init_iterator(L) "PROFOBJ"
      endif
      loop
        Hit= next_item(L)
        exitif !Hit
        get_origin_pos(Hit) HP,HX,HY,HZ
        MatH$= get_material_param(Hit,"HOWICK")
        UseH$= get_obj_param(Hit,"USE")
        TypeH = get_obj_param(Hit,"FPTYPE")

        Ok0= 0
        Ok1= 0
        Ok2= 0
        Ok3= 0
        NoDimple= 0

        if (cmp(UseH$,"BLOCK") || cmp(UseH$,"RAFTER") || cmp(UseH$,"JOIST") || cmp(UseH$,"OPENING TRIM") || cmp(UseH$,"BLOCKING")) && (cmp(MatH$,"C") || cmp(MatH$,"U"))  then Ok0= 1
        if (!Ok0 && findstr(UseH$,"BOX")) then
          Ok0= 1
          NoDimple= 1
        endif

        Dot= vec_dot_prod(PZ,HZ)
        if abs(Dot) < 0.998 then Ok1= 1

        vec_sub(D) PP,HP
        Dot= vec_dot_prod(D,PY)
        if abs(Dot) < FitTole then Ok2= 1

        Dot= vec_dot_prod(HY,PY)
        if abs(Dot) > 0.999 then Ok3= 1

        Ok4 = 1
        if (Adapt) then Ok4 = is_adapt_act_pos(Pce,Hit,1)

        if (Ok0 && Ok1 && Ok2 && Ok3 && Ok4) then
          get_vxgeom(GeomH) Hit
          if vxgeom_cross_pnts(GeomP,CP,GeomH,CH) then
            if is_in_vxgeom(GeomP,CP,0,FreeEnd) && is_in_vxgeom(GeomH,CH,0,FreeEnd) then
              if (len(JointProg$) > 1) then
                set "TYPE","CROSS"
                set "PCE",Pce
                set "HIT",Hit
                set "SQ",Sq$
                set "P",JP
                set "X",JX
                set "Y",JY
                set "Z",JZ
                  
                call JointProg$
              else
                Sqty= DefQty
                Sqty$= Sqty

                if cmp(Mat$,"C") && cmp(MatH$,"C") then
                  Wdt = get_section_param(Pce,"WIDTH",1)
                  Hgt = get_section_param(Pce,"HEIGHT",1)
                  
                  if Wdt == mm_to_dwg(65) && Hgt == mm_to_dwg(45) then
                    Jnt= new_djoint("JOINT_HOWICK","HW_0306AP",JP,JZ,JY,JZ,0,0);
                  else
                    Jnt= new_djoint("JOINT_HOWICK","HW_0306D",JP,JZ,JY,JZ,0,0);
                  endif
                  if !Jnt then exit
                  if TypeH == 210 then
                    set_djmember(Jnt) Pce,"HIT"
                    set_djmember(Jnt) Hit,"PCE"
                  else
                    set_djmember(Jnt) Pce,"PCE"
                    set_djmember(Jnt) Hit,"HIT"
                  endif
                  set_djparam(Jnt) "PRE~SQ",Sq$
                  set_djparam(Jnt) "PRE~SILENT","1"
                  if (NoDimple) then
                    set_djparam(Jnt) "PRE~NODIMPLE",NoDimple
                  endif
                  set RETURN "1"
                else
                  if cmp(Mat$,"C") && cmp(MatH$,"U") then
                    Jnt= new_djoint("JOINT_HOWICK","HW_0306L",JP,JZ,JY,JZ,0,0);
                    if !Jnt then exit
                    set_djmember(Jnt) Hit,"PCE"
                    set_djmember(Jnt) Pce,"HIT"
                    set_djparam(Jnt) "PRE~SQ",Sq$
                    set_djparam(Jnt) "PRE~SILENT","1"
                    set RETURN "1"
                  endif
                endif
              endif
            endif
          endif
        endif
      endloop
    endif
  endloop
endif
!
set RETURN "1"
!
#COMPLETE#
