我使用Rust已经有一段时间了,但我仍然没有找到任何与我想要做的事情类似的东西。我想遍历一个绘图中的块,找到一个具有特定属性的特定块。下面是代码:
#![allow(non_snake_case)]
#![allow(unused_imports)]
use dxf::entities::*;
use dxf::Drawing;
use std::any::{Any, TypeId};
use std::collections::HashMap;
use std::fmt;
#[allow(dead_code)]
fn main() {
let mut omap = HashMap::new();
let mut count: u16 = 0;
// abre o arquivo
let desenho = Drawing::load_file("file .dxf").unwrap();
// itera sobre as entidades do arquivo
let mut aux: String = String::new();
for block in desenho.blocks() {
if block.name == String::from("FL01") {
count += 1;
for e in block.entities.iter() {
match e.specific {
EntityType::AttributeDefinition(ref attribute) => {
if attribute.text_tag == String::from("TIPO") {
aux.push_str(&String::from("-"));
omap.insert(attribute.text_tag.to_string(), attribute.value.clone());
println!("{}", attribute.value.clone());
} else if attribute.text_tag == String::from("SEQ-1") {
aux.push_str(&attribute.prompt);
aux.push_str(&String::from("-"));
omap.insert(
attribute.text_tag.to_string(),
attribute.value.to_string(),
);
}
}
_ => (),
};
}
}
}
println!("{:?}, Quantidade:{}", omap, count);
}
attribute.value
没有返回任何东西,而且我知道,事实上,这个属性确实有一个值。所以,如果有人知道是什么导致了这个问题,请告诉我。
1条答案
按热度按时间jk9hmnmh1#
与您最近的另一个问题类似,您的代码正在检查在块 definition 中找到的属性 definitions,而不是由块 reference 持有的属性 references。
用户需要遍历布局块中包含的对象(如果需要嵌套块参照,还需要遍历块定义),并测试是否存在块 * 参照 * 对象(
AcDbBlockReference
),然后可以调用GetAttributes
方法以获取该块包含的属性参照集。