乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 18|回复: 0

求助bojectarx高手关于jig类画固定长度的多段线

[复制链接]

1

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2010-11-29 11:41:00 | 显示全部楼层 |阅读模式
jig头文件:class CDrawESL_Jig : public AcEdJig  
{
public:
CDrawESL_Jig();
CDrawESL_Jig(AcDbPolyline *pPLine);
virtual ~CDrawESL_Jig();
//设置匀坡线长度
void SetLength(double rLength){ m_rESLLength = rLength;} //开始拖动
DragStatus StartDrag(); //获取点坐标数组
void GetPoints(AcGePoint3dArray & arPoints) const; //采样函数
    virtual DragStatus sampler();  //更新实体绘图
    virtual Adesk::Boolean  update();    virtual AcDbEntity* entity() const{return m_pPLine;}
private:
//匀坡线长度
double m_rESLLength;
AcDbPolyline *m_pPLine;
AcGePoint3d m_CurPoint;
AcGePoint3dArray m_Points;
};jig类的代码:CDrawESL_Jig::CDrawESL_Jig()
{
m_pPLine = new AcDbPolyline(); m_rESLLength = 10;
}CDrawESL_Jig::CDrawESL_Jig(AcDbPolyline *pPLine)
{
m_pPLine = pPLine; //从AcDbPolyline *实体中提取点坐标, 写入m_Points
int i;
AcGePoint3d GPt;
for (i = 0; i numVerts(); i++)
{
  m_pPLine->getPointAt(i, GPt);
  m_Points.append(GPt);
}
// m_Points.append(AcGePoint3d(0.0,0.0,0.0));
}CDrawESL_Jig::~CDrawESL_Jig()
{
if (m_pPLine != NULL) delete m_pPLine;
m_pPLine = NULL;
}//获取点坐标数组
void CDrawESL_Jig::GetPoints(AcGePoint3dArray & arPoints) const
{
while (arPoints.length() != 0)
  arPoints.removeFirst(); arPoints.append(m_Points); return;
}//***************开始拖动***************
AcEdJig::DragStatus CDrawESL_Jig::StartDrag()
{
if (m_Points.length() == 0)
{
  setDispPrompt(_T("\n请指定第一个点:"));
}
else
{
  setDispPrompt(_T("\n请指定下一个点:"));
} AcEdJig::DragStatus Sta = drag();
if (Sta == AcEdJig::kNormal)
{
  m_Points.append(m_CurPoint);
  
}
return Sta;
}//***************采样函数***************
AcEdJig::DragStatus CDrawESL_Jig::sampler()
{
setUserInputControls( ( UserInputControls )
        ( kNullResponseAccepted | kAccept3dCoordinates | //kGovernedByOrthoMode  |
  kDontUpdateLastPoint | kNoZeroResponseAccepted));
DragStatus stat;
AcGePoint3d CurPoint;//  if (m_Points.length() == 0)
//   stat = acquirePoint(CurPoint);
//  else
//  {
//  stat = acquirePoint(CurPoint, m_Points[m_Points.length() - 1]);
//   }
stat = acquirePoint(CurPoint); //判断鼠标是否移动
if (stat == AcEdJig::kNormal)
{
  if (m_CurPoint.distanceTo(CurPoint) setPointAt(m_Points.length(), AcGePoint2d(resultPt[X], resultPt[Y]));
} return Adesk::kTrue;
}
绘制图像的函数代码://消息处理函数---绘制按钮
void CDialog_DrawESL::OnButtonDraw()
{
// TODO: Add your control notification handler code here
BeginEditorCommand(); int i;
CDrawESL_Jig *pPLineJig = NULL;
AcEdJig::DragStatus ds;
AcDbObjectId EntId; do {
// pPline = NULL;
  AcDbPolyline *pPline = NULL;  if (pPLineJig == NULL)
  {
   pPLineJig = new CDrawESL_Jig();
   pPLineJig->SetLength(m_rESLLength);
  }
  else
  {
   AcGePoint3dArray arPoints;
   pPLineJig->GetPoints(arPoints);
   if (pPline != NULL) delete pPline;
   pPline = new AcDbPolyline(arPoints.length());   for (i = 0; i addVertexAt(i, AcGePoint2d(arPoints.x, arPoints.y));
   }
   delete pPLineJig;
   pPLineJig = new CDrawESL_Jig(pPline);
   pPLineJig->SetLength(m_rESLLength);
  }
  ds = pPLineJig->StartDrag();
  ads_printf("\nDragStatus = %d", ds);
  
  if (ds != AcEdJig::kNormal)
  {
   CompleteEditorCommand();
   delete pPLineJig;
   return;
  }
}while (ds != AcEdJig::kCancel); delete pPLineJig; CompleteEditorCommand();
} 其中多段线的长度是由一个编辑框传入的数值。可是这个程序最后我发现不知道怎么把画出的多段线添加进数据库,无法显示出来。而且我想要的效果是鼠标点一个点,拖动的虚拟线并不是到鼠标当前点,只是到我求出来的resultPt请高手帮我看一下错在什么地方。
附件中是我建立的工程

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-5-1 07:29 , Processed in 0.634539 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表