Esempio n. 1
0
BOOL CCalStructPag::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	try
	{
		
		_RecordsetPtr rs;
		CString strSQL;
		strSQL.Format(_T("SELECT [SAStructComponent].[Number],[SAStructFormula].[Formula],[SAStructFormula].[Where],[SAStructFormula].[Caption] FROM [SAStructComponent],[SAStructFormula] WHERE [SAStructComponent].[ComponentID] = %d AND [SAStructComponent].[ComponentID]=[SAStructFormula].[ComponentID] AND [SAStructFormula].[Result]=\'%s\' "),
			m_lComponentID,m_strResult);
		rs=m_connSort->Execute(_bstr_t(strSQL),NULL,adCmdText);
		if(!rs->adoEOF)
		{
			CString strTemp;
			strTemp.Format(IDS_COMPONENT_de,vtoi(rs->GetCollect(0L)),m_strResult);
			this->SetWindowText(strTemp);
			this->m_strFormula=vtos(rs->GetCollect(1L));
			this->m_strWhere=vtos(rs->GetCollect(2L));
			this->m_strCaption=vtos(rs->GetCollect(3L));
			m_iComNo=vtoi(rs->GetCollect(0L));
			UpdateData(FALSE);
		}
		rs->Close();
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.Description());
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
Esempio n. 2
0
//得到弹簧的工作荷载和安装荷载
//没有经过单位转换的荷载值
BOOL CAESARIIToPHS::GetHangerLoad( int iNode,const CString& strFileName, double& dWorkLoad,double& dInsLoad ) //得到弹簧的工作荷载和安装荷载
{
	_RecordsetPtr pHangerRs;
	pHangerRs.CreateInstance( __uuidof(Recordset) );
	
	try
	{
		CString strSQL;
		strSQL.Format(_T("SELECT * FROM OUTPUT_HANGERS WHERE [NODE] = %d AND [JOBNAME] = '%s'"),iNode,strFileName);
		pHangerRs->Open(_variant_t(strSQL),(IDispatch *)m_pConnSourceDB,adOpenDynamic,adLockOptimistic,adCmdText);
		if(pHangerRs->adoEOF && pHangerRs->BOF)
		{
			pHangerRs->Close();
			return FALSE;
		}
		else
		{
			dWorkLoad = vtoi ( pHangerRs->GetCollect( _T("NUMREQ") ) ) * vtof( pHangerRs->GetCollect( _T("HOT_LOAD") ) ); //工作荷载
			dInsLoad = vtoi ( pHangerRs->GetCollect( _T("NUMREQ") ) ) * vtof( pHangerRs->GetCollect( _T("TH_INSTALL_LOAD") ) ); //安装荷载
		}
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}
	if(pHangerRs->State==adStateOpen)
	{
		pHangerRs->Close();
	}
	return TRUE;
}
//------------------------------------------------------------------
// DATE         : [2006/02/17]
// Author       : ZSY 
// Parameter(s) : nID[in] 显示当前记录的序号
// Return       : 读取成功返回1,否则返回0
// Remark       : 读取埋地管道的保温数据到输入窗口中
//------------------------------------------------------------------
short CDlgParameterSubterranean::GetDataToSubterraneanControl(long nID)
{
	CString strSQL;
	int nSelect;
	try
	{
		if ( m_pRsSubterranean == NULL || ( m_pRsSubterranean->GetState() != adStateOpen ) )
		{
			return 1;
		}
		if ( !m_pRsSubterranean->adoEOF || !m_pRsSubterranean->BOF )
		{
			m_pRsSubterranean->MoveFirst();
			strSQL.Format("ID=%d", nID );
			m_pRsSubterranean->Find( _bstr_t( strSQL ), NULL, adSearchForward );
		}
		if ( m_pRsSubterranean->adoEOF || m_pRsSubterranean->BOF )// 没有找到当前工程指定序号的记录则新增一条
		{
			m_pRsSubterranean->AddNew();//
			m_pRsSubterranean->PutCollect( _variant_t("ID"), _variant_t(nID) );
			m_pRsSubterranean->PutCollect( _variant_t("EnginID"), _variant_t(m_strProjectID));
			m_pRsSubterranean->Update();

			m_ctlPipeCount.SetCurSel(0);
		}
		else
		{
			nSelect = vtoi( m_pRsSubterranean->GetCollect( _variant_t("c_Pipe_Count") ) );
			nSelect = (nSelect > 0) ? nSelect -1 : 0;
			m_ctlPipeCount.SetCurSel(nSelect);
		}
		m_nID = nID;	//保存当前记录的序号		
		m_nPipeLay		= vtoi( m_pRsSubterranean->GetCollect( _variant_t("c_lay_mark") ) );	// 管道敷设状态
		m_dPipeSubDepth	= vtof( m_pRsSubterranean->GetCollect( _variant_t("c_Pipe_Sub_Depth")));// 管道的埋设深度(地表面到管道中心的距离)
		m_dEdaphicTemp	= vtof( m_pRsSubterranean->GetCollect( _variant_t("c_Edaphic_Temp") ));	// 土壤的温度℃
		m_dPipeSpan		= vtof( m_pRsSubterranean->GetCollect( _variant_t("c_Pipe_Span") ) );	// 两根管道之间的当量间距
		m_dEdaphicLamda = vtof( m_pRsSubterranean->GetCollect( _variant_t("c_Edaphic_Lamda")));	// 土壤的导热系数
		m_dSupportK     = vtof( m_pRsSubterranean->GetCollect( _variant_t("c_Support_K") ) );	// 支吊架的热损失校正系数
		m_dPipeDag		= vtof( m_pRsSubterranean->GetCollect( _variant_t("c_Pipe_Dag") ) );	// 管沟当量直径
		m_dCanalDepth   = vtof( m_pRsSubterranean->GetCollect( _variant_t("c_Canal_Depth") ) ); // 管沟深度

	}
	catch (_com_error& e)
	{
		AfxMessageBox( e.Description() );
		return 0;
	}
	UpdateData( FALSE );
	// 更新控件的状态
	UpdateControlState();

	
	return 1;
}
Esempio n. 4
0
//吊架和支架数据的导入pfg20050615
//flag=0 为吊架; flag=1 为支架
//记录集是结果集 对应ZA表
//rsHR记录集是数据源集(弹簧、吊架)
//ltemp 支吊架号
void CAESARIIToPHS::ImportHangerRestraints(_RecordsetPtr rsData,_RecordsetPtr rsHR,long &ltemp,long &FileNameID,char *strPSAVER,long &node,int flag)
{
	_variant_t tmpvar; 
	long lTmp;
	try
	{
		if(flag)
		{
			tmpvar=rsHR->GetCollect(_T("node_num"));
			lTmp=vtoi(rsHR->GetCollect(_T("RES_TYPEID")));//pfg20050624
		}
		else
		{
			tmpvar=rsHR->GetCollect(_T("node"));
		}
		if(tmpvar.vt==VT_EMPTY||tmpvar.vt==VT_NULL)
		{
			return;
		}
		else
		{
			node=vtoi(tmpvar);
		}
		if ( node < 1e-6 ) //5.2版本中所有的约束信息会导入INPUT_RESTRAINTS表中(同一约束点会有四条记录,所以会有NODE_NUM为-1情况)
			return;
		if(rsData->GetRecordCount()>0)
		{
			rsData->MoveFirst();
		}
		
		rsData->Filter = _variant_t(CString("[jsdbh1] = ") + ltos(node)+" AND [FileNameID]="+ltos(FileNameID));
		
		if (rsData->adoEOF&&rsData->BOF)
		{
			rsData->AddNew();
			rsData->PutCollect("VolumeID",_variant_t(EDIBgbl::SelVlmID));
			rsData->PutCollect("zdjh",_variant_t((long)(ltemp+1)));
			rsData->PutCollect("FileNameID",_variant_t(FileNameID));
			ltemp++;
			rsData->Update();					
		}
		rsData->PutCollect("PSAver", _variant_t(strPSAVER));
		rsData->PutCollect("UPxyz",_variant_t((long)m_iUPxyz));
		rsData->PutCollect("JSDBH1", _variant_t((long)node));
		rsData->Update();
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}
}
Esempio n. 5
0
void CDlgFavoriteTemplate::InitFavoriteList()
{
	m_lstFavorite.ResetContent();
	CString strTemplateName;
	int iWillSelIndex=0;
	long iSampleID=1;
	_variant_t varTmp;

	if(m_rsFavorite->BOF || m_rsFavorite->adoEOF )
	{
		return;
	}

	for(int iIndex=0; !m_rsFavorite->adoEOF ; m_rsFavorite->MoveNext())
	{
		m_rsFavorite->get_Collect((_variant_t)"SampleID", &varTmp);
		iSampleID = vtoi(varTmp);
		m_rsFavorite->get_Collect((_variant_t)"SampleName", &varTmp);
		if( vtos(varTmp) != "" )
		{
			iIndex = m_lstFavorite.AddString(vtos(varTmp));
			m_lstFavorite.SetItemData(iIndex,(DWORD)iSampleID);
		}
		if(m_lSampleID == iSampleID)
		{
			iWillSelIndex = iIndex;
		}
	}
	m_iCurSel = iWillSelIndex;
	m_lstFavorite.SetCurSel(iWillSelIndex);
}
Esempio n. 6
0
//------------------------------------------------------------------
// DATE         :[2006/01/17]
// Parameter(s) :
// Return       :
// Remark       :从数据库中取出不同的行业名称
//------------------------------------------------------------------
int CDlgSelCritDB::GetCallingFromDB(struct KeyToCalling sutKeyCalling[])
{
	// 不同的行业名称用数据库统一进行管理 [2006/01/17]
	_RecordsetPtr pRsCalling;	// 行业管理表
	pRsCalling.CreateInstance( __uuidof( Recordset ) );
	CString strSQL;	// SQL语句
	int nCount = 0;	// 不同行业的个数
	try
	{
		strSQL = "SELECT * FROM [CallingManage]";
		pRsCalling->Open( _variant_t(strSQL), theApp.m_pConRefInfo.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText );
		if ( pRsCalling->adoEOF && pRsCalling->BOF )
		{
			return -1;
		}
		for (pRsCalling->MoveFirst(); !pRsCalling->adoEOF; pRsCalling->MoveNext())
		{
			sutKeyCalling[nCount].strKey = vtoi( pRsCalling->GetCollect( _variant_t("CallingKey") ) );
			sutKeyCalling[nCount].strCallingName = vtos( pRsCalling->GetCollect( _variant_t("CallingName") ) );
			sutKeyCalling[nCount].strCodeName = vtos( pRsCalling->GetCollect( _variant_t("CODE") ) );

			nCount++;
		}
	}
	catch (_com_error& e)
	{
		AfxMessageBox( e.Description() );
		return -1;
	}
	return nCount;
}
Esempio n. 7
0
//在当前工程中查找给定的卷册,如果不存在则增加.
void newproject::AddCurrentVolume()
{
    _RecordsetPtr  pRs;
    CString strSQL;
    try
    {
        if ( EDIBgbl::SelPrjID.IsEmpty() || EDIBgbl::SelVlmCODE.IsEmpty() )
        {   //如果工程代号或者卷册代号为空时,将不考虑.
            return;
        }
        pRs.CreateInstance(__uuidof(Recordset));
        pRs->CursorLocation = adUseClient;

        strSQL = "SELECT * FROM [Volume] WHERE EnginID = '"+EDIBgbl::SelPrjID+"' AND JCDM = '"+EDIBgbl::SelVlmCODE+"' ";
        pRs->Open(_bstr_t(strSQL), theApp.m_pConAllPrj.GetInterfacePtr(),
                  adOpenStatic, adLockOptimistic, adCmdText);

        if( pRs->adoEOF && pRs->BOF )
        {
            //没有记录,增加卷册.
            pRs->Close();
            strSQL = "Select * FROM [Volume] ORDER BY VolumeID ";
            pRs->Open(_bstr_t(strSQL),theApp.m_pConAllPrj.GetInterfacePtr(),
                      adOpenDynamic, adLockOptimistic, adCmdText);
            pRs->MoveLast();
            _variant_t var = pRs->GetCollect("VolumeID");
            long VlmID = vtoi(var);
            VlmID++;
            pRs->AddNew();
            pRs->PutCollect(_variant_t("VolumeID"),_variant_t(VlmID));
            pRs->PutCollect(_variant_t("EnginID"),_variant_t(EDIBgbl::SelPrjID) );
            pRs->PutCollect(_variant_t("JCDM"),_variant_t(EDIBgbl::SelVlmCODE));
            pRs->PutCollect(_variant_t("JCMC"),_variant_t("") ); //无
            pRs->PutCollect(_variant_t("SJHYID"),_variant_t(EDIBgbl::SelHyID));
            pRs->PutCollect(_variant_t("SJJDID"),_variant_t(EDIBgbl::SelDsgnID) );
            pRs->PutCollect(_variant_t("ZYID"),_variant_t(EDIBgbl::SelSpecID) );
            pRs->Update();

        }
    }
    catch(_com_error& e)
    {
        ReportExceptionErrorLV2(e);
    }

}
Esempio n. 8
0
BOOL CCalculate::AutoCalPhs(const VARIANT FAR& varRs, short zdjh, short nth) 
{
	// TODO: Add your dispatch handler code here
	CFrmStatus FrmProgress;
	if(!IsWindow(FrmProgress.m_hWnd))
    	FrmProgress.Create(IDD_STATUS,NULL);
	FrmProgress.CenterWindow();  
	FrmProgress.ShowWindow(SW_SHOW);

	modPHScal::zdjh=zdjh;
	modPHScal::iSelSampleID=vtoi(FrmTxsr.m_pViewTxsr->m_ActiveRs->GetCollect(_T("iSelSampleID")));

	CString sTmp;
	sTmp.Format(_T("%d"),zdjh);
	frmStatus.m_Label1.Format(GetResStr(IDS_CalculatingNoXphs),sTmp);// _T("正在计算") & zdjh & _T("号支吊架")
	frmStatus.SetWindowText(GetResStr(IDS_PhsCalculation)); //' _T("计算支吊架")
	frmStatus.UpdateData(false);
	frmStatus.UpdateStatus(0.02f,true);
	frmStatus.UpdateWindow();

	_RecordsetPtr rs;
	rs.CreateInstance(__uuidof(Recordset));

	if(varRs.vt == VT_DISPATCH && varRs.pdispVal != NULL)
	{
		rs = _RecordsetPtr (varRs.pdispVal );
	}
	else
	{
		AfxMessageBox("数据库错误,退出计算!");
		return FALSE;
	}

	modPHScal::VB_Cal (rs,zdjh,FrmProgress,nth);

	FrmProgress.UpdateWindow();
	FrmProgress.ShowWindow(SW_HIDE);
	FrmProgress.DestroyWindow();

	return TRUE;
}
Esempio n. 9
0
//------------------------------------------------------------------
// DATE         :[2005/07/14]
// Author       :ZSY
// Parameter(s) :
// Return       :
// Remark       :增加阀门
//------------------------------------------------------------------
BOOL CImportAutoPD::AddValve()
{
	_RecordsetPtr pRs_ValveType;
	CString	strSQL;						//SQL语句
	int		nValveIndex;				//阀门类型的索引
	CString	strValveName;				//阀门名称
	pRs_ValveType.CreateInstance(__uuidof(Recordset));
 	pRs_ValveType->PutCursorLocation(adUseClient);

	try
	{
		strSQL = "SELECT * FROM [ValveType] ";		//打开阀门类型表
		pRs_ValveType->Open(_variant_t(strSQL), theApp.m_pConnectionCODE.GetInterfacePtr(),
			adOpenStatic, adLockOptimistic, adCmdText);
		if (pRs_ValveType->GetRecordCount() <= 0)
		{
			return FALSE;
		}
		for (; !pRs_ValveType->adoEOF; pRs_ValveType->MoveNext())
		{

			nValveIndex  = vtoi(pRs_ValveType->GetCollect(_variant_t("ValveTypeID")));
			strValveName = vtos(pRs_ValveType->GetCollect(_variant_t("TypeName")));
			if (strValveName.IsEmpty())
			{
				continue;
			}
			if (FileExists(strValveName))
			{
				CFile::Remove(strValveName);
			}		
		}
	}
	catch (_com_error)
	{
		return FALSE;
	}

	return TRUE;
}
Esempio n. 10
0
//------------------------------------------------------------------
// DATE         : [2006/03/01]
// Author       : ZSY
// Parameter(s) : void
// Return       : void
// Remark       : 加载管道敷设状态
//------------------------------------------------------------------
void CDlgParameterSubterranean::InitPipeLayList()
{
	m_comboPipeLay.ResetContent();
	CString strSQL;		// SQL语句
	CString strCount;
	int nIndex;		
	_RecordsetPtr pRsLay;
	pRsLay.CreateInstance( __uuidof( Recordset ) );

	try
	{
		m_comboPipeLay.ResetContent();

		strSQL.Format("SELECT * FROM [埋地管道敷设状态] ORDER BY Index");
		pRsLay->Open( _variant_t(strSQL), theApp.m_pConnectionCODE.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText );
		
		if ( pRsLay->GetadoEOF() && pRsLay->GetBOF() )
			return;		
		for (pRsLay->MoveFirst(); !pRsLay->adoEOF; pRsLay->MoveNext())
		{
			nIndex = m_comboPipeLay.AddString( vtos( pRsLay->GetCollect(_variant_t("PipeLay")) ) );
			m_comboPipeLay.SetItemData(nIndex, vtoi( pRsLay->GetCollect(_variant_t("Index")) ) );
		}

		// 同时敷设根数
		m_ctlPipeCount.ResetContent();
		for (int i = 1; i <= nSubMaxPipeCount; i++)
		{
			strCount.Format("%d", i); 
			m_ctlPipeCount.AddString(strCount);
		}
	}
	catch (_com_error& e)
	{
		AfxMessageBox( e.Description() );
		return ;
	}
}
Esempio n. 11
0
BOOL CPreStylePag::GetTextStyleProperty(
                       CString  strTSName,
                       CString &strShxFile,
                       CString &strBigFile,
                       double  &dHeight,
                       double  &dWidthFactor,
                       double  &dAngleByDegree,
                       short   &iGenerationFlag)
{
    CMObject obj, tsobj;
    long     i, nCount;
    CString  strtmp;

    //进行参数检查和初始化
    strTSName.TrimLeft();
    strTSName.TrimRight();
    strTSName.MakeUpper();
    if(strTSName.GetLength() <= 0) return FALSE;

    try
    {
        if(FindAcad() == FALSE)
        {
            return FALSE;
        }
        
        //SETUP-1: 获取ACAD文本样式列表
        obj = EDIBAcad::objAcadDoc.GetPropertyByName(
                                      _T("TextStyles"));
        
        //SETUP-2: 获取样式对象

		nCount = (long)obj.GetPropertyByName(_T("Count"));
		for( i = 0; i < nCount; i++)
		{
			tsobj = obj.Invoke(_T("Item"), 1, &_variant_t(i));
			strtmp = vtos(tsobj.GetPropertyByName(_T("Name")));
			strtmp.TrimLeft();
            strtmp.TrimRight();
			strtmp.MakeUpper();
			if(strtmp == strTSName)
			{
                //获得目标样式的属性值
                strShxFile      = vtos(tsobj.GetPropertyByName(
                                 _T("FontFile")));   //获得字体文件名
                strBigFile      = vtos(tsobj.GetPropertyByName(
                                 _T("BigFontFile")));//获得大字体文件名
                
                dHeight         = vtod(tsobj.GetPropertyByName(
                                 _T("Height")));     //获得字体高度

                dWidthFactor    = vtod(tsobj.GetPropertyByName(
                                 _T("Width")));      //获得宽度比例因子***

                dAngleByDegree  = vtod(tsobj.GetPropertyByName(
                                 _T("ObliqueAngle")));        //获得字体倾斜角度
                dAngleByDegree  *= 180.0;
                dAngleByDegree  /= 3.14159265359;
                if(dAngleByDegree > 270.0) dAngleByDegree -= 360;
                
                iGenerationFlag = vtoi(tsobj.GetPropertyByName(
                                 _T("TextGenerationFlag")));  //获得字体生成字段
                iGenerationFlag &= 0x06;

                return TRUE;
			}
		}
    }
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
    }
    return FALSE;
}
Esempio n. 12
0
//得到最小螺栓孔直径
int HDCrude::GetFjmin() 
{
	return vtoi(m_pRs.GetFieldValue(m_strFjminField));
}
Esempio n. 13
0
main(int argc, char **argv)
{
    	int nt,nxi,nxo,ntfft,it,ix,nf,i,extrap;
	int nxipre;
    	float dt,fmin,fmax;
    	float *xi, *xo, *xipre;
    	float *yi, *yo;
    	char *hdrs;
    	float tol;
    	int niter, np;
    	string datain, dataout;
	complex *ccexp, *ccexpo;
	int iccexp=1, iccexpo=1;
	int nxip, ifmin, lftwk, npp, nph;
	float tmp, tmp2;
	float df; 

    	FILE *infp,*outfp;

	segytrace tr;

	String pkey="tracl", ptype, skey="tracr", stype;
     	Value pval, sval;
       	int indxp, indxs;

	int ofill=0, dfill=1, nfill=1;
	int iof=1, inf=1;
	int nsmax, ns; 
	int is, ip, ipre;


	float *sort;
	int *sortindex;
	char *hdrsort;



    	/* get parameters */
    	initargs(argc,argv);
    	askdoc(1);

	getparstring("pkey",&pkey);
	getparstring("skey",&skey);
	if(!getparint("ofill",&ofill)) iof = 0 ;
        if(!getparint("dfill",&dfill)) dfill = 1;
       	if(!getparint("nfill",&nfill))inf = 0;
     	if (!getparint("nsmax",&nsmax)) nsmax = 2000;

	/* open input/output */
    	if (!getparstring("datain",&datain)) {
		infp = stdin;
	} else {
		infp = fopen(datain,"r");
	}
    	if (!getparstring("dataout",&dataout)) {
		outfp = stdout;
	} else {
		outfp = fopen(dataout,"w");
	}
	/* make file size to be able to exceed 2 G on convex */
	file2g(infp);
	file2g(outfp);

	/* read in first trace for nt and dt */
        if (!fgettr(infp,&tr))  err("can't get first trace");
	nt = tr.ns; 
	dt = (float)tr.dt/1000000.;

	/* optional parameters */
    	if (!getparint("ntfft",&ntfft)) ntfft=(nt*3/2)/2*2;
    	if (ntfft < nt) ntfft = nt;
	nf = ntfft;
	radix_(&nf,&ntfft);
    	if (!getparfloat("fmin",&fmin)) fmin = 0.;
    	if (!getparfloat("fmax",&fmax)) fmax = .5 / dt * 2. / 3.;
    	if (!getparint("niter",&niter)) niter = 10; 
    	if (!getparfloat("tol",&tol)) tol = 0.000001;
    	if (!getparint("extrap",&extrap)) extrap = 1; 


        ptype  = hdtype(pkey);
	indxp = getindex(pkey);
	stype  = hdtype(skey);
	indxs = getindex(skey);
	gethval(&tr, indxp, &pval);
	ipre = vtoi(ptype,pval);
	gethval(&tr, indxs, &sval);
	is = vtoi(stype,sval);

	nxo = nfill;
	if(inf==0) nxo = nsmax;

    	xi = (float*)malloc(nsmax*sizeof(float));
    	xipre = (float*)malloc(nsmax*sizeof(float));
    	yi = (float*)malloc(nt*nsmax*sizeof(float));
    	xo = (float*)malloc(nxo*sizeof(float));
    	yo = (float*)malloc(nt*nxo*sizeof(float));
	hdrs = (char*) malloc(nsmax*HDRBYTES*sizeof(char));

	sort = (float*)malloc(nsmax*nt*sizeof(float));
	hdrsort = (char*)malloc(nsmax*HDRBYTES);
	sortindex = (int*)malloc(nsmax*sizeof(int));

	iccexp = 1;
	nxip = nsmax + 10;
    	initpf_(&ntfft,&dt,&fmin,&fmax,&nxip,&ifmin,&df,
		&nf,&lftwk,&npp,&nph);
	tmp = (nph*2+1)*nf*nxip;
	tmp = tmp*sizeof(complex);

	if( tmp > 1600000000. ) {
		fprintf(stderr," --- forward t-p coefficients --- " );
		fprintf(stderr," need memory %f MB \n",tmp/1000000.);
		fprintf(stderr," memory limit exceeded \n");
		fprintf(stderr," no pre-computation of coefficients \n");
		iccexp = -1; 
		ccexp = (complex*) malloc(sizeof(complex));
		tmp = 0.;
	} else {
		ccexp = (complex*) malloc((nph*2+1)*nf*nxip*sizeof(complex));
	}

	iccexpo = 1;
	tmp2 = (nph*2+1)*nf*nxo;
	tmp2 = tmp2*sizeof(complex);
	tmp = tmp + tmp2;
	if( tmp > 1600000000. ) {
		fprintf(stderr," --- inverse t-p coefficients --- " );
		fprintf(stderr," need memory %f MB \n",tmp/1000000.);
		fprintf(stderr," memory limit exceeded \n");
		fprintf(stderr," no pre-computation of coefficients \n");
		iccexpo = -1; 
		ccexpo = (complex*) malloc(sizeof(complex));
	} else {
		ccexpo = (complex*) malloc((nph*2+1)*nf*nxo*sizeof(complex));
	}

   	for(ix=0;ix<nxo;ix++) xo[ix] = ofill + ix*dfill;

	/* loop over input traces */
	ns = 0;
	nxipre = 0;

	do {

	
                gethval(&tr, indxp, &pval);
		ip = vtoi(ptype,pval);
		gethval(&tr, indxs, &sval);
		is = vtoi(stype,sval);

		if(ns>nsmax) 
			err("maximum number traces %d exceed %d \n",ns,nsmax);

		if(ip==ipre) {

			for(it=0;it<nt;it++) yi[it+ns*nt] = tr.data[it];
			xi[ns] = is;
			bcopy((char*)&tr,hdrs+ns*HDRBYTES,HDRBYTES);
			ns = ns + 1;

		} else if(ip!=ipre && ns>0) {

			nxi = ns;
			/* sort xi into ascending order */
			for(i=0;i<nxi;i++) sortindex[i] = i;
			qkisort(nxi,xi,sortindex);
			bcopy(yi,sort,nxi*nt*sizeof(float));

			for(i=0;i<nxi;i++) {
               			bcopy(sort+sortindex[i]*nt,yi+i*nt,
					nt*sizeof(float));
			}

			bcopy(xi,sort,nxi*sizeof(float));
			for(i=0;i<nxi;i++) {
               			xi[i] = sort[sortindex[i]];
			}

			bcopy(hdrs,hdrsort,nxi*HDRBYTES);
			for(i=0;i<nxi;i++) {
			    bcopy(hdrsort+sortindex[i]*HDRBYTES,
				hdrs+i*HDRBYTES,HDRBYTES);
			}

			np = nxi;

			if(inf==0) nxo = nxi;
			if(iof==0) {
				for(ix=0;ix<nxo;ix++) xo[ix] = xi[ix];
			}

			/* tau-p interpolation */
			intps(xi,yi,xo,yo,nxi,nxo,
				nt,dt,np,fmin,fmax,ntfft, 
				niter,tol,xipre,nxipre,ccexp,iccexp,
				ccexpo,iccexpo);
			for(ix=0;ix<nxi;ix++) {
				xipre[ix] = xi[ix];
			}
			nxipre = nxi;


			/* output gather */
			intout(xi,xo,yo,hdrs,nxi,nxo,nt,
				outfp,extrap,stype,indxs);

			fprintf(stderr,
" interpolation done from input %d live traces to output %d traces at %s=%d \n",nxi, nxo, pkey, ipre);

			ns = 0;
			for(it=0;it<nt;it++) yi[it+ns*nt] = tr.data[it];
			xi[ns] = is;
			bcopy((char*)&tr,hdrs+ns*HDRBYTES,HDRBYTES);

			ipre = ip;
			ns = ns + 1;
		}
			
	} while(fgettr(infp,&tr)); 
			

	if (ns>0) {

		nxi = ns;

		for(i=0;i<nxi;i++) sortindex[i] = i;
		qkisort(nxi,xi,sortindex);
		bcopy(yi,sort,nxi*nt*sizeof(float));

		for(i=0;i<nxi;i++) {
       			bcopy(sort+sortindex[i]*nt,yi+i*nt,
			nt*sizeof(float));
		}
		bcopy(xi,sort,nxi*sizeof(float));
		for(i=0;i<nxi;i++) {
               		xi[i] = sort[sortindex[i]];
		}
		bcopy(hdrs,hdrsort,nxi*HDRBYTES);
		for(i=0;i<nxi;i++) {
		    bcopy(hdrsort+sortindex[i]*HDRBYTES,
			hdrs+i*HDRBYTES,HDRBYTES);
		}

		np = nxi;

		if(inf==0) nxo = nxi;
		if(iof==0) {
			for(ix=0;ix<nxo;ix++) xo[ix] = xi[ix];
		}

		/* interpolation */
                intps(xi,yi,xo,yo,nxi,nxo,nt,dt,np,fmin,fmax,ntfft,niter,tol,
			xipre,nxipre,ccexp,iccexp,
			ccexpo,iccexpo);
		/* output gather */
		intout(xi,xo,yo,hdrs,nxi,nxo,nt,outfp,extrap,stype,indxs);

		fprintf(stderr,
" interpolation done from input %d live traces to output %d traces at %s=%d \n",nxi, nxo, pkey, ip);

	}


    	free(xi);
    	free(yi);
    	free(xo);
    	free(yo);
	free(hdrs);
	free(sort);
	free(sortindex);
	free(hdrs);

	return 0;

}
Esempio n. 14
0
int
main(int argc, char **argv)
{
	cwp_String key;	/* header key word from segy.h		*/
	cwp_String type;/* ... its type				*/
	int index;	/* ... its index			*/
	int nsegy;	/* number of bytes in the segy		*/
	Value val;	/* value of key in current gather	*/
	Value valnew;	/* value of key in trace being treated	*/
	int verbose;	/* verbose flag				*/
	int val_i;	/* key value as an integer		*/

	int ntr=0;	/* count of number of traces in an ensemble */
	int numlength;	/* length of numerical part of filenames */
	
	FILE *tmpfp=NULL;		/* file pointer			*/
	FILE *outfp=NULL;	/* file pointer			*/
	cwp_String dir;		/* directory name		*/
	cwp_String suffix;	/* suffix of output files	*/

	char directory[BUFSIZ];		/* storage for directory name	*/
 	char tempfilename[BUFSIZ];	/* 	...temporary filename	*/
	char middle[BUFSIZ];		/*      ...middle of final filename */
	char stem[BUFSIZ];		/*      ...stem of final filename */
 	char format[BUFSIZ];		/* 	...format of numeric part */
	char outfile[BUFSIZ];		/*      ...final filename	*/

	/* Initialize */
	initargs(argc, argv);
	requestdoc(1);


	/* Get parameters */
	MUSTGETPARSTRING("dir", &dir);
	if (!getparint   ("verbose", &verbose))	 	verbose = 0;
	if (!getparstring("key", &key))		 	key = "ep";
	if (!getparstring("suffix", &suffix))		suffix = ".hsu";
	if (!getparint("numlength", &numlength)) 	numlength=7;

	/* Initialize */
	/* tempfilename = ealloc1(strlen(tmplt)+3,sizeof(char)); */
	type = hdtype(key);
	index = getindex(key);

	/* Set up for first trace (must compare new key field each time) */
	nsegy = gettr(&intrace);
	
	/* Create temporary filename for the first gather */
	strcpy(directory, dir);
	strcpy(tempfilename, temporary_filename(directory));
	if((tmpfp = fopen(tempfilename,"w+")) == NULL)
		err("Cannot open file %s\n",tempfilename);

	if (verbose) warn(" temporary filename = %s", tempfilename);

	/* get key header value */
	gethval(&intrace, index, &val);
	
	ntr=0;
	do {

		++ntr;
		/* Get header value */				 
		gethval(&intrace, index, &valnew);

		/* compare past header value to current value */
		if (valcmp(type, val, valnew) || !nsegy) {
		 /* Either val and valnew differ, indicating a  */
		 /* new gather or nsegy is zero, indicating the */
		 /* end of the traces.			  */
			
			/* capture key field value */
			/* and build output filename */
			val_i=vtoi(type,val);

			/* zero out name parts */
			strcpy(outfile,"");
			strcpy(middle,"");
			strcpy(stem,"");

			/* build output name parts */
			strcat(middle,directory);
			strcat(middle,"/");
			strcat(stem,key);
			strcat(stem,"=");

			/* format for numeric part */
			(void)sprintf(format, "%%s%%s%%0%dd%%s",numlength);
		
			/* build name of output file */
			(void)sprintf(outfile, format,middle,stem,
					val_i, suffix);

			if (verbose) warn(" outfile = %s", outfile);

			/* rewind file */
			rewind(tmpfp);

			/* open the new file */
			if((outfp = fopen(outfile,"w+")) == NULL)
				err("Cannot open file %s\n",outfile);
			/* loop over traces setting ntr field */
			/*  and write to finalfile */	
			while(fgettr(tmpfp,&tmptr))  {
				tmptr.ntr = ntr;
				fputtr(outfp,&tmptr);
			}
			/* Close files */
			fclose(tmpfp);
			fclose(outfp);
			remove(tempfilename);

			if (verbose) warn("val= %i", val_i);

			/* Set up for next gather */
			/* create new tempfname first */
			strcpy(tempfilename, temporary_filename(directory));
			
			/* open filename */
			if((tmpfp = fopen(tempfilename,"w+")) == NULL)
				err("Cannot open file %s\n",tempfilename);
			val = valnew;
			ntr=0;
		}
		fputtr(tmpfp,&intrace);
	} while(gettr(&intrace));
	
	/* Close file */
	rewind(tmpfp);
	val_i=vtoi(type,val);
	
	/* Move last gather into new location */
	/* capture key field value */
	/* and build output filename */

	/* null out name parts */
	strcpy(outfile,"");
	strcpy(middle,"");
	strcpy(stem,"");

	/* build name parts */
	strcat(middle,directory);
	strcat(middle,"/");
	strcat(stem,key);
	strcat(stem,"=");
	
	/* write format of numeric part of output filename */
	(void)sprintf(format, "%%s%%s%%0%dd%%s",numlength);

	/* write output filename */
	(void)sprintf(outfile, format,middle,stem,
				val_i, suffix);

	/* open the output file */
	if((outfp = fopen(outfile,"w+")) == NULL)
			err("Cannot open file %s\n",outfile);
	/* loop over traces setting ntr field */
	while(fgettr(tmpfp,&tmptr))  {
		tmptr.ntr = ntr;
		fputtr(outfp,&tmptr);
	}
	/* Close file */
	fclose(tmpfp);
	fclose(outfp);
	remove(tempfilename);

	if (verbose) warn(" outfile = %s", outfile);
	if (verbose) warn("val= %i",val_i);

	return(CWP_Exit());

}
Esempio n. 15
0
//得到组件质量
double HDCrude::GetWeight() 
{
	return vtoi(m_pRs.GetFieldValue(m_strWeightField));
}
Esempio n. 16
0
main (int argc , char **argv) {
	int maxbyte=32000000;
	char *data;
	FILE *outfp=stdout;
	FILE *infp=stdin; 
	int head=1;
	int i;
	int min=-2000000000, max=2000000000, j=1;

        int iigroup, iitrace, iimaxbyte, iimaxtrace;
	float iicomp, iimse;
	char *c80;

/* SU initializations */
	initargs (argc,argv);
	askdoc (1);

	file2g(outfp);

/* fetch parameters */
	getparint ("head",&head);
	getparint ("maxbyte",&maxbyte);
	getparint ("j",&j);
	getparint ("min",&min);
	getparint ("max",&max);

/* allocate storage */
	data = (char*) malloc (maxbyte>3600?maxbyte:3600);

/* window compressed data */

	file2g(infp);
	file2g(outfp);

	/* restore header */
	if (head) {
		fread (data,1,3600,infp);
		fwrite (data,1,3600,outfp);
	}

	iimse = 0.;
	iicomp = 0.;
	iigroup = 0;
	iitrace = 0;
	iimaxbyte = 0;
	iimaxtrace = 0;
	c80 = (char*)malloc(80*sizeof(char));

	fread (&ch,1,sizeof(ch),infp);
	/* read each chunk and copy to output */
	do {
		if(ch.nbyte>maxbyte) 
		err(" ch.nbyte=%d exceeds maxbyte:%d  \n",ch.nbyte,maxbyte);
		if (fread (data,1,ch.nbyte,infp) < ch.nbyte) break;
	 	i = vtoi(hdtype(ch.key),ch.value);
		if( (i-min)%j==0 && i>=min && i<=max) { 
			fwrite (&ch,1,sizeof(ch),outfp);
			fwrite (data,1,ch.nbyte,outfp);
			iigroup += 1;
			iitrace += ch.ntrace;
			if(ch.nbyte>iimaxbyte) iimaxbyte = ch.nbyte;
			if(ch.ntrace>iimaxtrace) iimaxtrace = ch.ntrace;
			iimse += ch.mse;
			iicomp += ch.compress;

		}
	} while(fread (&ch,1,sizeof(ch),infp));

        iicomp = iicomp/iigroup;
	iimse = iimse/iigroup;

	sprintf(c80,"C40 END EBCDIC      %s %d %d %d %d %8.3f %8.3f",
		ch.key,iigroup,iitrace,iimaxbyte,iimaxtrace,iicomp,iimse);

	if(head==1) {
		fseeko(outfp,80*39,0);
		fwrite(c80,80,sizeof(char),outfp);
	}

	free(c80);
	free(data);

	exit(0);

}
Esempio n. 17
0
void CPrePointPag::SetBasePoint()
{
/*	try
	{
		long bFirst;
		CPreDrawPag* pag=(CPreDrawPag*)(((CPropertySheet*)this->GetParent())->GetPage(1));
		pag->UpdateData();
		this->UpdateData();
		bFirst = 1;
		CDaoRecordset rs;
		rs.m_pDatabase=&EDIBgbl::dbSORT;
		if(pag->GetCheckedRadioButton(IDC_DRAWSIZE_A3,IDC_DRAWSIZE_AUTO)==IDC_DRAWSIZE_A3)
			modPHScal::Ax = "A3";
		else modPHScal::Ax = "A4";

		//modPHScal::Ax = CString("A") + IIf(OptionDrawSIZE_A3A4(0), "3", "4")
		int ix=this->GetCheckedRadioButton(IDC_OPTIONZ1,IDC_OPTIONZ3);
		if(ix!=0) ix-=IDC_OPTIONZ1;
		if(!bGetPos)
			ix=oldix;
		CString FDp;
		if(ix==0) FDp="1_";
		else 
		{
			if(ix==1) FDp="2_";
			else FDp="S_";
		}
		if(pag->m_bCheckDraw_BOM)
			FDp+="bom";
		CString SQLx = "SELECT * FROM phsDrawPos";
		rs.Open(dbOpenDynaset,SQLx);
		CString sTmp;
		FDp.MakeUpper();
		COleVariant vTmp;
		for(int i=0;i<9;i++)
		{
			sTmp=m_posFld[i].FldName;
			sTmp.MakeUpper();
			SQLx = "((name))=\'" + FDp + sTmp + "\'";
				//MsgBox SQLx
			if(rs.FindFirst(SQLx))
			{
					if(bGetPos)
					{
						rs.GetFieldValue(modPHScal::Ax+"pos",vTmp);
						if(vTmp.vt==VT_NULL)
							m_posFld[i].FldValue=10;
						else m_posFld[i].FldValue=vtoi(vTmp);
					}
					else if( bSetPrevious)
					{
						rs.Edit();
						rs.GetFieldValue(modPHScal::Ax+"old",vTmp);
						rs.SetFieldValue(modPHScal::Ax+"pos",vTmp);
						rs.Update();
						if(vTmp.vt==VT_NULL)
							m_posFld[i].FldValue=10;
						else m_posFld[i].FldValue=vtoi(vTmp);
					}
					else if(bSetDefault)
					{
						rs.Edit();
						rs.GetFieldValue(modPHScal::Ax+"Default",vTmp);
						rs.SetFieldValue(modPHScal::Ax+"pos",vTmp);
						rs.Update();
						if(vTmp.vt==VT_NULL)
							m_posFld[i].FldValue=10;
						else m_posFld[i].FldValue=vtoi(vTmp);
					}
					else if (bSetBPOK )
					{
						vTmp=COleVariant((long)m_posFld[i].FldValue);
						rs.Edit();
						rs.SetFieldValue(modPHScal::Ax+"pos",vTmp);
						rs.Update();
					}
					else
					{
						rs.GetFieldValue(modPHScal::Ax+"pos",vTmp);
						if(iSetBPbegan == 1 )
						{
							rs.Edit();
							rs.SetFieldValue(modPHScal::Ax+"old",vTmp);
							rs.Update();
						}
						if(vTmp.vt==VT_NULL)
							m_posFld[i].FldValue=10;
						else m_posFld[i].FldValue=vtoi(vTmp);
					}
			}
		}

		bSetDefault = false;
		bSetBPOK = false;
		bSetPrevious = false;
		iSetBPbegan = iSetBPbegan + 1;
	}
	catch(CDaoException *e)
	{
		//e->ReportError();
		char ss[256];
		e->GetErrorMessage(ss,255);
		MessageBox(ss);
		e->Delete();
	}

*/

	try
	{
		long bFirst;
		CPreDrawPag* pag=(CPreDrawPag*)(((CPropertySheet*)this->GetParent())->GetPage(1));
		pag->UpdateData();
		this->UpdateData();
		bFirst = 1;
		_RecordsetPtr rs;
		rs.CreateInstance(__uuidof(Recordset));

		if(pag->GetCheckedRadioButton(IDC_DRAWSIZE_A3,IDC_DRAWSIZE_AUTO)==IDC_DRAWSIZE_A3)
			modPHScal::Ax = "A3";
		else modPHScal::Ax = "A4";

		long curA3A4; //当前绘图选项的图幅尺寸
		if((curA3A4 = pag->GetCheckedRadioButton(IDC_DRAWSIZE_A3, IDC_DRAWSIZE_AUTO)) == IDC_DRAWSIZE_A3)
			modPHScal::Ax = "A3";
		else 
			modPHScal::Ax = "A4";
		if (curA3A4 != 0)	curA3A4 -= IDC_DRAWSIZE_A3;

		CString strCurAx;	
		if (oldA3A4 <= -1)
		{
			oldA3A4 = curA3A4;
			strCurAx = modPHScal::Ax;
		}
		else
		{
			if (oldA3A4 == 0)
				strCurAx = "A3";
			else
				strCurAx = "A4";
		}
		oldA3A4 = curA3A4;

		int ix=this->GetCheckedRadioButton(IDC_OPTIONZ1,IDC_OPTIONZ3);
		if(ix!=0) ix-=IDC_OPTIONZ1;
		if(!bGetPos)
			ix=oldix;
		CString FDp;
		if(ix==0) FDp="1_";
		else 
		{
			if(ix==1) FDp="2_";
			else FDp="S_";
		}
		if(pag->m_bCheckDraw_BOM)
			FDp+="bom";
		CString SQLx = "SELECT * FROM phsDrawPos";
		rs->Open((_bstr_t)SQLx,_variant_t((IDispatch*)EDIBgbl::dbPHScode,true), 
			adOpenDynamic, adLockOptimistic, adCmdText); 
		if (!rs->adoEOF)
		{
		CString sTmp;
		FDp.MakeUpper();
		_variant_t vTmp;
			HRESULT hr = S_OK;
			rs->MoveFirst();
		for(int i=0;i<9;i++)
		{
			sTmp=m_posFld[i].FldName;
			sTmp.MakeUpper();
			SQLx = "((name))=\'" + FDp + sTmp + "\'";
				hr = rs->Find((_bstr_t)(SQLx), 0, adSearchForward);
				if(!rs->adoEOF)
			{
					if(bGetPos)
					{
						rs->get_Collect((_variant_t)(strCurAx + "pos"), &vTmp);
						if(vTmp.vt==VT_NULL)
							m_posFld[i].FldValue=10;
						else m_posFld[i].FldValue=vtoi(vTmp);
					}
					else if( bSetPrevious)
					{
						rs->get_Collect((_variant_t)(strCurAx + "old"), &vTmp);
						rs->put_Collect((_variant_t)(strCurAx + "pos"), vTmp);
						rs->Update();
						if(vTmp.vt==VT_NULL)
							m_posFld[i].FldValue=10;
						else m_posFld[i].FldValue=vtoi(vTmp);
					}
					else if(bSetDefault)
					{
						rs->get_Collect((_variant_t)(strCurAx + "Default"), &vTmp);
						rs->put_Collect((_variant_t)(strCurAx + "pos"), vTmp);
						rs->Update();
						if(vTmp.vt==VT_NULL)
							m_posFld[i].FldValue=10;
						else m_posFld[i].FldValue=vtoi(vTmp);
					}
					else if (bSetBPOK )
					{
						vTmp=_variant_t((long)m_posFld[i].FldValue);
						rs->put_Collect((_variant_t)(strCurAx + "pos"), vTmp);
						rs->Update();
					}
					else
					{
						rs->get_Collect((_variant_t)(strCurAx + "pos"), &vTmp);
						if(iSetBPbegan == 1 )
						{
								rs->put_Collect((_variant_t)(strCurAx + "old"), vTmp);
								rs->Update();
						}
						if(vTmp.vt==VT_NULL)
							m_posFld[i].FldValue=10;
						else m_posFld[i].FldValue=vtoi(vTmp);
					}
			}
		}

		bSetDefault = false;
		bSetBPOK = false;
		bSetPrevious = false;
		iSetBPbegan = iSetBPbegan + 1;
	}
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}

	this->UpdateData(false);
}
Esempio n. 18
0
//导入弹簧数据(变力弹簧)
void CAESARIIToPHS::ImportHanger(_RecordsetPtr rsData,long node,CString strJOBNAME_P)
{
	CString strSQL;
	_RecordsetPtr pRs;
	double dLoadx=1.0;//力的单位转换因子
	double dFOffset=0.0;//力的偏移量
	_variant_t tmpvar;
	CString str;
	CString strSize;
	CString strPHSType;
	try
	{
		strSQL.Format(_T("SELECT * FROM [OUTPUT_HANGERS] WHERE [NODE] = %d AND [JOBNAME] =  '%s'" ),
			node,strJOBNAME_P);
		pRs = m_pConnSourceDB->Execute(_bstr_t(strSQL),NULL,adCmdText);
		if(!(pRs->BOF&&pRs->adoEOF))
		{
			pRs->MoveFirst();
			//力的单位转换
		/*
			str=vtos(pRs->GetCollect(_T("LOAD_UNITS")));
			str.TrimLeft();
			str.TrimRight();
			str.MakeLower();
			dLoadx=UnitsToUeUnits(rsData,str,m_strUNITFORCE,dFOffset);
			if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据
		*/	
			//pgz1工作荷载已经在表:OUTPUT_RESTRAINTS中导入了
			//	rsData->PutCollect("pgz1",_variant_t(vtof(pRs->GetCollect("HOT_LOAD"))*dLoadx));
		//	rsData->PutCollect("paz0",_variant_t(vtof(pRs->GetCollect("TH_INSTALL_LOAD"))*dLoadx+dFOffset));
		//	rsData->PutCollect("paz1",_variant_t(vtof(pRs->GetCollect("AC_INSTALL_LOAD"))*dLoadx+dFOffset));
			
			double dLoadVariation = 0.0;
			dLoadVariation = vtof( pRs->GetCollect("LOAD_VARIATION") );
			if ( dLoadVariation < 1E-6 )
			{
				strPHSType = _T("9999"); //恒力弹簧
			}
			else //变力弹簧
			{
				rsData->PutCollect("CoefOfVarLoad",_variant_t( dLoadVariation /100 ) );
				tmpvar = pRs->GetCollect("SIZE");
				strSize.Format(_T("%02d"),vtoi(tmpvar));
				
				//并联数
				int iParalNum = vtoi( pRs->GetCollect( _T("NUMREQ") ) );
				CString strHangerType = vtos( pRs->GetCollect( _T("FIGNUM") ) );
				//串联数
				int iSeriesNum = 0;
				if ( !GetHangerSeriesNum(strHangerType,iSeriesNum) ) //得到弹簧不成功
				{
					CString strError;
					strError.Format( _T("无法通过弹簧类型%s获得弹簧的串联数,串联数默认为1"),strHangerType );
					AfxMessageBox( strError );
					iSeriesNum = 1;
				}
				
				//形成类似GLIF定义的支吊架类型号								
				strPHSType.Format( _T("%d%d%s"),iSeriesNum,iParalNum,strSize );
				
			}
			rsData->PutCollect("TYPE",_variant_t(strPHSType));
			rsData->PutCollect("psaTYPE",_variant_t(strPHSType));
		}
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}
	if ( pRs->State == adStateOpen )
	{
		pRs->Close();
	}
}
Esempio n. 19
0
void CFrmPreferences::OnOK() 
{
	// TODO: Add extra validation here
	bool FLAG = modPHScal::gbSPRBHLOADUNITBYNEWTON; //保存

	m_wndCalPag.SaveIniValue();
	m_wndDrawPag.SaveIniValue();
	m_wndPointPag.SaveIniValue();
	if(m_wndStylePag.GetActiveTimes() > 1)
	{
		m_wndStylePag.SaveIniValue();
	}
	SetRegValue(_T("Settings"), _T("CSPRAutoLugDia"), modPHScal::gbCSPRAutoLugDia);
	SetRegValue(_T("Settings"), _T("AutoTZ"), modPHScal::AutoOrdinateDrawing);


	SetRegValue(_T("Settings"), _T("CalSAbyConservativenessMethod"), (modPHScal::gbCalSAbyConservativenessMethod));
	SetRegValue(_T("Settings"), _T("CalSAbyPJG"), (modPHScal::gbCalSAbyPJG));
	SetRegValue(_T("Settings"), _T("CalCSPRLugDiaByPjg"), (modPHScal::gbCalCSPRLugDiaByPjg));

	SetRegValue(_T("Settings"), _T("CalPARTbyMaxLoad"), (modPHScal::gbCalPARTbyMaxLoad));
	SetRegValue(_T("Settings"), _T("AddPartWeight2PMax"), (modPHScal::gbAddPartWeight2PMax));
	SetRegValue(_T("Settings"), _T("AddPartWeight2CSPRPgz"), (modPHScal::gbAddPartWeight2CSPRPgz));
	SetRegValue(_T("Settings"), _T("AddPartWeight2SPRPgz"),  (modPHScal::gbAddPartWeight2SPRPgz));//2007.07.30
	SetRegValue(_T("Settings"),_T("PAForceZero"),(modPHScal::gbPAForceZero));//2007.09.25
	SetRegValue(_T("Settings"), _T("MaxPgzPaz"),  (modPHScal::gbMaxPgzPaz));//2007.09.03
	SetRegValue(_T("Settings"), _T("MinMaxDispByActualDisp"), (modPHScal::gbMinMaxDispByActualDisp));


	SetRegValue(_T("Settings"), _T("PhsOutINFOTableType"), (modPHScal::giPhsOutINFOTableType));
	SetRegValue(_T("Settings"), _T("DrawSIZE_A3A4"), (modPHScal::giDrawSIZE_A3A4));
	SetRegValue(_T("Settings"), _T("IsACAD"), (modPHScal::gIsACAD));
	SetRegValue(_T("Settings"), _T("SpringOrder"), (modPHScal::giSpringOrder));
	SetRegValue(_T("Settings"), _T("strSpringOrder"), modPHScal::gstrSpringOrder);
	SetRegValue(_T("Settings"), _T("strSpringOrderSQL"), modPHScal::gstrSpringOrderSQL);
	SetRegValue(_T("Settings"), _T("PhsColor"), modPHScal::gsPhsColor);
	SetRegValue(_T("Settings"), _T("Draw_BOM"), (modPHScal::gbDraw_BOM));
	SetRegValue(_T("Settings"), _T("AnnotateCSPR"), (modPHScal::gbAnnotateCSPR));
	SetRegValue(_T("Settings"), _T("Draw_OVERWRITE"), (modPHScal::gbDrawOVERWRITE));
	SetRegValue(_T("Settings"), _T("WorksWithBoltsNuts"), (modPHScal::gbWorksWithBoltsNuts));
	SetRegValue(_T("Settings"), _T("WorksWithSABoltsNuts"), (modPHScal::gbWorksWithSABoltsNuts));
	SetRegValue(_T("Settings"), _T("DW_delta"), (modPHScal::gnDW_delta));

	SetRegValue(_T("Settings"), _T("ZDJH"), (EDIBgbl::glCurRecordNo));
	SetRegValue(_T("Settings"), _T("DrawNoPreMethod"), (modPHScal::gbDrawNoPreMethod));
	SetRegValue(_T("Settings"), _T("AutoSaveDrawing"), (modPHScal::gbAutoSaveDrawing));
	SetRegValue(_T("Settings"), _T("DrawNoStartNumber"), (modPHScal::glDrawNoStartNumber));
	SetRegValue(_T("Settings"), _T("DwgVersion"), (EDIBgbl::strDwgVersion));
	SetRegValue(_T("Settings"), _T("MaxLGLong"), (EDIBgbl::MaxLGLong));//pfg20050922

	SetRegValue(_T("Settings"), _T("DWGPreMethod"), (modPHScal::glDWGPreMethod));
	SetRegValue(_T("Settings"), _T("DWGPre"), modPHScal::gsDWGPre);
	SetRegValue(_T("Settings"), _T("CSPRCanSpecialDesign"), (modPHScal::gbCSPRCanSpecialDesign));
	SetRegValue(_T("Settings"), _T("LimitLugMinDia"), (modPHScal::gbLimitLugMinDia));

	SetRegValue(_T("Settings"), _T("AutoAlignCSPRtoSA"), (modPHScal::gbAutoAlignCSPRtoSA));
	SetRegValue(_T("Settings"), _T("SumAllVolume"), (modPHScal::gbSumAllVolume));

	
	////////////////////////////
	if(FLAG!=modPHScal::gbSPRBHLOADUNITBYNEWTON)//单位改变时要初始化 
	{									   
		//this->ShowWindow(SW_HIDE);
		//modPHScal::blnSelphsSPEC(true);

		
		_variant_t tmpvar;
		int inttbExist=0;//0表示第一次进入循环,1表示表存在,2表示表不存在
		_RecordsetPtr rsX;
		rsX.CreateInstance(__uuidof(Recordset));
		_ConnectionPtr db, db1;
		db.CreateInstance(__uuidof(Connection));
		db1.CreateInstance(__uuidof(Connection));

		long  lngErrNum ;
		CString sTmp;

		CString strConnect;
		strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s"),
			basDirectory::DBShareDir + _T("zdjcrude.mdb"), ModEncrypt::gstrDBZdjCrudePassWord);
		db->Open((_bstr_t)strConnect, "", "", adModeUnknown);

		db1->Open((_bstr_t)("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+basDirectory::ProjectDBDir+_T("sort.mdb")),
			(_bstr_t)"", (_bstr_t)"",adModeUnknown);

		if(rsX->State == adStateOpen)
			rsX->Close();
		rsX->Open((_bstr_t)_T("SELECT * FROM phsManuSPRING ORDER BY [Observation],[standard] ASC"), 
			_variant_t((IDispatch*)EDIBgbl::dbSORT,true), 
			adOpenDynamic, adLockOptimistic, adCmdText); 
		modPHScal::gsPhsSPRINGSel.TrimLeft();modPHScal::gsPhsSPRINGSel.TrimRight(); 
		if( rsX->adoEOF && rsX->BOF )
		{
			lngErrNum = IDS_NotFoundThisStandardInSortMdb;
			sTmp.Format(GetResStr(lngErrNum),EDIBgbl::GetDBName(db1),_T("phsManuBoltsNuts"),modPHScal::gsPhsBoltsNutsSel);
			ShowMessage(sTmp);
			if(rsX->State == adStateOpen)
				rsX->Close();
			
			if(db->State == adStateOpen)
				db->Close();
			
			if(db1->State == adStateOpen)
				db1->Close();
			CPropertySheet::EndDialog(IDOK);
		}
		if(modPHScal::gsPhsSPRINGSel != _T("") ){
			// rsX->Filter=_variant_t(CString(_T("standard=\'") )+ gsPhsPASel + _T("\'"));
			//rsX.FindFirst
			//rsX->Find(_bstr_t(CString(_T("standard=\'"))+gsPhsSPRINGSel+_T("\'")),0,adSearchForward);
			HRESULT hr = S_OK;
			CString strFind;
			strFind = _T("standard=\'")+modPHScal::gsPhsSPRINGSel+_T("\'");
			hr = rsX->Find((_bstr_t)strFind, 0, adSearchForward);
			if( !rsX->adoEOF)	   
			{
				rsX->MoveFirst();
				inttbExist=2;
			}
		}
		else
		{
			rsX->MoveFirst();
			inttbExist=2;
		}
		while((inttbExist!=1)&&(!rsX->adoEOF))
		{
			rsX->get_Collect((_variant_t)_T("standard"),&tmpvar);
			if(tmpvar.vt==VT_NULL)
				modPHScal::gsPhsSPRINGSel=_T("");
			else{
				modPHScal::gsPhsSPRINGSel=vtos(tmpvar);
				modPHScal::gsPhsSPRINGSel.TrimLeft();modPHScal::gsPhsSPRINGSel.TrimRight();
			}
			rsX->get_Collect((_variant_t)_T("Spring_property"),&tmpvar);
			if(tmpvar.vt==VT_NULL)
				modPHScal::tbnSPRINGproperty=_T("");
			else{
				modPHScal::tbnSPRINGproperty=vtos(tmpvar);
				modPHScal::tbnSPRINGproperty.TrimLeft();modPHScal::tbnSPRINGproperty.TrimRight();
			}
			rsX->get_Collect((_variant_t)_T("Spring_propertyMaxDist"),&tmpvar);
			if(tmpvar.vt==VT_NULL)
				modPHScal::tbnDiscSPRINGpropertyMaxDist=_T("");
			else{
				modPHScal::tbnDiscSPRINGpropertyMaxDist=vtos(tmpvar);
				modPHScal::tbnDiscSPRINGpropertyMaxDist.TrimLeft();modPHScal::tbnDiscSPRINGpropertyMaxDist.TrimRight();
			}
			rsX->get_Collect((_variant_t)_T("Spring_id"),&tmpvar);
			if(tmpvar.vt==VT_NULL)
				modPHScal::tbnSPRINGid=_T("");
			else{
				modPHScal::tbnSPRINGid=vtos(tmpvar);
				modPHScal::tbnSPRINGid.TrimLeft();modPHScal::tbnSPRINGid.TrimRight();
			}
			rsX->get_Collect((_variant_t)_T("Spring_Crude"),&tmpvar);
			if(tmpvar.vt==VT_NULL)
				modPHScal::tbnSPRINGCrude=_T("");
			else{
				modPHScal::tbnSPRINGCrude=vtos(tmpvar);
				modPHScal::tbnSPRINGCrude.TrimLeft();modPHScal::tbnSPRINGCrude.TrimRight();
			}
			rsX->get_Collect((_variant_t)_T("CrudeTurnbuckle"),&tmpvar);
			if(tmpvar.vt==VT_NULL)
				modPHScal::tbnSPRINGL5Crude=_T("");
			else{
				modPHScal::tbnSPRINGL5Crude=vtos(tmpvar);
				modPHScal::tbnSPRINGL5Crude.TrimLeft();modPHScal::tbnSPRINGL5Crude.TrimRight();
			}
			//以下判断弹簧原始数据表在数据库中是否存在
			rsX->get_Collect((_variant_t)_T("DiameterSerial"),&tmpvar);
			if(tmpvar.vt==VT_NULL)
				modPHScal::tbnSPRDiameterSerial=_T("");
			else{
				modPHScal::tbnSPRDiameterSerial=vtos(tmpvar);
				modPHScal::tbnSPRDiameterSerial.TrimLeft();modPHScal::tbnSPRDiameterSerial.TrimRight();
			}
			if(!modPHScal::HStbExists(db,db1,modPHScal::tbnSPRDiameterSerial,_T("phsManuSPRING"),_T("DiameterSerial"),modPHScal::gsPhsSPRINGSel))
			{	
				if(inttbExist==0)	//第一次移到第一条记录上
				{
					rsX->MoveFirst();
					inttbExist=2;
				}
				else					//不是第一次,向后移一条记录
					rsX->MoveNext();
				continue;
			}
			if(!modPHScal::HStbExists(db,db1,modPHScal::tbnSPRINGCrude,_T("phsManuSPRING"),_T("Spring_Crude"),modPHScal::gsPhsSPRINGSel))
			{	
				if(inttbExist==0)	//第一次移到第一条记录上
				{
					rsX->MoveFirst();
					inttbExist=2;
				}
				else					//不是第一次,向后移一条记录
					rsX->MoveNext();
				continue;
			}
			if(!modPHScal::HStbExists(db,db1,modPHScal::tbnSPRINGL5Crude,_T("phsManuSPRING"),_T("CrudeTurnbuckle"),modPHScal::gsPhsSPRINGSel))
			{	
				if(inttbExist==0)	//第一次移到第一条记录上
				{
					rsX->MoveFirst();
					inttbExist=2;
				}
				else					//不是第一次,向后移一条记录
					rsX->MoveNext();
				continue;
			}
			if(!modPHScal::HStbExists(db,db1,modPHScal::tbnSPRINGid,_T("phsManuSPRING"),_T("Spring_id"),modPHScal::gsPhsSPRINGSel))
			{	
				if(inttbExist==0)	//第一次移到第一条记录上
				{
					rsX->MoveFirst();
					inttbExist=2;
				}
				else					//不是第一次,向后移一条记录
					rsX->MoveNext();
				continue;
			}
			if(!modPHScal::HStbExists(db,db1,modPHScal::tbnSPRINGproperty,_T("phsManuSPRING"),_T("Spring_property"),modPHScal::gsPhsSPRINGSel))
			{	
				if(inttbExist==0)	//第一次移到第一条记录上
				{
					rsX->MoveFirst();
					inttbExist=2;
				}
				else					//不是第一次,向后移一条记录
					rsX->MoveNext();
				continue;
			}
			if(!modPHScal::HStbExists(db,db1,modPHScal::tbnDiscSPRINGpropertyMaxDist,_T("phsManuSPRING"),_T("Spring_propertyMaxDist"),modPHScal::gsPhsSPRINGSel))
			{	
				if(inttbExist==0)	//第一次移到第一条记录上
				{
					rsX->MoveFirst();
					inttbExist=2;
				}
				else					//不是第一次,向后移一条记录
					rsX->MoveNext();
				continue;
			}
			inttbExist=1;
	}
	if(inttbExist!=1)
	{
		if(rsX->State == adStateOpen)
			rsX->Close();
		
		if(db->State == adStateOpen)
			db->Close();
		
		if(db1->State == adStateOpen)
			db1->Close();
		CPropertySheet::EndDialog(IDOK);
	}
	inttbExist=0;
	   rsX->get_Collect((_variant_t)_T("SerialNumPerSPR"),&tmpvar);
	   if(tmpvar.vt==VT_NULL)
		   modPHScal::giAllowedMaxSerialNumPerSPR=0;
	   else{
		   modPHScal::giAllowedMaxSerialNumPerSPR=vtoi(tmpvar);
		   //   giAllowedMaxSerialNumPerSPR.TrimLeft();giAllowedMaxSerialNumPerSPR.TrimRight();
	   }
	   rsX->get_Collect((_variant_t)_T("SerialNumSPRs"),&tmpvar);
	   if(tmpvar.vt==VT_NULL)
		   modPHScal::giAllowedMaxSerialNumSPRs=0;
	   else{
		   modPHScal::giAllowedMaxSerialNumSPRs=vtoi(tmpvar);
		   //giAllowedMaxSerialNumSPRs.TrimLeft();giAllowedMaxSerialNumSPRs.TrimRight();
	   }
	   //当导入了规范或者启动过之后
		bool	 bSPECchanged = true;
	   if((bSPECchanged || modPHScal::gbStartedOnceAPHS) && !(modPHScal::gsPhsSPRINGSel == modPHScal::gsOldPhsSPRINGSel))
		   modPHScal::CreateTmpSPRPropertyTable(modPHScal::giAllowedMaxSerialNumSPRs);
	   //获得弹簧或恒力弹簧编号规格的单位制
	   //以下判断恒力弹簧/碟簧规格编号力单位制描述字段值是否存在
	   rsX->get_Collect((_variant_t)_T("Unit_Force"),&tmpvar);
	   if(tmpvar.vt==VT_NULL)
	   {
		   lngErrNum = IDS_NullXfieldInphsManuXOfsortMdb;
		   sTmp.Format(GetResStr(lngErrNum),EDIBgbl::GetDBName(db1),_T("phsManuSPRING"),modPHScal::gsPhsSPRINGSel ,_T("Unit_Force"));
		   ShowMessage(sTmp);
		   if(rsX->State == adStateOpen)
			   rsX->Close();
		   
		   if(db->State == adStateOpen)
			   db->Close();
		   
		   if(db1->State == adStateOpen)
			   db1->Close();
		   CPropertySheet::EndDialog(IDOK);
	   }
	   else{
		   sTmp=vtos(tmpvar);
		   sTmp.TrimLeft();sTmp.TrimRight();
		   if(sTmp.Left(1)==_T("N"))
		   {
			   if(!modPHScal::gbSPRBHLOADUNITBYNEWTON)
			   {
				   modPHScal::gsSPRUnitOfLoad = _T("kgf");
				   rsX->put_Collect((_variant_t)_T("Unit_Force"),STR_VAR("kgf"));
				   rsX->Update();
				   //如果没有导入,只修改模板库下的原始数据库;
				   //修改方法:
				   rsX->get_Collect((_variant_t)_T("Folder"), &tmpvar);
				   
				   if(tmpvar.vt==VT_NULL||vtos(tmpvar)=="")
					   ;
				   else
				   {
					   //如果有导入,还要修改导入路径下的原始数据库;
				   }
			   }
			   else
			   {
				   modPHScal::gsSPRUnitOfLoad = _T("N");
			   }
			   
			   // gsSPRUnitOfLoad = _T("N");
		   }
		   else if(sTmp.Left(3)==_T("daN"))
			   modPHScal::gsSPRUnitOfLoad = _T("daN");
		   else if(sTmp.Left(3)==_T("kgf"))
		   {
			   if(modPHScal::gbSPRBHLOADUNITBYNEWTON)
			   {
				   modPHScal::gsSPRUnitOfLoad = _T("N");
				   rsX->put_Collect((_variant_t)_T("Unit_Force"),STR_VAR("N"));
				   rsX->Update();
				   //如果没有导入,只修改模板库下的原始数据库;
				   //修改方法:
				   rsX->get_Collect((_variant_t)_T("Folder"),&tmpvar);
				   
				   if(tmpvar.vt==VT_NULL||vtos(tmpvar)=="")
					   ;
				   else
				   {
					   //如果有导入,还要修改导入路径下的原始数据库;
				   }
			   }
			   else
			   {
				   modPHScal::gsSPRUnitOfLoad = _T("kgf");
			   }
		   }
		   else
			   //没找任何荷载单位制识别字符
		   {
			   sTmp.Format(GetResStr(IDS_NotFoundUnitStringInBHFormat),EDIBgbl::GetDBName(db1),_T("phsManuSPRING"),GetResStr(IDS_SPR),vtos(tmpvar));
		   ShowMessage(sTmp);
		   modPHScal::gsSPRUnitOfLoad = _T("daN");
		   }
	   }
	}

	CPropertySheet::EndDialog(IDOK);
}
Esempio n. 20
0
int
main(int argc, char **argv)
{
	
	float **data;
        char **hdrdata;
	float ***workm;
	
        int ival2;              /* int value of key2                */
        int ival3;              /* int value of key3                */
        Value val2;      	/* ... its value                        */
        Value val3;      	/* ... its value                        */
	int index2;
	int index3;
	
	int n1,n2,n3;
	int i1,i2,i3;
        char *key2=NULL;      /* header key word from segy.h    */
        char *type2=NULL;     /* ... its type                   */
        char *key3=NULL;      /* header key word from segy.h    */
        char *type3=NULL;     /* ... its type                   */
	
	int lins;
	int line;
	int nl;
	int dir=2;
	int il;
	int su;
	float cdp;
	float t;
	float dt;
	
        /* Initialize */
        initargs(argc, argv);
        requestdoc(1);
       	
       MUSTGETPARINT("n2", &n2);
       MUSTGETPARINT("n3", &n3);
       
       /* get key2*/
        if (!getparstring("key2", &key2))  key2 = "fldr"; 
        type2 = hdtype(key2);
        index2 = getindex(key2);
	
       /* get key3*/
        if (!getparstring("key3", &key3))  key3 = "tracf"; 
        type3 = hdtype(key3);
        index3 = getindex(key3);

        if (!getparint("lins", &lins))  lins = 1;
	if(lins<1) err(" lins must be larger than 0");
        if (!getparint("line", &line)) line = n2; 
         if (!getparint("su", &su)) su = 1; 
      
	/* Get info from first trace */
        if (!gettr(&tr))  err ("can't get first trace");
        n1 = tr.ns;
	
	if (!getparfloat("dt", &dt))	dt = ((float) tr.dt)/1000000.0;
	if (!dt) {
		dt = .01;
		warn("dt not set, assumed to be .01");
	}



	data = bmalloc(n1*sizeof(float),n2,n3);
		
	hdrdata = bmalloc(HDRBYTES,n2,n3);
	
        do {
		gethval(&tr, index2, &val2);
		ival2 = vtoi(type2,val2);
		gethval(&tr, index3, &val3);
		ival3 = vtoi(type3,val3);

		if(ival2>n2 || ival2<0 ) err(" Array in dimension 2 out of bound\n");
		if(ival3>n3 || ival3<0 ) err(" Array in dimension 3 out of bound\n");
		
		
      		bmwrite(data,1,ival2-1,ival3-1,1,tr.data);
		bmwrite(hdrdata,1,ival2-1,ival3-1,1,&tr);
		
	} while (gettr(&tr));
	
	
	
	nl=line-lins+1;
	if(dir==2) {
		/* n2 direction */
		workm = alloc3float(n1,n3,nl);
		for(il=lins-1;il<nl;il++) {
			for(i3=0;i3<n3;i3++) bmread(data,1,lins+il-1,i3,1,workm[il][i3]);
		}
		
		if(su==1) {	
			fprintf(stdout,"cdp=");
			for(il=lins-1;il<nl;il++) {
				for(i3=0;i3<n3;i3++) fprintf(stdout,"%d,",(lins+il)*1000+i3+1);
			}
		
			for(il=lins-1;il<nl;il++) {
				for(i3=0;i3<n3;i3++){
					fprintf(stdout,"\ntnmo=");
					for(i1=0;i1<n1;i1++) fprintf(stdout,"%.3f,",dt*i1);
					fprintf(stdout,"\nvnmo=");
					for(i1=0;i1<n1;i1++)
						fprintf(stdout,"%.3f,",workm[il][i3][i1]);
				}
		
			}
		} else {
			for(il=lins-1;il<nl;il++) {
				for(i3=0;i3<n3;i3++) {
					 cdp=(lins+il)*1000+i3+1;
					 fwrite(&cdp,sizeof(float),1,stdout);
				}
			}
		
			for(il=lins-1;il<nl;il++) {
				for(i3=0;i3<n3;i3++){
					for(i1=0;i1<n1;i1++) {
						t=tr.d1*i1;
						fwrite(&t,sizeof(float),1,stdout);
					}
					for(i1=0;i1<n1;i1++)
						fwrite(&workm[il][i3][i1],sizeof(float),1,stdout);
				}
		
			}
		}
			free3float(workm);	
	}
	
	bmfree(data);
	bmfree(hdrdata);	
	return EXIT_SUCCESS;
}
Esempio n. 21
0
//绘制表格
void CDrawZDJTableID::DrawzdjTable(int index,bool bIsCom)
{
	try
	{
		bool Found=false;
		CCadPoint p0, p1;
		_RecordsetPtr rs;
		rs.CreateInstance(__uuidof(Recordset));

		_RecordsetPtr rs1;
		rs1.CreateInstance(__uuidof(Recordset));

		int i=0;
		int k=0;
		static int n=0;
		if(index!=iZDJDRAWEXECL && index!=iZDJDRAWCatalogueExcel)
		{
			EDIBAcad::StartAcad();
			EDIBAcad::DisplayAcadTop();
			EDIBAcad::SetAcadTop();
			EDIBAcad::GetActiveAcadDoc();
		}
		//如果当前打开的图形不是(PhsBlkDir & _T("phs.dwg")),需要重新打开
		//因为后面的操作需要大量的图形块准备好
		CString sTmp,sTmp1;
		_variant_t vTmp;
		CMObject objTmp;
		CCadPoint pTmp;
		CString SQLx;
		_variant_t varTmp;
		_variant_t varNull;
		varNull.ChangeType(VT_NULL);
		if(index!=iZDJDRAWTag && index!=iZDJDRAWbom)
		{
			//判断是否所有支吊架计算完成。
			try
			{
				if(!FrmTxsr.m_pViewTxsr->m_ActiveRs->adoEOF && !FrmTxsr.m_pViewTxsr->m_ActiveRs->BOF)
					FrmTxsr.m_pViewTxsr->m_ActiveRs->Update();
			}
			catch (_com_error &e)
			{
				CString strMsg;
				strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
				AfxMessageBox(strMsg);
			}
			CString SQLx = _T("SELECT count(*) FROM [") + EDIBgbl::Btype[EDIBgbl::TZA] + _T("] WHERE ( bCalSuccess=0  OR bCalSuccess IS NULL )");
			
			if(modPHScal::gbSumAllVolume )
			{
				SQLx +=_T(" AND VolumeID IN ( SELECT VolumeID FROM Volume WHERE EnginID=\'") + EDIBgbl::SelPrjID + _T("\' AND ZYID = ") + ltos(EDIBgbl::SelSpecID) + _T(" AND SJJDID = ") + ltos(EDIBgbl::SelDsgnID) + _T(" AND SJHYID = ") + ltos(EDIBgbl::SelHyID) +_T(") ");
			}
			else
			{
				SQLx +=_T(" AND VolumeID =") + ltos(EDIBgbl::SelVlmID);
			}

			long i1,i2;

			rs1->Open(_variant_t(SQLx),(IDispatch*)::conPRJDB,adOpenForwardOnly,adLockReadOnly,adCmdText);
			i1=vtoi(rs1->GetCollect(_variant_t((long)0)));
			rs1->Close();

			SQLx = _T("SELECT count(*) FROM [") + EDIBgbl::Btype[EDIBgbl::TZA] + _T("] WHERE ");
			if(modPHScal::gbSumAllVolume )
			{
				SQLx +=_T(" VolumeID IN ( SELECT VolumeID FROM Volume WHERE EnginID=\'") + EDIBgbl::SelPrjID + _T("\' AND ZYID = ") + ltos(EDIBgbl::SelSpecID) + _T(" AND SJJDID = ") + ltos(EDIBgbl::SelDsgnID) + _T(" AND SJHYID = ") + ltos(EDIBgbl::SelHyID) +_T(") ");
			}
			else
			{
				SQLx +=_T(" VolumeID =") + ltos(EDIBgbl::SelVlmID);
			}
			rs1->Open(_variant_t(SQLx),(IDispatch*)::conPRJDB,adOpenForwardOnly,adLockReadOnly,adCmdText);
			i2=vtoi(rs1->GetCollect(_variant_t((long)0)));
			rs1->Close();
			rs1=NULL;
			CString strTmp;
			strTmp.Format(GetResStr(IDS_SomePhsNotCalSuccess),ltos(i2),ltos(i2-i1),ltos(i1));
			if( IDNO == ShowMessage(strTmp,MB_DEFBUTTON1|MB_ICONQUESTION|MB_YESNO) )
				return;
		}

		switch(index)
		{
		case iZDJDRAWTag:
			break;
		case iZDJDRAWbom:
			modPHScal::SetBasePoint();
			Cavphs->GetphsSEQ(FrmTxsr.m_pViewTxsr->m_ActiveRs);
			EDIBDB::MakeTmp2ToBom();
			p0.SetPoint(modPHScal::pt2x,modPHScal::pt2y);
			EDIBAcad::DeleteAllEntitiesInLayers(1,_T("bom"));
			rs->Open((_bstr_t)_T("SELECT * FROM TMP2"), _variant_t((IDispatch*)EDIBgbl::dbPRJ,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 

			EDIBAcad::DrawTableACAD(p0, EDIBgbl::TLJ, atan(1.0) * 0.0, rs,0,1.0f,_T("Bom"),_T("Bom"),_T("%g"),modPHScal::iAlignLjmx);
			sTmp.Format(GetResStr(IDS_xDrawingFinished),EDIBgbl::Cbtype[EDIBgbl::TCL].MnuCaption);

			ShowMessage(sTmp);
			break;
		case iZDJDRAWbomBJBW:
			modPHScal::SetBasePoint();
			Cavphs->GetphsSEQ(FrmTxsr.m_pViewTxsr->m_ActiveRs);
			EDIBDB::MakeTmp2ToBom();
			p0.SetPoint(modPHScal::pt2x,modPHScal::pt2y);
			EDIBAcad::DeleteAllEntitiesInLayers(1,_T("bom"));
			rs->Open((_bstr_t)_T("SELECT * FROM TMP2"), _variant_t((IDispatch*)EDIBgbl::dbPRJ,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			
			EDIBAcad::DrawTableACAD(p0, EDIBgbl::TLJ_BJBW, atan(1.0) * 0.0, rs,0,1.0f,_T("Bom"),_T("Bom"),_T("%g"),modPHScal::iAlignLjmx);
			sTmp.Format(GetResStr(IDS_xDrawingFinished),EDIBgbl::Cbtype[EDIBgbl::TCL].MnuCaption);

			ShowMessage(sTmp);
			break;
		case iZDJDRAWload:
			modPHScal::SetBasePoint();
			modPHScal::PhsDisplacementLoadINFOMake();
			break;
		case iZDJDRAW270mm:
				//每次计算一个支吊架时生成当前当前支吊架一览表,计算完成后总的一览表就生成了。
				//每次计算一个支吊架时生成当前当前支吊架明细一览表,计算完成后总的明细一览表就生成了。
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
					ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
					if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
					{
						rs->Close();
					}else
					{
						_variant_t var;
						var=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
						objTmp = var;
						p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
						p0 = p1;
					}
					EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZD, atan(1.0) * 0.0, rs, 0,1.0f, _T("YLB"));
			}
			break;
		case iZDJDRAW180mm:
				//每次计算一个支吊架时生成当前支吊架一览表,计算完成后总的一览表就生成了。
				//每次计算一个支吊架时生成当前支吊架明细一览表,计算完成后总的明细一览表就生成了。
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
				ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
				if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
				{
					rs->Close();
				}else
				{
					_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
					objTmp = v.pdispVal;
					p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
					p0 = p1;
				}
				EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZD180, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;	
		case iZDJDRAW270L:
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE ZDJH IN ( SELECT ZDJH FROM [")
				+ EDIBgbl::Btype[EDIBgbl::TZA] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) 
				+ _T(" AND TYPE LIKE \'????\' ) AND VolumeID =")+ ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
				ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
				if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
				{
					rs->Close();
				}else
				{
					_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
					objTmp = v.pdispVal;
					p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
					p0 = p1;
				}
				EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZD270L, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;
		case iZDJDRAWEXECL:
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE ZDJH IN ( SELECT ZDJH FROM [")
				+ EDIBgbl::Btype[EDIBgbl::TZA] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) 
				+ _T(" AND TYPE LIKE \'????\' ) AND VolumeID =")+ ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");			
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{
				EDIBAcad::DrawTableExcel( EDIBgbl::TZDExcel, rs);
			}
			sTmp.Format(GetResStr(IDS_xDrawingFinished),EDIBgbl::Cbtype[EDIBgbl::TZDExcel].MnuCaption);
			ShowMessage(sTmp);
			break;
		case iZDJDRAW705mm:
				//判断是否所有支吊架计算完成。
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
					ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
					if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
					{
						rs->Close();
					}else
					{

						_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
						objTmp =v.pdispVal;
						p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
						p0 = p1;
					}
					EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZD800, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;

		case iZDJDRAW705mmHSY:			////核四院支吊架明细一览表
				//判断是否所有支吊架计算完成。
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
					ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
					if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
					{
						rs->Close();
					}else
					{
						_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
						objTmp =v.pdispVal;
						p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
						p0 = p1;
					}
					EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZD800HSY, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;

		case iZDJDRAW705mmQGY:			////支吊架明细一览表
				//判断是否所有支吊架计算完成。
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
				ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
				if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
				{
					rs->Close();
				}else
				{
					_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
					objTmp =v.pdispVal;
					p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
					p0 = p1;
				}
				EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZD800QGY, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;

		case iZDJDRAW270pc:   //巴陵石化设计院支吊架表
				//每次计算一个支吊架时生成当前当前支吊架一览表,计算完成后总的一览表就生成了。
				//每次计算一个支吊架时生成当前当前支吊架明细一览表,计算完成后总的明细一览表就生成了。
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
					ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
					if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
					{
						rs->Close();
					}else
					{
						_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
						objTmp = v.pdispVal;
						p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
						p0 = p1;
					}
					EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZP, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;	
		case iZDJDRAWCatalogue:
			EDIBDB::DrawID = EDIBAcad::GetDrawIDAndName(1, EDIBDB::DrawName);

				//绘制目录
				//每次计算一个支吊架时生成当前当前支吊架图纸目录信息,计算完成后总的目录就生成了。
			SQLx=_T("DELETE FROM [ML] WHERE VolumeID IS NULL AND ZDJH IS NULL");
			EDIBgbl::dbPRJDB->Execute((_bstr_t)SQLx, NULL, adCmdText);
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TML] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY SEQ");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{
					//如果第一个图纸的序号>=1,在前面添加空的图纸目录,以便用户手工修改
				VARIANT vTmp;
				HRESULT hr = S_OK;
				CString strFind;
				strFind = _T("ZDJH <> NULL");
				hr = rs->Find((_bstr_t)strFind, 0, adSearchForward);
				if( rs->adoEOF)
					return;
				rs->get_Collect((_variant_t)_T("SEQ"), &varTmp);
				k = vtoi(varTmp);
				for( i = 1 ;i< k ;i++)
				{
					strFind = _T("SEQ=") + ltos(i);
					hr = rs->Find((_bstr_t)strFind, 0, adSearchForward);
					if( rs->adoEOF)
					{
						rs->AddNew();
						rs->put_Collect((_variant_t)_T("SEQ"),_variant_t((long)i));
						rs->put_Collect((_variant_t)_T("Pages"),_variant_t((long)1));
						rs->put_Collect((_variant_t)_T("DrawNo"),STR_VAR(_T("1")));
						rs->put_Collect((_variant_t)_T("DrawNa"),STR_VAR(_T("1")));
						rs->put_Collect((_variant_t)_T("Zdjh"),varNull);
						rs->put_Collect((_variant_t)_T("VolumeID"),varNull);
						rs->Update();
					}
				}
				rs->Close();
				//zsy 12/17      改为用ARX画图
				SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TML] + _T("] WHERE VolumeID IS NULL OR VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T("  ORDER BY SEQ");
				rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
					adOpenDynamic, adLockOptimistic, adCmdText); 
				ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
				if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
				{
					rs->Close();
				}else
				{
					_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
					objTmp = v.pdispVal;
					p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
					p0 = p1;
				}
				EDIBAcad::DrawTableACAD(p0, EDIBgbl::TML, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("ML"));
			}
			break;
		case iZDJDRAWCatalogueExcel:
			EDIBDB::DrawID = EDIBAcad::GetDrawIDAndName(1, EDIBDB::DrawName);
				//绘制目录
				//每次计算一个支吊架时生成当前当前支吊架图纸目录信息,计算完成后总的目录就生成了。
			SQLx=_T("DELETE FROM [ML] WHERE VolumeID IS NULL AND ZDJH IS NULL");
			EDIBgbl::dbPRJDB->Execute((_bstr_t)SQLx, NULL, adCmdText);

			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TML] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY SEQ");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenDynamic, adLockOptimistic, adCmdText); 
			VARIANT vTmp;
			if(!rs->BOF && !rs->adoEOF)
			{
					//如果第一个图纸的序号>=1,在前面添加空的图纸目录,以便用户手工修改
				HRESULT hr = S_OK;
				CString strFind;
				strFind = _T("ZDJH <> NULL");
				hr = rs->Find((_bstr_t)strFind, 0, adSearchForward);
				if( !rs->adoEOF)
					return;
				rs->get_Collect((_variant_t)_T("SEQ"), &varTmp);
				k = vtoi(varTmp);
				_variant_t vTmp;
				for( i = 1 ;i< k ;i++)
				{
					strFind = _T("SEQ=") + ltos(i);
					hr = rs->Find((_bstr_t)strFind, 0, adSearchForward);
					if( rs->adoEOF)
					{
						rs->AddNew();
						rs->put_Collect((_variant_t)_T("SEQ"),_variant_t((long)i));
						rs->put_Collect((_variant_t)_T("Pages"),_variant_t((long)1));
						rs->put_Collect((_variant_t)_T("DrawNo"),STR_VAR(_T("1")));
						rs->put_Collect((_variant_t)_T("DrawNa"),STR_VAR(_T("1")));
						rs->put_Collect((_variant_t)_T("Zdjh"),varNull);
						rs->put_Collect((_variant_t)_T("VolumeID"),varNull);
						rs->Update();
					}
				}
				rs->Close();
				SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TML] + _T("] WHERE VolumeID IS NULL OR VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T("  ORDER BY SEQ");
				rs->Open((_bstr_t)SQLx,_variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
					adOpenKeyset, adLockOptimistic, adCmdText); 
				EDIBAcad::DrawTableExcel(EDIBgbl::TMLE, rs);
			}
			sTmp.Format(GetResStr(IDS_xDrawingFinished),EDIBgbl::Cbtype[EDIBgbl::TML].MnuCaption);
			ShowMessage(sTmp);
			break;
		case iZDJDRAWm_phs :  //开始手工修改
			EDIBAcad::MakeNewLayer(_T("M_phs0"), acRed);
			break;
		case iZDJDRAWXN180mm://绘制西南电力院的支吊架一览表
			//Z8表
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
				ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
				if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
				{
					rs->Close();
				}else
				{
					_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
					objTmp = v.pdispVal;
					p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
					p0 = p1;
				}
				EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZDSWED180, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;
		case iZDJDRAW705mmHBYZ: //华北冶建
			//z9
						SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
				ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
				if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
				{
					rs->Close();
				}else
				{
					_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
					objTmp = v;
					p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
					p0 = p1;
				}
				EDIBAcad::DrawTableACAD(p0, EDIBgbl::TZD800HBYJ, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;
		case iZDJDRAWloadBJBW://北京巴威支吊荷载位移表
			modPHScal::SetBasePoint();
			modPHScal::PhsDisplacementLoadINFOMake("hz",0,EDIBgbl::TzDLOADNEW);
			break;
		//pfg20050601//北京华宇
		case iZDJDRAWBJHY01:
				//判断是否所有支吊架计算完成。
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
					ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
					if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
					{
						rs->Close();
					}else
					{

						_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
						objTmp =v.pdispVal;
						p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
						p0 = p1;
					}
					EDIBAcad::DrawTableACAD(p0, 36, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;

		case iZDJDRAWBJHY02:
				//判断是否所有支吊架计算完成。
			SQLx = _T("SELECT * FROM [") + EDIBgbl::Btype[EDIBgbl::TZD] + _T("] WHERE VolumeID=") + ltos(EDIBgbl::SelVlmID) + _T(" ORDER BY zdjh");
			rs->Open((_bstr_t)SQLx, _variant_t((IDispatch*)EDIBgbl::dbPRJDB,true), 
				adOpenStatic, adLockOptimistic, adCmdText); 
			if(!rs->BOF && !rs->adoEOF)
			{//zsy 12/17      改为用ARX画图
					ShowMessage(GetResStr(IDS_PleasePickApointAsZDJYLBInsertPointINAutoCAD));
					if( EDIBAcad::gbACADR14 || !bIsCom ) //使用动态库画图
					{
						rs->Close();
					}else
					{

						_variant_t v=EDIBAcad::objAcadDoc.GetPropertyByName(_T("Utility"));
						objTmp = v.pdispVal;
						p1=objTmp.Invoke(_T("GetPoint"),2,(LPVARIANT)p0,&_variant_t(GetResStr(IDS_PleasePickApointAsBOMInsertPointINAutoCAD)));
						p0 = p1;
					}
					EDIBAcad::DrawTableACAD(p0, 37, atan(1.0) * 0.0, rs, 0 , 1.0f, _T("YLB"));
			}
			break;
		//pfg20050601
		}
	}
	catch(_com_error e)
	{
		ShowMessage(e.Description());
	}
}
Esempio n. 22
0
//------------------------------------------------------------------
// DATE         :[2005/09/30]
// Parameter(s) :
// Return       :
// Remark       :将EXCEL文件导出到ACCESS数据库表中
//------------------------------------------------------------------
BOOL CImportAutoPD::ImportExcelToAccess(CString strExcelFileName, CString strWorksheetName, _ConnectionPtr pConDes, CString strTblName,CString strCurProID,CString KeyFieldName,CString ProFieldName)
{
	CString		strSQL;					//SQL语句
	_ConnectionPtr pConExcel;			//连接EXCEL文件
	_RecordsetPtr  pRsExcel;
	_RecordsetPtr  pRsAccess;
	_RecordsetPtr  pRsTmp;
	pConExcel.CreateInstance(__uuidof(Connection));
	pRsExcel.CreateInstance(__uuidof(Recordset));
	pRsAccess.CreateInstance(__uuidof(Recordset));
	pRsTmp.CreateInstance(__uuidof(Recordset));
	STRUCT_ENG_ID listID[10];		//不同工程的最大序号和工程名称
	int	 nProCount=0;		//不同工程的个数
	CString strTemp;
	int Rj=0;				//工程号在Excel中的列
	int ProjNum=1;
	int ProjIndex=0;
	int	ID;

	if (NULL == pConDes)
	{
		return FALSE;
	}
	try
	{
		EDIBgbl::CAPTION2FIELD* pFieldStruct=NULL;
		_variant_t varTmp;
		//获得EXCEL中的字段名和ACCESS中的字段的对应值,返回字段个数
		int nFieldCount = GetField2Caption(pFieldStruct);
		if (nFieldCount <= 0)
		{
			return FALSE;
		}
		
		strSQL = CONNECTSTRING_EXCEL + strExcelFileName;//连接EXCEL文件
		pConExcel->Open(_bstr_t(strSQL), "", "", -1);

		//打开Excel工作表,加一个符号$如果出错再重试不加$再打开一次.
		strSQL = "SELECT * FROM ["+strWorksheetName+"$]";
		try
		{
			pRsExcel->Open(_variant_t(strSQL), pConExcel.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
		}
		catch (_com_error)
		{
			strSQL = "SELECT * FROM ["+strWorksheetName+"]";
			pRsExcel->Open(_variant_t(strSQL), pConExcel.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
		}

		if (pRsExcel->adoEOF && pRsExcel->BOF)
		{
			AfxMessageBox("文件中没有记录!");
			return FALSE;
		}
		//打开Access表
		strSQL = "SELECT * FROM ["+strTblName+"] WHERE "+ProFieldName+"='"+strCurProID+"' ORDER BY "+KeyFieldName+" ";
		
		pRsAccess->Open(_variant_t(strSQL), pConDes.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
		
		if (pRsAccess->adoEOF && pRsAccess->BOF)
		{
			ID=0;
		}
		else
		{
			pRsAccess->MoveLast();
			ID = vtoi(pRsAccess->GetCollect(_variant_t(KeyFieldName)));
		}
		ID++;
		listID[0].ID = ID;		//当前工程最大的序号
		listID[0].EnginID = strCurProID;

		for(;Rj < nFieldCount;Rj++)
		{
			if( !ProFieldName.CompareNoCase(pFieldStruct[Rj].strField) )
			{
				break;
			}
		}
		_RecordsetPtr pRsTmp;
		pRsTmp.CreateInstance(__uuidof(Recordset));

		CString strGroup;		//作为关键字的所有字段组合
		//strGroup = "[管道外径/规格], [管道壁厚], [管内压力], [介质温度], [管道材质]";

/*		strGroup = "[卷册号],[色环],[管道/设备名称],[管道外径/规格],[管道壁厚],[介质温度],[安装地点],[管道材质],[备注],\
					[内保温层材料名称],[外保温层材料名称],[保护层材料名称],[风速],[热价比主汽价],[年运行小时数],\
					[油管道保温厚],[管内压力],[管内介质],[工程代号]";
		
		strSQL = "SELECT "+strGroup+" FROM ["+strTblName+"] WHERE "+ProFieldName+"="+strCurProID+" ";
		pRsTmp->Open(_variant_t(strSQL), pConDes.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
		if (pRsTmp->adoEOF && pRsTmp->BOF)
		{
			variant_t var = pRsTmp->GetCollect(_variant_t("enginid"));
		}
*/		//复制数据到ACCESS数据库中。 
		while (!pRsExcel->adoEOF)
		{
			pRsAccess->AddNew();
			for (int i=0; i < nFieldCount; i++)
			{
				try
				{
					if (pFieldStruct[i].strCaption.IsEmpty())
					{
						continue;
					}
					varTmp = pRsExcel->GetCollect(_variant_t(pFieldStruct[i].strCaption));
				}catch (_com_error& e) 
				{
					if (e.Error() == -2146825023)
					{
						strTemp = "原始数据表中没有字段 '"+pFieldStruct[i].strCaption+"' 。";
						AfxMessageBox(strTemp);
						pFieldStruct[i].strCaption.Empty();
						continue;
					}
					AfxMessageBox(e.Description());
					return FALSE;
				}
				
				if (Rj < nFieldCount && i == Rj)	//工程名称的字段
				{
					strTemp = vtos(varTmp);
					for(int c=0; c<ProjNum; c++)
					{
						if( !strTemp.CompareNoCase(listID[c].EnginID) || (c==0 && strTemp.IsEmpty()))
						{
							ProjIndex = c;
							break;
						}
					}
					if( c == ProjNum )		//不同的工程找出最大的序号.
					{
						listID[c].EnginID = strTemp;
						strSQL = "SELECT * FROM ["+strTblName+"] \
							WHERE "+ProFieldName+"='"+listID[c].EnginID+"' ORDER BY "+KeyFieldName+" ";
						if(pRsTmp->State == adStateOpen)
							pRsTmp->Close();
						pRsTmp->Open(_variant_t(strSQL), pConDes.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
						if( pRsTmp->adoEOF && pRsTmp->BOF )
						{
							ID = 0;
						}
						else
						{
							pRsTmp->MoveLast();
							varTmp = pRsTmp->GetCollect(_variant_t(KeyFieldName));
							ID = vtoi(varTmp);
						}
						//最大的序号,将记录加到末尾.
						listID[c].ID = ++ID;
						ProjIndex = c;
						ProjNum++; 
					}
				}
				
				pRsAccess->PutCollect(_variant_t(pFieldStruct[i].strField),varTmp);
			}
			//设置关键值和工程ID
			pRsAccess->PutCollect(_variant_t(KeyFieldName), _variant_t((long)listID[ProjIndex].ID++));
			pRsAccess->PutCollect(_variant_t(ProFieldName),_variant_t(listID[ProjIndex].EnginID));
			pRsAccess->PutCollect(_variant_t("c_bImport"),_variant_t((short)1));	//导入标志
			pRsAccess->PutCollect(_variant_t("c_CalInThi"),_variant_t((short)1));	//是否自动计算内保温的厚度 1:不计算
			pRsAccess->PutCollect(_variant_t("c_CalPreThi"),_variant_t((short)1));	//是否自动计算外保温的厚度


			pRsAccess->Update();
			pRsExcel->MoveNext();
		}
Esempio n. 23
0
int HDCrude::GetDH()
{
	return vtoi(m_pRs.GetFieldValue(m_strDHField));
}