[C++ MSCE] 创建尺寸标注

符老师  C#有创建尺寸标注   C++没有呢?  我根据C#的的写C++的尺寸标注

DimensionHandler::CreateDimensionElement(eeh, dimData, arrowtype, is3d, *model);
//依据C#赋值点等  没法进行了。
	if (NULL != &eeh && eeh.IsValid())
	{
	    //InsertPoint 、SetHeight、SetRotationMatrix 都是在IDimensionEdit结构体中 我改怎么得到一个实例
		dimP.InsertPoint(eeh,&staPt, NULL, *simStyle, -1);
		dimP.InsertPoint(eeh,&endPt, NULL, *simStyle, -1);
		dimP.SetHeight(height);
		dimP.SetRotationMatrix(rotP);
	}
  赋值点和矩阵没法进行了 求符老师指教

  • 有呀。我记得前两天刚在论坛里贴出来一个关联标注的C++代码样例,你先找一下。



  • 难道我搜索的问题? 我没搜到  只有搜到C#的。。

  • 这个社区的搜索功能确实不怎么好用。我再次贴出源代码如下供参考:

    class DimensionProperty : public IDimCreateData
    {
    private:
    	DimensionStylePtr m_dimstyle;
    	DgnTextStylePtr m_textStyle;
    	Symbology m_symbology;
    	LevelId m_levelId;
    	DirectionFormatterPtr m_directionFormatter;
    	RotMatrix m_rot1;
    	RotMatrix m_rot2;
    
    public:
    	DimensionProperty(DimensionStylePtr dimstyle, DgnTextStylePtr textstyle, Symbology symb, LevelId levelId, DirectionFormatterPtr formatter, RotMatrix  rot1, RotMatrix rot2)
    	{
    		m_dimstyle = dimstyle;
    		m_textStyle = textstyle;
    		m_symbology = symb;
    		m_levelId = levelId;
    		m_directionFormatter = formatter;
    		m_rot1 = rot1;
    		m_rot2 = rot2;
    	}
    
    	virtual DimensionStyleCR _GetDimStyle() const
    	{
    		return *m_dimstyle;
    	}
    
    	virtual DgnTextStyleCR   _GetTextStyle()  const
    	{
    		return *m_textStyle;
    	}
    
    	virtual Symbology   _GetSymbology() const
    	{
    		return m_symbology;
    	}
    	virtual LevelId   _GetLevelID() const
    	{
    		return m_levelId;
    	}
    	virtual DirectionFormatterCR   _GetDirFormat()  const
    	{
    		return *m_dirFormatter;
    	}
    	virtual int  _GetViewNumber()  const
    	{
    		return 0;
    	}
    
    	virtual RotMatrixCR  _GetDimRMatrix()  const
    	{
    		return m_rot1;
    	}
    
    	virtual RotMatrixCR  _GetViewRMatrix()  const
    	{
    		return m_rot2;
    	}
    
    	virtual bool   _GetAnnScaleAllowed()  const
    	{
    		return true;
    	}
    };
    void createAssoDim (WCharCP unparsed)
    {
    	EditElementHandle lineEeh, dimEeh;
    	double g_1mu = ISessionMgr::GetActiveDgnModelP()->GetModelInfoCP()->GetUorPerMeter();
    	DgnFilePtr    pActiveDgnFile = ISessionMgr::GetActiveDgnFile();
    	DgnModelP pActiveModel = ISessionMgr::GetActiveDgnModelP();
    	//------ Create a line element
    	DPoint3d pt1 = DPoint3d::From(0, 0, 0);
    	DPoint3d pt2 = DPoint3d::From(10 * g_1mu, 0, 0);
    	DSegment3d seg = DSegment3d::From(pt1, pt2);
    	LineHandler::CreateLineElement(lineEeh, nullptr, seg, true, *ACTIVEMODEL);
    	lineEeh.AddToModel();
    
    	//------- Create a empty dim element
    	DimensionStylePtr pDimStyle = DimensionStyle::GetSettings(*pActiveDgnFile);
    
    	pDimStyle->SetBooleanProp(true, DimStyleProp::DIMSTYLE_PROP_Placement_UseStyleAnnotationScale_BOOLINT);
    	pDimStyle->SetDoubleProp(1, DimStyleProp::DIMSTYLE_PROP_Placement_AnnotationScale_DOUBLE);
    	pDimStyle->SetBooleanProp(true, DimStyleProp::DIMSTYLE_PROP_Text_OverrideHeight_BOOLINT);
    	pDimStyle->SetDistanceProp(0.5 * g_1mu, DimStyleProp::DIMSTYLE_PROP_Text_Height_DISTANCE, pActiveModel);
    	pDimStyle->SetBooleanProp(true, DimStyleProp::DIMSTYLE_PROP_Text_OverrideWidth_BOOLINT);
    	pDimStyle->SetDistanceProp(0.4 * g_1mu, DimStyleProp::DIMSTYLE_PROP_Text_Width_DISTANCE, pActiveModel);
    	pDimStyle->SetBooleanProp(true, DimStyleProp::DIMSTYLE_PROP_General_UseMinLeader_BOOLINT);
    	pDimStyle->SetDoubleProp(0.01, DimStyleProp::DIMSTYLE_PROP_Terminator_MinLeader_DOUBLE);
    	pDimStyle->SetBooleanProp(true, DimStyleProp::DIMSTYLE_PROP_Value_AngleMeasure_BOOLINT);
    	pDimStyle->SetAccuracyProp((byte)AnglePrecision::Use1Place, DimStyleProp::DIMSTYLE_PROP_Value_AnglePrecision_INTEGER);
    	pDimStyle->SetIntegerProp(DIMSTYLE_VALUE_General_Alignment_True, DIMSTYLE_PROP_General_Alignment_INTEGER);
    
    	DgnTextStylePtr textStyle = DgnTextStyle::GetSettings(*pActiveDgnFile);
    
    	LevelId lvId = pActiveModel->GetLevelCache().GetLevelByName(L"Default").GetLevelId();
    
    	Symbology symb;
    	symb.style = 0; symb.weight = 0; symb.color = 0;
    
    	DirectionFormatterPtr dirFormatter = DirectionFormatter::Create(*pActiveModel);
    
    	RotMatrixCR rMatrix1 = RotMatrix::FromIdentity();
    	RotMatrixCR rMatrix2 = RotMatrix::FromIdentity();
    
    	DimensionProperty *createDimdata = new DimensionProperty(pDimStyle, textStyle, symb, lvId, dirFormatter, rMatrix1, rMatrix2);
    
    	if (SUCCESS != DimensionHandler::CreateDimensionElement(dimEeh, *createDimdata, DimensionType::SizeArrow, true, *pActiveModel))
    	{
    		return;
    	}
    
    	//------ Insert Assoc Points
    	AssocPoint assocPt1, assocPt2;
    	AssociativePoint::InitKeypoint(assocPt1, 0, 2, 0, 1);
    	AssociativePoint::SetRoot(assocPt1, lineEeh.GetElementId(), 0);
    	AssociativePoint::InitKeypoint(assocPt2, 1, 2, 0, 1);
    	AssociativePoint::SetRoot(assocPt2, lineEeh.GetElementId(), 0);
    	IDimensionEdit* iDimEdit = dynamic_cast<IDimensionEdit*>(&dimEeh.GetHandler());
    	iDimEdit->InsertPoint(dimEeh, &pt1, &assocPt1, *pDimStyle, -1);
    	iDimEdit->InsertPoint(dimEeh, &pt2, &assocPt2, *pDimStyle, -1);
    
    	iDimEdit->SetHeight(dimEeh, g_1mu);
    	iDimEdit->SetRotationMatrix(dimEeh, RotMatrix::FromIdentity());
    
    	if (dimEeh.IsValid())
    	{
    		dimEeh.AddToModel();
    	}
    }



    Answer Verified By: Andy 

  • 符老师   本特利不会学百度   要给钱才能搜索吧Scream

  • 哈哈,那不会的。Bentley还是很有节操的。主要是购买的这个Teligent社区平台的搜索功能不是很给力。