anston 发表于 2005-9-19 15:11:00

[求助]关于在指定点插入属性块的问题(含代码)

<P>我需要在AutoCAD中的平面桁架结构的节点上自动添加带文本属性的块,来表示节点荷重</P>
<P>目前我已经作了一个带文本属性的块,代码如下:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //4.创建节点荷重标注属性块<BR>&nbsp;&nbsp;AcDbBlockTableRecord *pBlkTableRcd1<BR>&nbsp;&nbsp;&nbsp;=new AcDbBlockTableRecord();//创建块表记录<BR>&nbsp;&nbsp;pBlkTableRcd1-&gt;setName("NodeLoading");//设置块表记录名(块名)<BR>&nbsp;&nbsp;AcGePoint3d basePoint1(0.0,0.0,0.0);//定义块的基点<BR>&nbsp;&nbsp;pBlkTableRcd1-&gt;setOrigin(basePoint1);<BR>&nbsp;&nbsp;//以写方式得到当前块表的指针<BR>&nbsp;&nbsp;AcDbBlockTable *pBlkTable=NULL;&nbsp;&nbsp;<BR>&nbsp;&nbsp;acdbHostApplicationServices()-&gt;workingDatabase()<BR>&nbsp;&nbsp;&nbsp;-&gt;getSymbolTable(pBlkTable, AcDb::kForWrite);<BR>&nbsp;&nbsp;//将新的块表记录加入块表中,并获得块表记录的ID<BR>&nbsp;&nbsp;AcDbObjectId Id1;<BR>&nbsp;&nbsp;pBlkTable-&gt;add(Id1, pBlkTableRcd1);<BR>&nbsp;&nbsp;pBlkTable-&gt;close();<BR>&nbsp;&nbsp;//生成组成块的实体<BR>&nbsp;&nbsp;AcGePoint3dArray ptArrDown;<BR>&nbsp;&nbsp;ptArrDown.setLogicalLength(4);//设置数组的逻辑长度,箭头需要4个点<BR>&nbsp;&nbsp;ptArrDown.set(0.0,0.0,0.0);<BR>&nbsp;&nbsp;ptArrDown.set(0.0,200.0,0.0);<BR>&nbsp;&nbsp;ptArrDown.set(10.35,38.64,0.0);//箭头的斜线按长度40,与x轴夹75度角计算<BR>&nbsp;&nbsp;ptArrDown.set(-10.35,38.64,0.0);<BR>&nbsp;&nbsp;//生成箭头符号<BR>&nbsp;&nbsp;AcDbLine *pLine1=new AcDbLine(ptArrDown,ptArrDown);<BR>&nbsp;&nbsp;AcDbLine *pLine2=new AcDbLine(ptArrDown,ptArrDown);<BR>&nbsp;&nbsp;AcDbLine *pLine3=new AcDbLine(ptArrDown,ptArrDown);<BR>&nbsp;&nbsp;//将组成箭头图块的实体写入块表记录<BR>&nbsp;&nbsp;AcDbObjectId ArrowDownId;<BR>&nbsp;&nbsp;pBlkTableRcd1-&gt;appendAcDbEntity(ArrowDownId,pLine1);<BR>&nbsp;&nbsp;pBlkTableRcd1-&gt;appendAcDbEntity(ArrowDownId,pLine2);<BR>&nbsp;&nbsp;pBlkTableRcd1-&gt;appendAcDbEntity(ArrowDownId,pLine3);<BR>&nbsp;&nbsp;//设置创建箭头的层为"NodeLoading"<BR>&nbsp;&nbsp;pLine1-&gt;setLayer ("NodeLoading");<BR>&nbsp;&nbsp;pLine2-&gt;setLayer ("NodeLoading");<BR>&nbsp;&nbsp;pLine3-&gt;setLayer ("NodeLoading");<BR>&nbsp;&nbsp;//关闭实体对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pLine1-&gt;close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pLine2-&gt;close();<BR>&nbsp;&nbsp;pLine3-&gt;close();</P>
<P>&nbsp;&nbsp;//定义块的属性<BR>&nbsp;&nbsp;AcGePoint3d pt1(25.0,230.0,0.0);//定义属性位置,x坐标为文字高度的一半<BR>&nbsp;&nbsp;AcDbAttributeDefinition *pAttdef1=new AcDbAttributeDefinition;<BR>&nbsp;&nbsp;//设置属性的特性值<BR>&nbsp;&nbsp;pAttdef1-&gt;setPosition(pt1);//设置属性位置<BR>&nbsp;&nbsp;pAttdef1-&gt;setHeight(50.0);//设置文字高度<BR>&nbsp;&nbsp;pAttdef1-&gt;setRotation(PI/2);//设置文字旋转角度(弧度)<BR>&nbsp;&nbsp;pAttdef1-&gt;setHorizontalMode(AcDb::kTextLeft);//设置水平对齐方式<BR>&nbsp;&nbsp;pAttdef1-&gt;setVerticalMode(AcDb::kTextBase);//设置垂直对齐方式<BR>&nbsp;&nbsp;pAttdef1-&gt;setPrompt("节点荷重值");//设置属性提示<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAttdef1-&gt;setTextString("0");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAttdef1-&gt;setTag("NodeLoadingTag");//设置属性标签<BR>&nbsp;&nbsp;pAttdef1-&gt;setInvisible(Adesk::kFalse);//设置不可见选项为假<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAttdef1-&gt;setVerifiable(Adesk::kFalse);//设置验证方式为假<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAttdef1-&gt;setPreset(Adesk::kFalse);//设置预置方式为假<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAttdef1-&gt;setConstant(Adesk::kFalse);//设置常数方式为假<BR>&nbsp;&nbsp;pAttdef1-&gt;setLayer("NodeLoading");//设置创建编号的层为"NodeLoading"<BR>&nbsp;&nbsp;</P>
<P>&nbsp;&nbsp;//将属性定义加入图块<BR>&nbsp;&nbsp;pBlkTableRcd1-&gt;appendAcDbEntity(ArrowDownId,pAttdef1);<BR>&nbsp;&nbsp;</P>
<P>&nbsp;&nbsp;//关闭属性对象<BR>&nbsp;&nbsp;pAttdef1-&gt;close();<BR>&nbsp;&nbsp;pBlkTableRcd1-&gt;close();<BR>&nbsp;&nbsp;pBlkTable-&gt;close();</P>
<P>上述代码中的basepoint是属性块的相对坐标系的基点。<BR>各个需要标注的节点的坐标和相应的节点荷重值都已保存在SQL Server数据库中</P>
<P>从数据库分别提取这些值,并转换为相应的数据类型,代码如下<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义数据库Connection变量<BR>&nbsp;&nbsp;&nbsp;&nbsp; _ConnectionPtr m_pConnection;<BR>&nbsp;&nbsp;&nbsp;&nbsp; //定义数据库Recordset变量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _RecordsetPtr m_pRecordset;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; AfxOleInit();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; HRESULT hr;<BR>&nbsp;&nbsp;&nbsp;&nbsp; try<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hr = m_pConnection.CreateInstance("ADODB.Connection"); //创建Connection对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(SUCCEEDED(hr))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hr = m_pConnection-&gt;Open("Provider=SQLOLEDB;Data Source=CZQDAY;User ID=sa;Password=820306;Initial </P>
<P>Catalog=TOSHIBA1","","",adModeUnknown);///连接数据库<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; catch(_com_error e)///捕捉异常<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString errormessage;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox(errormessage);///显示错误信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;//1.提取节点坐标<BR>&nbsp;&nbsp;//定义节点坐标参数的变体变量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _variant_t varNodeId, varXCo, varYCo;<BR>&nbsp;&nbsp;//定义节点坐标参数变量的数据类型<BR>&nbsp;&nbsp;float nx,ny; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float xco,yco; //定义节点坐标数组<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int n=0,m=0; //定义n为xco数组下标,m为yco数组下标<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //UpdateData(true);<BR>&nbsp;&nbsp;&nbsp;m_pRecordset.CreateInstance("ADODB.Recordset");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString str;&nbsp;&nbsp; //定义字符串变量str</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打开XY表(XY表储存节点的X和Y坐标),提取节点坐标<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="SELECT * FROM XY where ProjectID=";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="'";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="as003";//??希望能用变量传递<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="'";&nbsp; //组合成字符串</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _variant_t varNodeCo(str);&nbsp; //将字符串赋给varNodeCo变量&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset.CreateInstance("ADODB.Recordset");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;Open(varNodeCo,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //搜索XY表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;MoveFirst();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!m_pRecordset-&gt;EndOfFile)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varNodeId=m_pRecordset-&gt;GetCollect("id");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varXCo=m_pRecordset-&gt;GetCollect("XCoordinate");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varYCo=m_pRecordset-&gt;GetCollect("YCoordinate");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nx=varXCo.dblVal;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xco=nx;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ny=varYCo.dblVal;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yco=ny; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;MoveNext();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;Close();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(_com_error e)//捕捉异常<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox("提取节点坐标失败");//显示错误信息<BR>&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;//2.提取节点荷重<BR>&nbsp;&nbsp;//定义节点荷重参数的变体变量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _variant_t varNodeId2, varNodeLoading;<BR>&nbsp;&nbsp;//定义节点荷重参数变量的数据类型<BR>&nbsp;&nbsp;float nl;<BR>&nbsp;&nbsp;float nodeloading;//定义节点荷重数组<BR>&nbsp;&nbsp;int i=0; //定义i为nodeloading数组下标<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //UpdateData(true);<BR>&nbsp;&nbsp;&nbsp;m_pRecordset.CreateInstance("ADODB.Recordset");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString str;&nbsp;&nbsp; //定义字符串变量str</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打开NodeLoading表(NodeLoading表储存节点的荷重值),提取节点荷重<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="SELECT * FROM NodeLoading where ProjectID=";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="'";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="as003";//??希望能用变量传递<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="'";&nbsp; //组合成字符串</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _variant_t varNodeLoading(str);&nbsp; //将字符串赋给varNodeLoading变量&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset.CreateInstance("ADODB.Recordset");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;Open(varNodeLoading,_variant_t((IDispatch*)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //搜索??表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;MoveFirst();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!m_pRecordset-&gt;EndOfFile)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varNodeId2=m_pRecordset-&gt;GetCollect("NodeId");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varNodeLoading=m_pRecordset-&gt;GetCollect("NodeLoading");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nl=varNodeLoading.dblVal;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nodeloading=nl;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;MoveNext();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;Close();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(_com_error e)//捕捉异常<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox("提取节点荷重失败");//显示错误信息<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;//3.提取上弦杆节点数<BR>&nbsp;&nbsp;//定义节点数参数的变体变量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _variant_t varUpTrussEndPt;<BR>&nbsp;&nbsp;//定义上弦杆节点数变量<BR>&nbsp;&nbsp;int UpTrussNodeNum; <BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //UpdateData(true);<BR>&nbsp;&nbsp;&nbsp;m_pRecordset.CreateInstance("ADODB.Recordset");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString str;&nbsp;&nbsp; //定义字符串变量str<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打开NodeInput表(NodeInput表储存几个特征节点编号)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="SELECT * FROM NodeInput where ProjectID=";//这句中的表名需要补充<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="'";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="as003";//??希望能用变量传递<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="'";&nbsp; //组合成字符串</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _variant_t varPtNum(str);&nbsp; //将字符串赋给varPtNum变量&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset.CreateInstance("ADODB.Recordset");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;Open(varPtNum,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //搜索NodeInput表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;MoveFirst();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!m_pRecordset-&gt;EndOfFile)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varUpTrussEndPt=m_pRecordset-&gt;GetCollect("EndPoint");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpTrussNodeNum=varNodeLoading.intVal; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;MoveNext();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pRecordset-&gt;Close();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(_com_error e)//捕捉异常<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox("提取上弦杆节点数失败");//显示错误信息<BR>&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>上述代码中的"3.提取上弦杆节点数"是获得要标注节点荷重的节点的数量</P>
<P>目前我希望实现的功能是:<BR>将块插入点自动按节点坐标数组输入,并给其赋予相应的节点荷重值(已保存在NodeLoading数组中)<BR>这样的for语句应该如何写?<BR>我试着把<BR>for(int j=0;j&lt;UpTrussNodeNum;j++){}<BR>这句话加在了几个位置,都不能实现我的预期功能</P>
<P>另一个问题是:<BR>如何自动设定块插入的基点<BR>即如何把相对坐标系下固定的basepoint转变为绝对坐标系下可变的节点坐标数组</P>
<P>急切等待高人指点</P>
<P><BR>&nbsp;</P>

anston 发表于 2005-9-20 18:57:00

<P>怎么没人帮我呢?</P>
<P>现在就差这一个功能没实现了,真着急啊...</P>
页: [1]
查看完整版本: [求助]关于在指定点插入属性块的问题(含代码)