示例#1
0
void bond_xtal_origin_update (int iw)
{
    register int i,j;
    int k;
    double *new_s, ds[3], tmp[3];
    if (temporary_disable_bond) return;
    MALLOC( bond_xtal_origin_update, new_s, DIMENSION*np, double );
    V3mM3 (n[iw].xtal_origin, HI, ds);
    V3TRIM (ds, ds);
    for (i=0; i<np; i++)
    {
        V3SUB ( &(s[DIMENSION*i]), ds, &(new_s[DIMENSION*i]) );
        V3TriM ( &(new_s[DIMENSION*i]) );
    }
    if (n[iw].bond_mode == BOND_MODE_USER)
        for (k=0; k<C->n_cylinders; k++)
        {
            i = CylinderAtoms[2*k];
            j = CylinderAtoms[2*k+1];
            V3SUB (&(new_s[DIMENSION*j]), &(new_s[DIMENSION*i]), tmp);
            if ( V3NEED_IMAGE(tmp) )
            { /* g<0 means geometric invisibility */
                C->CYLINDER[k].g = -fabs(C->CYLINDER[k].g);
                C->CYLINDER[k].radius = -fabs(C->CYLINDER[k].radius);
            }
            else
            {
                C->CYLINDER[k].g =  fabs(C->CYLINDER[k].g);
                C->CYLINDER[k].radius =  fabs(C->CYLINDER[k].radius);
                V3EQV (B->BALL[i].x, C->CYLINDER[k].x0);
            }
        }
    else
        for (i=0; i<np; i++)
            for (j=N->idx[i]; j<N->idx[i+1]; j++)
            {
                V3SUB (&(new_s[DIMENSION*N->list[j]]),
                       &(new_s[DIMENSION*i]), tmp);
                if ( V3NEED_IMAGE(tmp) )
                { /* g<0 means geometric invisibility */
                    C->CYLINDER[j].g = -fabs(C->CYLINDER[j].g);
                    C->CYLINDER[j].radius = -fabs(C->CYLINDER[j].radius);
                }
                else
                {
                    C->CYLINDER[j].g = BOND_G(i, N->list[j]);
                    V3EQV (B->BALL[i].x, C->CYLINDER[j].x0);
                    if (C->CYLINDER[j].r >= 0)
                        C->CYLINDER[j].radius = n[iw].bond_radius;
                }
            }
    free (new_s);
    n[iw].bond_xtal_origin_need_update = FALSE;
    return;
} /* end bond_xtal_origin_update() */
示例#2
0
文件: primitives.c 项目: dmt4/atomeye
/* Allocate bonds */
void Config_to_3D_Bonds (double bond_radius)
{
    register int i,j;
    AX_Float ds[3], DS[3];
    AX_3D_Cylinders_Realloc (C, N->idx[np]);
    for (i=0; i<np; i++)
        for (j=N->idx[i]; j<N->idx[i+1]; j++)
        {
            V3EQV ( B->BALL[i].x, C->CYLINDER[j].x0 );
            V3SUB ( &s[DIMENSION*N->list[j]], &s[DIMENSION*i], ds );
            V3IMAGE ( ds, DS );
            V3mM3 ( DS, H, C->CYLINDER[j].axis );
            AX_V3NORMALIZE ( C->CYLINDER[j].axis, C->CYLINDER[j].axis[3] );
            BONDCOLOR (i, N->list[j], j);
            if (V3NEED_IMAGE(ds))
            {
                C->CYLINDER[j].g = -1;
                C->CYLINDER[j].radius = -1;
            }
            else C->CYLINDER[j].radius = bond_radius;
        }
    return;
} /* end Config_to_3D_Bonds() */