高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】entity and material
entity and material
entity and material
hello,
i am trying to find the entity materials in order to get the entity textures.
as i have read, there is 2 cases, according to the version of the dwg file (<= 2006 and >= 2007).
1- i would like to have some advices concerning the acad<=2006 materials, there is no samples using them (i think),
2- for all the entities of a acad>=2007 file, i get a material. if the entity has in fact no material, the gotten material name is "bylayer" (dwg_entity->material()), and if the entity has an actual material (galvanized steel, for example) i got the exact material name. is there is a way to distinguish these two kinds of material ("bylayer" materials and actual materials)?
thank you very very much for your help
guilhem
i have the code:
code:
/* i is the blocktableiterrator */
oddbentityptr dwg_entity = i->objectid().safeopenobject()
/* autocad <= 2006 materials */
odresbufptr ave_material_res = dwg_entity->xdata (dd_t("ave_entity_material"));
if (! ave_material_res.isnull()) {
/* something to do here */
}
/* autocad >= 2007 materials */
oddbmaterialptr dwg_material = dwg_entity->materialid().safeopenobject();
if (! dwg_material.isnull()) {
/* something to do here */
}
1. sample using ave materials is odaveex
2. newly created ac2007+ drawing contains 3 "special" materials: bylayer, byblock and global.
by default entities are created with bylayer material (like bylayer line type).
oddbdatabase has functions
bylayermaterialid(), byblockmaterialid(), globalmaterialid()
sergey slezkin
hello sergey,
thank very much for your reply.
just one thing: what is the priority of the materials (does bylayer materials override the byblock materials) ?
guilhem
byblock and bylayer materials work exactly the same as other properties (line type, line weight, color..)
what do you mean by overriding? entity can have bylayer or byblock material but not both ...
sergey slezkin
sergey,
ok, an entity can only have one material...
but does:
oddbmaterialptr dwg_material = dwg_entity->materialid().safeopenobject();
provides one of three kinds of materials (layer, block, global) ?
many thanks again!
guilhem
it provides the material entity has. it may be bylayer, byblock, global, or any other existing in material dictionary.
for old drawings material dictionary may be empty and entity may have null material id.
sergey slezkin
ok, fine!
thank you sergey
|