快速插入目录图档下图块
快速插入目录图档下图块void insertblc(CString blcname,double x,double y,double z,double sf_x,double sf_y,double sf_z,double blcRotation)
{
if(blcname.Trim().GetLength()<1)return;//modified by yzh 20080901
//if(blcname==p)return;//modified by yzh 20090117
// TODO: Add your control notification handler code here
acDocManager->lockDocument(curDoc());
AcDbObjectId blockId; //要插入的块的Id值
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable,AcDb::kForRead);
//pBlockTable->getAt(blcname,blockId,AcDb::kForRead);//根据块名获得要插入的块的ID值
if ( pBlockTable->getAt(blcname,blockId,AcDb::kForRead) != Acad::eOk )
acutPrintf(L"\n块名%s不存在!",blcname);
AcDbBlockReference *pBlkRef=new AcDbBlockReference;//插入块实质是插入块的引用
pBlkRef->setBlockTableRecord(blockId);//指定所引用的图块表记录的对象ID
resbuf to,from;
from.restype=RTSHORT;//插入图块要进行用户坐标与世界坐标的转换
from.resval.rint=1;//UCS
to.restype=RTSHORT;
to.resval.rint=0;//WCS
AcGeVector3d normal(0.0,0.0,0.0);
acedTrans(&(normal.x),&from,&to,Adesk::kTrue,&(normal.x));//转换函数
AcGePoint3d basePoint(x,y,z);//指定的插入点(可以根据需要输入)
//acedGetPoint(NULL,"\\nEnter insertion point:",asDblArray(basePoint));
double sfx = pBlkRef->scaleFactors().sx;
double sfy = pBlkRef->scaleFactors().sy;
double sfz = pBlkRef->scaleFactors().sz;
pBlkRef->setScaleFactors(AcGeScale3d(sfx*sf_x, sfy*sf_y, sfz*sf_z));//后加改变块比例
pBlkRef->setPosition(basePoint);
double ro=blcRotation/180*3.1415926;
/*
360度=2*3.1415926=6.2831852弧度了?
180度=1*3.1415926=3.1415926弧度了?
90度=1/2*3.1415926=1.5707963弧度了?
*/
pBlkRef->setRotation(ro);
pBlkRef->setNormal(normal);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId newEntId;
pBlockTableRecord->appendAcDbEntity(newEntId,pBlkRef);
pBlockTableRecord->close();
pBlkRef->close();
acDocManager->lockDocument(curDoc());
}
(defun c:KK ()
(setvar "cmdecho" 0) ;指令执行过程不响应
(PRINC "\n【开心CAD外挂】---插入图块(目录下)功能")(PRINC)
(command "insert" "d:\\33.dwg" "0,0" "1" "" "")
;(command "insert" "E:\\33.dwg" "0,0" "1" "" "");此行可添加图档所在位置(也可加行)
(entdel(entlast))
(setq a (getstring "\n输入块名:")
a (strcat "*" a)
)
(WHILE(setq p1 (getpoint "\n插入点:"))
(command "insert" a p1 "" ""))
(princ)
)
像这种能否帮我改一下,直接插入单一图块,无需输入块名? 无人能解? http://bbs.mjtd.com/thread-93018-1-1.html
or
Ref:http://www.google.com/search?as_q=setq++%E5%BF%AB%E9%80%9F%E6%8F%92%E5%85%A5+%E5%9B%BE%E5%9D%97+&as_epq=%E7%9B%AE%E5%BD%95&as_oq=&as_eq=&as_nlo=&as_nhi=&lr=&cr=&as_qdr=all&as_sitesearch=http%3A%2F%2Fbbs.mjtd.com 帮我改一下,直接插入单一图块,无需输入块名?我只有一个图框要这样插入。
页:
[1]