!   TITLE:  comb_areas.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
!
*get,actcs_,active,,csys
entity_array,'a','aset1_','array'
a1_=ecount
!
*do,abc_,1,a1_,1
    asel,s,area,,aset1_(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_max_entity
    !
    *get,ksettyp_,parm,kset1_,type
    !
    *if,ksettyp_,eq,1,then
        *set,kset1_(1),
    *endif
    !
    entity_array,'k','kset1_','array'
    k1_=ecount
    !
    *do,xyz_,1,k1_,1
        csys,csn+5
        dist__=kz(kset1_(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
            abrta_=1
            *exit
        *else
            abrta_=0
        *endif
    *enddo
    !
    *if,abrta_,eq,0,then
        init_entity_num
        csys,csn+5
        asel,s,loc,z,0
        !
        *get,acount,area,,count
        !
        *if,acount,gt,1,then
            *get,aset2tp_,parm,aset2_,type
            !
            *if,aset2tp_,eq,1,then
                *set,aset2_(1),
            *endif
            !
            entity_array,'a','aset2_','array'
            a2_=ecount
            !
            *do,ijkm_,1,a2_,1
                asel,s,area,,aset2_(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+6,0,kcnt_,k_min,xypt_
                get_max_entity
                !
                *get,ksettyp_,parm,kset1_,type
                !
                *if,ksettyp_,eq,1,then
                    *set,kset1_(1),
                *endif
                !
                entity_array,'k','kset1_','array'
                k1_=ecount
                !
                *do,xyz_,1,k1_,1
                    csys,csn+6
                    dist__=kz(kset1_(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
                        abrta2_=1
                        *exit
                    *else
                        abrta2_=0
                    *endif
                *enddo
                !
                *set,kset1_(1),
                !
                *if,abrta2_,eq,0,then
                    *if,ijkm_,eq,1,then
                        addindx_=0
                        addindx_=addindx_+1
                        !
                        !*get,addtyp_,parm,addset_,type
                        !
                        !*if,addtyp_,eq,1,then
                            !*set,addset_(1),
                        *dim,addset_,array,a2_,1
                        !*endif
                        !
                        addset_(addindx_,1)=aset2_(ijkm_,1)
                    *else
                        addindx_=addindx_+1
                        addset_(addindx_,1)=aset2_(ijkm_,1)
                    *endif
                *endif
            *enddo
            !
            *do,qrs_,1,a2_,1
                *if,qrs_,eq,1,then
                    *if,addset_(qrs_,1),ne,0,then
                        asel,s,area,,addset_(qrs_,1)
                    *endif
                *else
                    *if,addset_(qrs_,1),ne,0,then
                        asel,a,area,,addset_(qrs_,1)
                    *endif
                *endif
            *enddo
            !
            aadd,all
            !
            init_entity_num
            !
            aplot
        *endif
    *endif
    !
    *get,addtyp_,parm,addset_,type
    !
    *if,addtyp_,eq,1,then
        *set,addset_(1),
    *endif
*enddo
!
csdele,csn+5,csn+6,1
csys,actcs_
!
init_entity_num
!
aplot
!
*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,ijkm_,
*set,aset1_(1),
*set,kset1_(1),
*set,aset2_(1),
*set,addset_(1),
!
*if,prkey_,eq,1,then
    /go
*endif