几何尺寸与公差论坛

 找回密码
 注册
查看: 111|回复: 2

PR 261818 Load program attached to #239837 and PC-DMIS crashes (only in V44B)

[复制链接]
发表于 2009-5-14 19:29:40 | 显示全部楼层 |阅读模式
Load program attached to #239837 and PC-DMIS crashes (only in V44B)
<< Don Turcotte  --  05/13/09  09:42:58>>
Load program attached to #239837 and PC-DMIS crashes.  This is problem in CPCDFeatCtrlFrm::SetFeatureNominalsFromAxes(...) with FCF perpendicularity that has datum at MMC.
This is a problem only in V44B.
<<END>>

<< Changes made by Don Turcotte (Field Changes) -- 05/13/09  15:57:04>>
Action:  Don Turcotte to Yanhua Huang, Status:  OPEN to REVIEW
<<END>>
<< Changes made by Don Turcotte (Resolution Data) -- 05/13/09  15:56:57>>
** Bug Fix - New In Current Version -  -  -  **
<<END>>
<< Don Turcotte (Development Notes)  --  05/13/09  15:56:41>>
Fixed in V44B
Files inserted to server
------------------------
V44B\FCF\FCFREPORT.CPP
V44B\INCLUDE\FEATCTRLFRM.H
<<END>>
<< Don Turcotte (Development Notes)  --  05/13/09  15:55:59>>
This was a problem in V44B CPCDFeatCtrlFrm::SetFeatureNominalsFromAxes() and CPCDFeatCtrlFrm::RestoreFeatureNominalsFromAxes() for all dimensions except true position where a datum was used at material condition.
<<END>>
<< Changes made by Tim Wernicke (Field Changes) -- 05/13/09  12:00:16>>
Priority:  to Stop Rel.
<<END>>
 楼主| 发表于 2009-5-14 20:36:43 | 显示全部楼层

回复: PR 261818 Load program attached to #239837 and PC-DMIS crashes (only in

case DIMENSION_COAXIALITY: // PR261818 - need to set up nominals on any datums at material condition
      case DIMENSION_CONCENTRICITY:
      case DIMENSION_PROFILE_SURFACE:
      case DIMENSION_PROFILE_LINE:
      case DIMENSION_TOTAL_RUNOUT:
      case DIMENSION_CIRCULAR_RUNOUT:



// PR261818 - set the nominal diameter/length on the datum feature
void CPCDFeatCtrlFrm::SetDatumNominal(CPCDcommand * pStartCmd,int which,AXIS_INFO & axis_data,E_DIAM_ENUM size)
{
  CPCDcommand * datum = NULL;
  CPCDcommand * datum_constrained = NULL;

  GetDatum(pStartCmd,which,datum,datum_constrained);

  if( datum && datum->type() != CONST_SET )
  {
    double saveDatumNominal = 0.0;
    BOOL bStatus = (E_DIAMETER == size) ?
      SetDatumDiameter(datum,axis_data.Nominal(),&saveDatumNominal) : SetDatumLength(datum,axis_data.Nominal(),&saveDatumNominal);
    axis_data.SaveFeatureNominal(saveDatumNominal);
  }

  if( datum_constrained && datum_constrained->type() != CONST_SET )
  {
    BOOL bStatus = (E_DIAMETER == size) ?
      SetDatumDiameter(datum_constrained,axis_data.Nominal()) : SetDatumLength(datum_constrained,axis_data.Nominal());
  }
}

// PR261818
void CPCDFeatCtrlFrm::GetDatum(CPCDcommand * pStartCmd,int which,CPCDcommand * &datum,CPCDcommand * &datum_constrained)
{
  if( pStartCmd )
  {
    switch( pStartCmd->type() )
    {
      case DIMENSION_TRUE_START_POSITION:
        {
          switch(which)
          {
          case PRIMARY:
            datum = ((CPCDtp_start_location*)pStartCmd)->m_datum1;
            datum_constrained = ((CPCDtp_start_location*)pStartCmd)->m_datum1_constrained;
            break;
          case SECONDARY:
            datum = ((CPCDtp_start_location*)pStartCmd)->m_datum2;
            datum_constrained = ((CPCDtp_start_location*)pStartCmd)->m_datum2_constrained;
            break;
          case TERTIARY:
            datum = ((CPCDtp_start_location*)pStartCmd)->m_datum3;
            datum_constrained = ((CPCDtp_start_location*)pStartCmd)->m_datum3_constrained;
            break;
          }
        }
      break;
      case DIMENSION_PERPENDICULARITY:
        {
          switch(which)
          {
          case PRIMARY:
            datum = ((CPCDdim_perpendicularity*)pStartCmd)->m_pPrimary;
            break;
          case SECONDARY:
            datum = ((CPCDdim_perpendicularity*)pStartCmd)->m_pSecondary;
            break;
          case TERTIARY:
            datum = ((CPCDdim_perpendicularity*)pStartCmd)->m_pTertiary;
            break;
          }
        }
        break;
      case DIMENSION_PARALLELISM:
        {
          switch(which)
          {
          case PRIMARY:
            datum = ((CPCDdim_parallel*)pStartCmd)->m_pPrimary;
            break;
          case SECONDARY:
            datum = ((CPCDdim_parallel*)pStartCmd)->m_pSecondary;
            break;
          case TERTIARY:
            datum = ((CPCDdim_parallel*)pStartCmd)->m_pTertiary;
            break;
          }
        }
        break;
      case DIMENSION_ANGULARITY:
        {
          switch(which)
          {
          case PRIMARY:
            datum = ((CPCDdim_angularity*)pStartCmd)->m_pPrimary;
            break;
          case SECONDARY:
            datum = ((CPCDdim_angularity*)pStartCmd)->m_pSecondary;
            break;
          case TERTIARY:
            datum = ((CPCDdim_angularity*)pStartCmd)->m_pTertiary;
            break;
          }
        }
        break;
      case DIMENSION_COAXIALITY:
        {
          switch(which)
          {
          case PRIMARY:
            datum = ((CPCDdim_coaxiality*)pStartCmd)->m_pPrimary;
            break;
          case SECONDARY:
            datum = ((CPCDdim_coaxiality*)pStartCmd)->m_pSecondary;
            break;
          case TERTIARY:
            datum = ((CPCDdim_coaxiality*)pStartCmd)->m_pTertiary;
            break;
          }
        }
        break;
      case DIMENSION_CONCENTRICITY:
        {
          switch(which)
          {
          case PRIMARY:
            datum = ((CPCDdim_concentricity*)pStartCmd)->m_pPrimary;
            break;
          case SECONDARY:
            datum = ((CPCDdim_concentricity*)pStartCmd)->m_pSecondary;
            break;
          case TERTIARY:
            datum = ((CPCDdim_concentricity*)pStartCmd)->m_pTertiary;
            break;
          }
        }
        break;
      case DIMENSION_PROFILE_SURFACE:
      case DIMENSION_PROFILE_LINE:
        {
          switch(which)
          {
          case PRIMARY:
            datum = ((CPCDdim_profile*)pStartCmd)->m_pPrimary;
            break;
          case SECONDARY:
            datum = ((CPCDdim_profile*)pStartCmd)->m_pSecondary;
            break;
          case TERTIARY:
            datum = ((CPCDdim_profile*)pStartCmd)->m_pTertiary;
            break;
          }
        }
        break;
      case DIMENSION_TOTAL_RUNOUT:
      case DIMENSION_CIRCULAR_RUNOUT:
        {
          switch(which)
          {
          case PRIMARY:
            datum = ((CPCDdim_runout*)pStartCmd)->m_pPrimary;
            break;
          case SECONDARY:
            datum = ((CPCDdim_runout*)pStartCmd)->m_pSecondary;
            break;
          case TERTIARY:
            datum = ((CPCDdim_runout*)pStartCmd)->m_pTertiary;
            break;
          }
        }
        break;
    }
  }
}
 楼主| 发表于 2009-5-14 20:38:55 | 显示全部楼层

回复: PR 261818 Load program attached to #239837 and PC-DMIS crashes (only in

[8:58:17 PM] Donald Turcotte says: For ISO1101, Symmetry, coaxiality, and concentricity can have datums at material condition.  The code in PC-DMIS for the math of these dimensions does not currently support this.  This would have to be an enhancement for the next version.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|几何尺寸与公差论坛

GMT+8, 2024-12-22 23:30 , Processed in 0.039063 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表