![]() |
【转帖】[求助]如何获取用insert插入的属性块的各属性值(块名已知)
[求助]如何获取用insert插入的属性块的各属性值(块名已知)
[求助]如何获取用insert插入的属性块的各属性值(块名已知) 如何获取用insert插入的属性块的各属性值(块名已知) 这是一本书中的例子,每一行代码的例子我还不太懂,你自己看看吧.其中包括插入块的代码. void insrtblk() { char blkname[50]; acdbdatabase *pcurdb; acdbblocktable *pblktable; acdbblocktablerecord *pblktablerecord; acdbblocktablerecord *pblkdefrecord; acdbblockreference *pinsrtobj; acdbentity *pent; acdbblocktablerecorditerator *piterator; acdbattributedefinition *pattdef; acdbattribute *patt; acdbobjectid blkid; acdbobjectid insrtid; char *ptagprompt; acgepoint3d inspt; acgepoint3d basept; int retcode; retcode = acedgetstring(0, "\nenter block name: ", blkname); if(retcode != rtnorm || blkname[0] == '\0') { acutprintf("\ninvalid block name."); return; } pcurdb = acdbhostapplicationservices()->workingdatabase(); // check to see if the block table // has blkname pcurdb->getblocktable(pblktable, acdb::kforread); if(!pblktable->has(blkname)) { acutprintf("\nblock definition %s not found. ", blkname); pblktable->close(); return; } // get the acdbobjectid of the block // definition. pblktable->getat(blkname, blkid); pblktable->getat(acdb_model_space, pblktablerecord, acdb::kforwrite); pblktable->close(); acedinitget(rsg_nonull, null); acedgetpoint(null, "\npick insertion point: ", asdblarray(inspt)); pinsrtobj = new acdbblockreference(inspt, blkid); // here is where you can set scale, rotation and other // properties to the block entity. if you want to // see the acdbblockreference class for more details. pblktablerecord->appendacdbentity(insrtid, pinsrtobj); acdbopenobject(pblkdefrecord, blkid, acdb::kforread); // now check to see if the block definition // has attributes. if it does we will add // a block table record iterator to step through // the entities and find the attribute definitions. if(pblkdefrecord->hasattributedefinitions()) { pblkdefrecord->newiterator(piterator); for(piterator->start(); !piterator->done(); piterator->step()) { piterator->getentity(pent, acdb::kforread); // check to see if the entity is an // attribute definition. pattdef = acdbattributedefinition::cast(pent); if(pattdef != null && !pattdef->isconstant()) { // if it is and its not constant // create a new attribute patt = new acdbattribute(); // setpropertiesfrom will copy // color, layer, linetype,linetype scale and // visibility. patt->setpropertiesfrom(pattdef); // setup more properties from the attribute // definition patt->setinvisible(pattdef->isinvisible()); basept = pattdef->position(); basept += pinsrtobj->position().asvector(); patt->setposition(basept); patt->setheight(pattdef->height()); patt->setrotation(pattdef->rotation()); // take note how we get the tag. ptagprompt = pattdef->tag(); patt->settag(ptagprompt); free(ptagprompt); // normally you would prompt the user // and ask for input values. ptagprompt = pattdef->prompt(); acutprintf("%s%s", "\n", ptagprompt); free(ptagprompt); // the setfieldlength is not required // even though it is listed in the // documentation. patt->setfieldlength(25); // settextstring is the value the // attribute receives which would // normally be a user input value. patt->settextstring("this is a test"); pinsrtobj->appendattribute(patt); patt->close(); } pent->close(); }// for delete piterator; }// if has attribute definitions // note that we close the model space // block table record after we have added // our attributes. pblktablerecord->close(); pinsrtobj->close(); } |
所有的时间均为北京时间。 现在的时间是 03:13 PM. |