- UID
- 737382
- 积分
- 386
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2014-9-13
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2017-8-3 12:09:24
|
显示全部楼层
本帖最后由 why1025 于 2017-8-3 13:20 编辑
 - #include "mulentityjig.h"
- #include "Steel.h"
- CMulEntity::CMulEntity(AcDbObjectIdArray ObiectIds,const AcGePoint3d startPoint, double width, double height,bool isRotated/*=true*/,double Scale/*=1.0*/)
- {
- m_startPoint = startPoint;
- //m_endPoint = endPoint;
- m_width = width;
- m_height = height;
- m_bPosition=3;
- m_bisRotated=isRotated;
- m_bScale=Scale;
- m_bLastPoint=true;
- m_ObiectIdsArr=ObiectIds;
-
-
-
- for (int i = 0; i <ObiectIds.length(); i++)
- {
- AcDbEntity *pEntity=NULL;
- AcDbPolyline * pPoly=NULL;
- AcDbLine *pLine=NULL;
- AcDbText *pText=NULL;
- Acad::ErrorStatus es=acdbOpenObject(pEntity,ObiectIds[i],AcDb::kForWrite);
- if (es==Acad::eOk)
- {
- if (pEntity->isKindOf(AcDbLine::desc()))
- {
- pLine=AcDbLine::cast(pEntity);
- m_LineArr.append(pLine);
- }else if (pEntity->isKindOf(AcDbPolyline::desc()))
- {
- pPoly=AcDbPolyline::cast(pEntity);
- m_PolylineArr.append(pPoly);
- }
- else if (pEntity->isKindOf(AcDbText::desc()))
- {
- pText=AcDbText::cast(pEntity);
- m_TextArr.append(pText);
- }else
- {
- }
- }
-
-
- }
-
-
-
-
-
- }
- CMulEntity::~CMulEntity(void)
- {
- /*for (int i = 0; i < m_PolylineArr.length(); i++)
- {
- delete m_PolylineArr[i];
- }
- for (int i = 0; i < m_LineArr.length(); i++)
- {
- delete m_LineArr[i];
- }
- for (int i = 0; i < m_TextArr.length(); i++)
- {
- delete m_TextArr[i];
- }*/
- }
- Adesk::Boolean CMulEntity::subWorldDraw( AcGiWorldDraw* mode )
- {
- for (int i = 0; i < m_PolylineArr.length(); i++)
- {
- mode ->geometry().draw(m_PolylineArr[i]);
- }
- for (int i = 0; i < m_TextArr.length(); i++)
- {
- mode ->geometry().draw(m_TextArr[i]);
- }
- for (int i = 0; i < m_LineArr.length(); i++)
- {
- mode ->geometry().draw(m_LineArr[i]);
- }
- //注意,尺寸在这个重画函数里就会崩溃
- /*for (int i = 0; i < m_RotatedDimArr.length(); i++)
- {
- mode ->geometry().draw(m_RotatedDimArr[i]);
- }*/
- return (AcDbEntity::subWorldDraw (mode)) ;
- }
- void CMulEntity::SetEndPoint( const AcGePoint3d &pt )
- {
- // 这句代码能引发worldDraw函数的调用
- //assertWriteEnabled();
- if (m_PolylineArr.length() <= 0&&m_LineArr.length() <= 0&&m_TextArr.length() <= 0)return;
- m_endPoint = pt;
- AcGeVector2d v1=CSteel::ToPoint2d(m_endPoint)-CSteel::ToPoint2d(m_startPoint);
- AcGeVector3d v3;
- if (m_bLastPoint)
- {
- m_lastPoint = pt;
- v3=pt-m_startPoint;;
- m_bLastPoint=false;
- }else{
- v3=pt-m_lastPoint;
- }
-
- double ang1=v1.angle();
- AcGeMatrix3d xform;
- AcGeVector3d vec(0,0,1);
-
- if (m_bisRotated)
- {
- acutPrintf(_T("%d"),m_bPosition);
- if (ang1<=0.75*CSteel::PI()&&ang1>=0.25*CSteel::PI())
- {
- }else if (ang1<=1.25*CSteel::PI()&&ang1>0.75*CSteel::PI())
- {
-
- }else if (ang1<=1.75*CSteel::PI()&&ang1>1.25*CSteel::PI())
- {
-
- }else{
- }
- }
-
-
-
-
- }
- void CMulEntity::appendToCurrentSpace()
- {
- AcDbDatabase *pDb=acdbCurDwg();
- AcDbBlockTable *pBlockTable;
- pDb ->getBlockTable(pBlockTable, AcDb::kForRead);
- AcDbBlockTableRecord *pBlkRec;
- if (pDb ->tilemode())
- {
- pBlockTable ->getAt(ACDB_MODEL_SPACE, pBlkRec, AcDb::kForWrite);
- }
- else
- {
- pBlockTable ->getAt(ACDB_PAPER_SPACE, pBlkRec, AcDb::kForWrite);
- }
- pBlockTable ->close();
- for (int i = 0; i < m_PolylineArr.length(); i++)
- {
- AcDbPolyline * pPoly = m_PolylineArr.at(i);
- if (pPoly!= NULL)
- {
- pPoly ->close();
- }
- else{
- delete pPoly;
- }
- }
- for (int i = 0; i < m_TextArr.length(); i++)
- {
- AcDbText * pText = m_TextArr.at(i);
- if (pText!= NULL)
- {
- pText ->close();
- }
- else{
- delete pText;
- }
- }
- for (int i = 0; i < m_LineArr.length(); i++)
- {
- AcDbLine * pLine = m_LineArr.at(i);
-
- if (pLine!= NULL)
- {
- pLine ->close();
- }
- else{
- delete pLine;
- }
- }
-
- pBlkRec ->close();
- m_PolylineArr.removeAll();
- m_TextArr.removeAll();
- m_LineArr.removeAll();
- }
- #include "mulentityjig.h"
- //CMulEntityJig::CMulEntityJig(void)
- //{
- //}
- //
- //CMulEntityJig::~CMulEntityJig(void)
- //{
- //}
- CMulEntityJig::CMulEntityJig(AcDbObjectIdArray ObiectIds,const AcGePoint3d startPoint, double width, double height,bool isRotated/*=true*/,double Scale/*=1.0*/) :
- m_ObiectIdsArr(ObiectIds), m_startPoint(startPoint),m_width(width), m_height(height), m_bisRotated(isRotated), m_bScale(Scale) { }
- AcEdJig::DragStatus CMulEntityJig::sampler()
- { setUserInputControls((UserInputControls)
- (AcEdJig::kAccept3dCoordinates
- | AcEdJig::kNoNegativeResponseAccepted
- | AcEdJig::kNullResponseAccepted));
- static AcGePoint3d pointTemp;
- DragStatus stat = acquirePoint(m_curPoint);
- if (pointTemp != m_curPoint)
- {
- pointTemp = m_curPoint;
- }
- else if (stat == AcEdJig::kNormal)
- {
- return AcEdJig::kNoChange;
- }
- return stat;
- }
- Adesk::Boolean CMulEntityJig::update()
- {
- m_pEnt ->SetEndPoint(m_curPoint);
- return Adesk::kTrue;
- }
- AcDbEntity * CMulEntityJig::entity() const
- { return m_pEnt; }
- void CMulEntityJig::doIt( )
- {
- m_pEnt = new CMulEntity(m_ObiectIdsArr,m_startPoint, m_width, m_height,m_bisRotated,m_bScale); //这个构造参数不对
- setDispPrompt(_T("\n最终点: "));
- if (drag() == AcEdJig::kNormal)
- {
- m_pEnt ->appendToCurrentSpace();
- }
- delete m_pEnt;
- }
[/code] |
|