插入块并分解

/************************************************************************/
/*
 插入块并分解
*/
/************************************************************************/
void CTrimeDraw::SetOutDwg(ads_point Pt)
{
 CString sFileName=GetCurPath()+_T("\\分图模板1.dwg");
 AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
 Acad::ErrorStatus es=pNewDb->readDwgFile(sFileName , _SH_DENYNO,false);
 if (es!=Acad::eOk)
 {
  acutPrintf(_T("\nThe file %s cannot be opend"),sFileName);
  return;
 }
 AcDbDatabase *pDb;
 pDb =acdbHostApplicationServices ()->workingDatabase ();
 CString pBlockName="TestBlock";
 AcDbObjectId blockId;
 if((es=pDb->insert(blockId, pBlockName,pNewDb, true))==Acad::eOk)
 {
  acutPrintf(_T("\ninsert ok\n"));
 }
 else
 {
  AfxMessageBox(_T("Insert failed"));
  delete pNewDb;
  return;
 }
 delete pNewDb;
 acedCommand(RTSTR, _T("insert"),
  RTSTR, _T("TestBlock"),
  RTPOINT, Pt,
  RTSTR, _T("1"),
  RTSTR, _T("1"),
  RTSTR, _T("0"),
  RTNONE);
 acdbHostApplicationServices()->setWorkingDatabase(pDb);
 //分解
 acedCommand(RTSTR, _T("explode"),
  RTSTR, _T("L"),
  0);
 /*
 // 获得当前数据库的块表
 AcDbBlockTable *pBlkTbl;
 acdbHostApplicationServices()->workingDatabase()
  ->getBlockTable(pBlkTbl, AcDb::kForWrite);
 // 查找用户指定的块定义是否存在
 CString strBlkDef;
 strBlkDef.Format(_T("%s"), _T("TestBlock"));
 if (!pBlkTbl->has(strBlkDef))
 {
  acutPrintf(_T("\n当前图形中未包含指定名称的块定义!"));
  pBlkTbl->close();
  return;
 }
 // 获得用户指定的块表记录
 AcDbObjectId blkDefId;
 pBlkTbl->getAt(strBlkDef, blkDefId);
 // 创建块参照对象
 AcDbBlockReference *pBlkRef = new AcDbBlockReference(Pt,blkDefId);
 // 将块参照添加到模型空间
 AcDbBlockTableRecord *pBlkTblRcd;
 pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd,
  AcDb::kForWrite);
 AcDbObjectId entId;
 pBlkTblRcd->appendAcDbEntity(entId, pBlkRef);
 // 关闭数据库的对象
 pBlkTblRcd->close();
 pBlkRef->close();
 pBlkTbl->close();
 */
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 我们可以使用Lisp函数来实现CAD插入并炸开的功能,例如(defun insert-block () (destructuring-bind (x y block) (get-block-data) (dotimes (i block-width) (dotimes (j block-height) (let ((point (make-point x (+ i j)))) (insert-point point)))))) ### 回答2: CAD插入并且炸开的lisp是一种用于CAD软件中的自动化处理程序。该程序基于LISP语言开发,通过调用CAD软件的API函数来完成特定的任务。 最常见的应用是插入并将其炸开。在CAD软件中,是一组对象的集合,可以被重复使用和编辑。插入意味着将作为整体插入到绘图中的特定位置。炸开则是指将插入分解为其组成的各个对象,以便对其进行进一步的编辑和修改。 使用CAD插入并且炸开的lisp可以帮助提高绘图效率和精度。通过编写一个自定义的lisp程序,可以将插入和炸开的操作封装为一个命令,只需简单地调用该命令,即可快速完成这一任务。 该lisp程序的实现需要考虑以下几个方面: 1. 获取用户输入:程序需要获取用户选择的插入位置。可以通过调用CAD软件的选择函数和指定插入点的函数来实现。 2. 插入:程序需要将选中的插入到指定位置。可以通过调用CAD软件的插入函数来实现。插入点的坐标可以在第一步中获取到。 3. 炸开:程序需要将插入炸开,即将其分解为各个组成对象。可以通过调用CAD软件的炸开函数来实现。 4. 返回结果:程序需要将结果返回给用户。可以通过弹出消息框或在命令行中显示结果来实现。 通过使用CAD插入并且炸开的lisp,用户可以简化复杂的绘图操作,提高生产效率,并且保证绘图的准确性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzia72

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值