void Lattice2d :: drawSpecial(oofegGraphicContext &gc, TimeStep *tStep) { WCRec p [ 2 ]; GraphicObj *tr; GaussPoint *gp; FloatArray crackStatuses, cf; if ( !gc.testElementGraphicActivity(this) ) { return; } if ( gc.giveIntVarType() == IST_CrackState ) { gp = integrationRulesArray [ 0 ]->getIntegrationPoint(0); this->giveIPValue(crackStatuses, gp, IST_CrackStatuses, tStep); if ( crackStatuses(0) == 1. || crackStatuses(0) == 2. || crackStatuses(0) == 3 || crackStatuses(0) == 4 ) { FloatArray coords; this->giveCrossSectionCoordinates(coords); p [ 0 ].x = ( FPNum ) coords.at(1); p [ 0 ].y = ( FPNum ) coords.at(2); p [ 0 ].z = ( FPNum ) coords.at(3); p [ 1 ].x = ( FPNum ) coords.at(4); p [ 1 ].y = ( FPNum ) coords.at(5); p [ 1 ].z = ( FPNum ) coords.at(6); EASValsSetLayer(OOFEG_CRACK_PATTERN_LAYER); EASValsSetLineWidth(OOFEG_CRACK_PATTERN_WIDTH); if ( ( crackStatuses(0) == 1. ) ) { EASValsSetColor( gc.getActiveCrackColor() ); } else if ( crackStatuses(0) == 2. ) { EASValsSetColor( gc.getCrackPatternColor() ); } else if ( crackStatuses(0) == 3. ) { EASValsSetColor( gc.getActiveCrackColor() ); } else if ( crackStatuses(0) == 4. ) { EASValsSetColor( gc.getActiveCrackColor() ); } tr = CreateLine3D(p); EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, tr); EGAttachObject(tr, ( EObjectP ) this); EMAddGraphicsToModel(ESIModel(), tr); } } }
void LTRSpace :: drawSpecial(oofegGraphicContext &gc, TimeStep *tStep) { int i, j, k; WCRec q [ 4 ]; GraphicObj *tr; double defScale = gc.getDefScale(); FloatArray crackStatuses, cf; if ( !gc.testElementGraphicActivity(this) ) { return; } if ( gc.giveIntVarType() == IST_CrackState ) { int crackStatus; double xc, yc, zc, length; FloatArray crackDir; if ( numberOfGaussPoints != 1 ) { return; } // for (GaussPoint *gp: *integrationRulesArray [ 0 ] ) { { IntegrationRule *iRule = integrationRulesArray [ 0 ]; GaussPoint *gp = iRule->getIntegrationPoint(0); if ( this->giveIPValue(cf, gp, IST_CrackedFlag, tStep) == 0 ) { return; } if ( ( int ) cf.at(1) == 0 ) { return; } // // obtain gp global coordinates - here only one exists // it is in centre of gravity. xc = yc = zc = 0.; for ( i = 0; i < 4; i++ ) { if ( gc.getInternalVarsDefGeoFlag() ) { // use deformed geometry xc += ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(1, tStep, defScale); yc += ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(2, tStep, defScale); zc += ( FPNum ) this->giveNode(i + 1)->giveUpdatedCoordinate(3, tStep, defScale); } else { xc += ( FPNum ) this->giveNode(i + 1)->giveCoordinate(1); yc += ( FPNum ) this->giveNode(i + 1)->giveCoordinate(2); zc += ( FPNum ) this->giveNode(i + 1)->giveCoordinate(3); } } xc = xc / 4.; yc = yc / 4.; zc = zc / 4.; length = TR_LENGHT_REDUCT * pow(this->computeVolumeAround(gp), 1. / 3.) / 2.0; if ( this->giveIPValue(crackDir, gp, IST_CrackDirs, tStep) ) { this->giveIPValue(crackStatuses, gp, IST_CrackStatuses, tStep); for ( i = 1; i <= 3; i++ ) { crackStatus = ( int ) crackStatuses.at(i); if ( ( crackStatus != pscm_NONE ) && ( crackStatus != pscm_CLOSED ) ) { // draw a crack // this element is 3d element if ( i == 1 ) { j = 2; k = 3; } else if ( i == 2 ) { j = 3; k = 1; } else { j = 1; k = 2; } q [ 0 ].x = ( FPNum ) xc + 0.5 * crackDir.at(0 + j) * length + 0.5 * crackDir.at(0 + k) * length; q [ 0 ].y = ( FPNum ) yc + 0.5 * crackDir.at(3 + j) * length + 0.5 * crackDir.at(3 + k) * length; q [ 0 ].z = ( FPNum ) zc + 0.5 * crackDir.at(6 + j) * length + 0.5 * crackDir.at(6 + k) * length; q [ 1 ].x = ( FPNum ) xc + 0.5 * crackDir.at(0 + j) * length - 0.5 * crackDir.at(0 + k) * length; q [ 1 ].y = ( FPNum ) yc + 0.5 * crackDir.at(3 + j) * length - 0.5 * crackDir.at(3 + k) * length; q [ 1 ].z = ( FPNum ) zc + 0.5 * crackDir.at(6 + j) * length - 0.5 * crackDir.at(6 + k) * length; q [ 2 ].x = ( FPNum ) xc - 0.5 * crackDir.at(0 + j) * length - 0.5 * crackDir.at(0 + k) * length; q [ 2 ].y = ( FPNum ) yc - 0.5 * crackDir.at(3 + j) * length - 0.5 * crackDir.at(3 + k) * length; q [ 2 ].z = ( FPNum ) zc - 0.5 * crackDir.at(6 + j) * length - 0.5 * crackDir.at(6 + k) * length; q [ 3 ].x = ( FPNum ) xc - 0.5 * crackDir.at(0 + j) * length + 0.5 * crackDir.at(0 + k) * length; q [ 3 ].y = ( FPNum ) yc - 0.5 * crackDir.at(3 + j) * length + 0.5 * crackDir.at(3 + k) * length; q [ 3 ].z = ( FPNum ) zc - 0.5 * crackDir.at(6 + j) * length + 0.5 * crackDir.at(6 + k) * length; EASValsSetLayer(OOFEG_CRACK_PATTERN_LAYER); EASValsSetLineWidth(OOFEG_CRACK_PATTERN_WIDTH); if ( ( crackStatus == pscm_SOFTENING ) || ( crackStatus == pscm_OPEN ) ) { EASValsSetColor( gc.getActiveCrackColor() ); } else { EASValsSetColor( gc.getCrackPatternColor() ); } // EASValsSetFillStyle (FILL_HOLLOW); tr = CreateQuad3D(q); EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, tr); EMAddGraphicsToModel(ESIModel(), tr); } } } } } }
void Lattice2d :: drawSpecial(oofegGraphicContext &gc, TimeStep *tStep) { WCRec l [ 2 ]; GraphicObj *tr; GaussPoint *gp; FloatArray crackStatuses, cf; if ( !gc.testElementGraphicActivity(this) ) { return; } if ( gc.giveIntVarType() == IST_CrackState ) { gp = integrationRulesArray [ 0 ]->getIntegrationPoint(0); this->giveIPValue(crackStatuses, gp, IST_CrackStatuses, tStep); if ( crackStatuses(0) == 1. || crackStatuses(0) == 2. || crackStatuses(0) == 3 || crackStatuses(0) == 4 ) { double x1, y1, x2, y2; x1 = this->giveNode(1)->giveCoordinate(1); y1 = this->giveNode(1)->giveCoordinate(2); x2 = this->giveNode(2)->giveCoordinate(1); y2 = this->giveNode(2)->giveCoordinate(2); //Compute normal and shear direction FloatArray normalDirection; FloatArray shearDirection; normalDirection.resize(2); normalDirection.zero(); shearDirection.resize(2); shearDirection.zero(); normalDirection.at(1) = x2 - x1; normalDirection.at(2) = y2 - y1; normalDirection.normalize(); if ( normalDirection.at(2) == 0. ) { shearDirection.at(1) = 0.; shearDirection.at(2) = 1.; } else { shearDirection.at(1) = 1.0; shearDirection.at(2) = -normalDirection.at(1) / normalDirection.at(2); } shearDirection.normalize(); l [ 0 ].x = ( FPNum ) this->gpCoords.at(1) - shearDirection.at(1) * this->width / 2.; l [ 0 ].y = ( FPNum ) this->gpCoords.at(2) - shearDirection.at(2) * this->width / 2.; l [ 0 ].z = 0.; l [ 1 ].x = ( FPNum ) this->gpCoords.at(1) + shearDirection.at(1) * this->width / 2.; ; l [ 1 ].y = ( FPNum ) this->gpCoords.at(2) + shearDirection.at(2) * this->width / 2.; l [ 1 ].z = 0.; EASValsSetLayer(OOFEG_CRACK_PATTERN_LAYER); EASValsSetLineWidth(OOFEG_CRACK_PATTERN_WIDTH); if ( ( crackStatuses(0) == 1. ) ) { EASValsSetColor( gc.getActiveCrackColor() ); } else if ( crackStatuses(0) == 2. ) { EASValsSetColor( gc.getCrackPatternColor() ); } else if ( crackStatuses(0) == 3. ) { EASValsSetColor( gc.getActiveCrackColor() ); } else if ( crackStatuses(0) == 4. ) { EASValsSetColor( gc.getActiveCrackColor() ); } tr = CreateLine3D(l); EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, tr); EMAddGraphicsToModel(ESIModel(), tr); } } }
void LSpace :: drawSpecial(oofegGraphicContext &gc, TimeStep *tStep) { int i, j, k; WCRec q [ 4 ]; GraphicObj *tr; FloatArray crackStatuses, cf; if ( !gc.testElementGraphicActivity(this) ) { return; } if ( gc.giveIntVarType() == IST_CrackState ) { int crackStatus; FloatArray gpc; double length; FloatArray crackDir; for ( GaussPoint *gp: *this->giveDefaultIntegrationRulePtr() ) { if ( this->giveIPValue(cf, gp, IST_CrackedFlag, tStep) == 0 ) { return; } if ( ( int ) cf.at(1) == 0 ) { return; } // // obtain gp global coordinates this->computeGlobalCoordinates( gpc, * gp->giveNaturalCoordinates() ); length = 0.3333 * cbrt(this->computeVolumeAround(gp)); if ( this->giveIPValue(crackDir, gp, IST_CrackDirs, tStep) ) { this->giveIPValue(crackStatuses, gp, IST_CrackStatuses, tStep); for ( i = 1; i <= 3; i++ ) { crackStatus = ( int ) crackStatuses.at(i); if ( ( crackStatus != pscm_NONE ) && ( crackStatus != pscm_CLOSED ) ) { // draw a crack // this element is 3d element if ( i == 1 ) { j = 2; k = 3; } else if ( i == 2 ) { j = 3; k = 1; } else { j = 1; k = 2; } q [ 0 ].x = ( FPNum ) gpc.at(1) + 0.5 * crackDir.at(0 + j) * length + 0.5 * crackDir.at(0 + k) * length; q [ 0 ].y = ( FPNum ) gpc.at(2) + 0.5 * crackDir.at(3 + j) * length + 0.5 * crackDir.at(3 + k) * length; q [ 0 ].z = ( FPNum ) gpc.at(3) + 0.5 * crackDir.at(6 + j) * length + 0.5 * crackDir.at(6 + k) * length; q [ 1 ].x = ( FPNum ) gpc.at(1) + 0.5 * crackDir.at(0 + j) * length - 0.5 * crackDir.at(0 + k) * length; q [ 1 ].y = ( FPNum ) gpc.at(2) + 0.5 * crackDir.at(3 + j) * length - 0.5 * crackDir.at(3 + k) * length; q [ 1 ].z = ( FPNum ) gpc.at(3) + 0.5 * crackDir.at(6 + j) * length - 0.5 * crackDir.at(6 + k) * length; q [ 2 ].x = ( FPNum ) gpc.at(1) - 0.5 * crackDir.at(0 + j) * length - 0.5 * crackDir.at(0 + k) * length; q [ 2 ].y = ( FPNum ) gpc.at(2) - 0.5 * crackDir.at(3 + j) * length - 0.5 * crackDir.at(3 + k) * length; q [ 2 ].z = ( FPNum ) gpc.at(3) - 0.5 * crackDir.at(6 + j) * length - 0.5 * crackDir.at(6 + k) * length; q [ 3 ].x = ( FPNum ) gpc.at(1) - 0.5 * crackDir.at(0 + j) * length + 0.5 * crackDir.at(0 + k) * length; q [ 3 ].y = ( FPNum ) gpc.at(2) - 0.5 * crackDir.at(3 + j) * length + 0.5 * crackDir.at(3 + k) * length; q [ 3 ].z = ( FPNum ) gpc.at(3) - 0.5 * crackDir.at(6 + j) * length + 0.5 * crackDir.at(6 + k) * length; EASValsSetLayer(OOFEG_CRACK_PATTERN_LAYER); EASValsSetLineWidth(OOFEG_CRACK_PATTERN_WIDTH); if ( ( crackStatus == pscm_SOFTENING ) || ( crackStatus == pscm_OPEN ) ) { EASValsSetColor( gc.getActiveCrackColor() ); } else { EASValsSetColor( gc.getCrackPatternColor() ); } // EASValsSetFillStyle (FILL_HOLLOW); tr = CreateQuad3D(q); EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, tr); EMAddGraphicsToModel(ESIModel(), tr); } } } } // end loop over gp } }