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 pModelDoc;	
        CComPtr 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 *FaceArr = new CComPtr[FaceNum];
	    pFeature->IGetFaces2(&FaceNum,(IFace2**)FaceArr);     
            for(int i=0; iSetFaceId(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 pFeature_next;
	    pFeature->IGetNextFeature(&pFeature_next);//下一个特征
	    pFeature=NULL;
	    pFeature=pFeature_next;
	}
	
	pModelDoc=NULL;
	AfxMessageBox(total_string);
	return S_OK;
}


你可能感兴趣的:(Solidworks二次开发)