![]() |
【转帖】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 |
所有的时间均为北京时间。 现在的时间是 05:48 PM. |