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() */
/* 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() */