如何用Rust获取Autocad属性的值?

ppcbkaq5  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(209)

我使用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没有返回任何东西,而且我知道,事实上,这个属性确实有一个值。所以,如果有人知道是什么导致了这个问题,请告诉我。

jk9hmnmh

jk9hmnmh1#

与您最近的另一个问题类似,您的代码正在检查在块 definition 中找到的属性 definitions,而不是由块 reference 持有的属性 references
用户需要遍历布局块中包含的对象(如果需要嵌套块参照,还需要遍历块定义),并测试是否存在块 * 参照 * 对象(AcDbBlockReference),然后可以调用GetAttributes方法以获取该块包含的属性参照集。

相关问题