!   TITLE:  comb_areas2.mac (SM_TOOL)
!
!
!   OBJECTIVE:
!
!   This sub-macro combines all selected areas in a model.
!
!
!   COMMAND SYNTAX:
!
!        COMB_AREAS
!
!
!   DESCRIPTION:
!
!   All areas that are cartesian coplanar are combined into single areas
!   to keep the model clean by reducing the number of solid model entities
!   to a minimum.
!
!   1. Select an area from the full set and check to see if area is planar.
!
!   2. Select all areas in the same plane with an area that has been determined
!      to be planar.
!
!   3. Check to see that all of these areas are planar.
!
!   4. Of all areas determined to be planar, each area must share at least 1
!      line with another area, exclusively.
!
!
*get,prkey_,active,0,prkey
/nopr

vol_=arg1
!
init_entity_num
*get,vcount_,volu,,count
!
*if,vol_,eq,0,then
    *if,vcount_,eq,1,then
        vol_=vm
    *endif
*endif
!
*get,actcs_,active,,csys
vsel,s,volu,,vol_
aslv,s
entity_array,'a','aset2_','array'
a2_=ecount
!
!
*do,abc_,1,a2_,1
    asel,s,area,,aset2_(abc_,1)
    asum
    lsla,s
    ksll,s
    get_min_entity
    *get,kcnt_,kp,k_min,nxth
    !
    *get,acx_,area,,cent,x
    *get,acy_,area,,cent,y
    *get,acz_,area,,cent,z
    !
    csys,0
    k,,acx_,acy_,acz_
    get_max_entity
    xypt_=km
    !
    cskp,csn+5,0,kcnt_,k_min,xypt_
    !
    *get,ksettyp_,parm,kset2_,type
    !
    *if,ksettyp_,eq,1,then
        *set,kset2_(1),
    *endif
    !
    entity_array,'k','kset2_','array'
    k2_=ecount
    !
    *do,xyz_,1,k2_,1
        csys,csn+5
        dist__=kz(kset2_(xyz_,1))
        prec_=4
        tol_=10**(-prec_-1)
        !
        *if,abs(dist__),lt,tol_,then
            dist__=0
        *else
            *if,abs(dist__),ge,(10*tol_),then
                round_num,dist__,prec_
            *else
                round_num,dist__,prec_+1
            *endif
            !
            dist__=num_
        *endif
        !
        *if,dist__,ne,0,then
            *exit
        *else
            *if,xyz_,eq,k2_,then
                *get,aset1tp_,parm,aset1_,type
                !
                *if,aset1tp_,ne,1,then
                    *dim,aset1_,array,a2_,1
                *endif
                !
                aset1_(abc_,1)=aset2_(abc_,1)
            *endif
        *endif
    *enddo
*enddo
!
init_entity_num
!
elcnt_=0
!
*do,ijk_,1,a2_,1
    *if,aset1_(ijk_,1),ne,0,then
        elcnt_=elcnt_+1
    *endif
*enddo
!
*dim,plnra_,array,elcnt_,1
elcnt_=0
!
*do,ijk_,1,a2_,1
    *if,aset1_(ijk_,1),ne,0,then
        elcnt_=elcnt_+1
        plnra_(elcnt_,1)=aset1_(ijk_,1)
    *endif
*enddo
!
*set,kset2_(1),
*set,aset1_(1),
*set,aset2_(1),
!
!
*get,acnt_,parm,plnra_,dim,x
!
*do,ijkm_,1,acnt_,1
    *if,plnra_(ijkm_,1),ne,0,then
        asel,s,area,,plnra_(ijkm_,1)
        asum
        lsla,s
        ksll,s
        get_min_entity
        *get,kcnt_,kp,k_min,nxth
        !
        *get,acx_,area,,cent,x
        *get,acy_,area,,cent,y
        *get,acz_,area,,cent,z
        !
        csys,0
        k,,acx_,acy_,acz_
        get_max_entity
        xypt_=km
        !
        cskp,csn+5,0,kcnt_,k_min,xypt_
        !
        *do,abc_,1,acnt_,1
            *if,abc_,eq,1,then
                *if,plnra_(abc_,1),ne,0,then
                    asel,s,area,,plnra_(abc_,1)
                    frstset_=0
                *else
                    frstset_=1
                *endif
            *else
                *if,plnra_(abc_,1),ne,0,then
                    *if,frstset_,eq,0,then
                        asel,a,area,,plnra_(abc_,1)
                    *else
                        asel,s,area,,plnra_(abc_,1)
                        frstset_=0
                    *endif
                *endif
            *endif
        *enddo
        !
        asel,r,loc,z,0
        *get,acount_,area,,count
        !
        *if,acount_,gt,1,then
            entity_array,'a','aset%ijkm_%','array'
        *elseif,acount_,eq,1,then
            ecount=acount_
        *endif
        !
        *do,def_,1,ecount,1
            *if,acount_,gt,1,then
                arry_search,'plnra_',aset%ijkm_%(def_,1)
            *elseif,acount_,eq,1,then
                get_max_entity
                arry_search,'plnra_',am
            *endif
            !
            rplnra_=hit(1,1,1)
            cplnra_=hit(1,2,1)
            !
            plnra_(rplnra_,cplnra_)=0
        *enddo
    *endif
*enddo
!








*go,:skip


!
*get,acnt_,parm,plnra_,dim,x
!
*do,abc_,1,acnt_,1
    *get,aacnt_,parm,aset%abc_%,dim,x
    !
    *if,aacnt_,gt,0,then
        *do,xyz_,1,aacnt_,1
            asel,s,area,,aset%abc_%(xyz_,1)
            vsla,s
            *get,vcount_,volu,,count
            !
            *if,vcount_,gt,1,then
                keepa_=0
            *elseif,vcount_,eq,1,then
                keepa_=1
            *endif
            !
            *if,keepa_,eq,0,then
                aset%abc_%(xyz_,1)=0
            *endif
        *enddo
    *endif
*enddo













!
*get,acnt_,parm,plnra_,dim,x














*go,:skip




!arr_='plnra_'
arr_='aset164'

*get,acnt_,parm,%arr_%,dim,x
!
*do,i,1,acnt_,1
    *if,i,eq,1,then
        asel,s,area,,%arr_%(i,1)
    *else
        asel,a,area,,%arr_%(i,1)
    *endif
*enddo






*get,acnt_,parm,plnra_,dim,x
!
*do,i,1,acnt_,1
    *get,asettyp_,parm,aset%i%,type
    !
    *if,asettyp_,eq,1,then
        *set,aset%i%,
    *endif
*enddo









*set,a1_,
*set,ecount,
*set,xypt_,
*set,acx_,
*set,acy_,
*set,acz_,
*set,k1_,
*set,kcnt_,
*set,actcs_,
*set,dist__,
*set,abc_,
*set,xyz_,
*set,k_min,
*set,prec_,
*set,tol_,
*set,abrta_,
*set,num_,
*set,a2_,
*set,abrta2_,
*set,addindx_,
*set,qrs_,
*set,
*set,
*set,
*set,
*set,
*set,
*set,
*set,
*set,
*set,
*set,
*set,
*set,
*set,
*set,aset1_(1),
*set,kset1_(1),
*set,aset2_(1),
*set,addset_(1),


*if,prkey_,eq,1,then
    /go
*endif

:skip