solidworks二次开发:获取简单零件的面信息

1、创建工程,选择ATL COM AppWizard__Support MFC

2、Insert----New ATL Object------swAddIn

3、StringTable: 三行添加ID


4、在AddMenu中 添加如下代码:

    //遍历零件的面
position = -1;
menu.LoadString(IDS_PART_FACE_ITEM);
method.LoadString(IDS_PART_FACE_METHOD);
hint.LoadString(IDS_PART_FACE_HINT);
m_iSldWorks->AddMenuItem2(type, m_swCookie, menu, position, method, update, hint, &ok);

 5、添加自定义方法:  右键单击Iswobj10后,选中Insert Method


6、如下是实现代码

STDMETHODIMP Cswobj10::bianli_face()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	// TODO: Add your implementation code here
        CComPtr<IModelDoc2> pModelDoc;	
        CComPtr<IFeature> pFeature;

	CString total_string;
	long doctype=-1;       //文档类型
	HRESULT hr;
	hr=m_iSldWorks->get_IActiveDoc2(&pModelDoc);
	if(hr!=S_OK){
		AfxMessageBox("获得当前活动文档失败");
		return S_OK;}
	pModelDoc->GetType(&doctype);
	if(doctype!=swDocPART){
		AfxMessageBox("打开的文档不是零件");
		pModelDoc=NULL;
		return S_OK;
	}

	long FaceNum; //面的数量
	double Area=0; //面积
	long EdgeNum=0;//边的数量
	int ID=-1;
	VARIANT_BOOL flag_T=VARIANT_TRUE;
	VARIANT_BOOL flag_F=VARIANT_FALSE;

	//遍历特征
	pModelDoc->IFirstFeature(&pFeature); //第一个特征
	while(pFeature){
	    pFeature->GetFaceCount(&FaceNum); //面的数量
	    CComPtr<IFace2> *FaceArr = new CComPtr<IFace2>[FaceNum];
	    pFeature->IGetFaces2(&FaceNum,(IFace2**)FaceArr);     
            for(int i=0; i<FaceNum;i++){
	        FaceArr[i]->SetFaceId(i+1);
                FaceArr[i]->GetFaceId(&ID);
                FaceArr[i]->GetArea(&Area);
	        FaceArr[i]->GetEdgeCount(&EdgeNum); //边的数量

                FaceArr[i]->Highlight(flag_T);
                Sleep(1000);  //高亮显示,以判别面的次序
                FaceArr[i]->Highlight(flag_F);

	        CString tmp;
	        tmp.Format("%d:面的面积: %0.3f, 面的边数:%ld\n",ID,Area*1000000,EdgeNum);  //面积mm^2, 否则小数位数太多,出错
	        total_string+=tmp;
	    }
	    delete []FaceArr;  //必须进行释放,防止引发内存泄露
	    FaceArr=NULL;

	    CComPtr<IFeature> pFeature_next;
	    pFeature->IGetNextFeature(&pFeature_next);//下一个特征
	    pFeature=NULL;
	    pFeature=pFeature_next;
	}
	
	pModelDoc=NULL;
	AfxMessageBox(total_string);
	return S_OK;
}


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值