天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 31|回复: 0

obejectarx ssget text 带s字符

[复制链接]
  • TA的每日心情
    开心
    前天 06:18
  • 签到天数: 49 天

    [LV.5]常住居民I

    185

    主题

    150

    回帖

    1695

    积分

    管理员

    积分
    1695
    发表于 2024-4-19 14:06:11 | 显示全部楼层 |阅读模式
    1. 关于在ObjectARX中使用`acedSSGet`进行图形选择时,针对文本(Text)对象且其内容包含特定字符(如“s”字符)的操作,您可能希望实现如下功能:

    2. 1. **用户交互式选择**:通过`acedSSGet`命令让用户在AutoCAD界面中选择文本对象。
    3. 2. **筛选条件**:限制所选文本对象的内容必须包含指定字符,即“s”。

    4. 虽然`acedSSGet`本身并不直接支持根据文本内容进行筛选,但可以通过以下两种方式来实现这一需求:

    5. ### 方法一:后处理选择集

    6. 1. **常规选择**:首先使用不带内容筛选的`acedSSGet`命令让用户选择文本对象。

    7.    ```cpp
    8.    ads_name ss;
    9.    acedSSGet(NULL, NULL, NULL, NULL, ss);
    10.    ```

    11. 2. **遍历选择集**:接着遍历选择集中的每个对象,检查它们是否为文本对象(`AcDbText`类),并且其内容是否包含指定字符。

    12.    ```cpp
    13.    AcDbObjectIdArray objIds;
    14.    acdbGetAdsNamesFromSS(ss, objIds);

    15.    AcDbText* pText = NULL;
    16.    for (const auto& id : objIds)
    17.    {
    18.        if (acdbOpenAcDbObject((AcDbObject*&)pText, id, AcDb::kForRead) == Acad::eOk)
    19.        {
    20.            const char* content = pText->textString();
    21.            if (strstr(content, "s") != NULL) // 或者使用其他字符串搜索函数,如std::string::find等
    22.            {
    23.                // 处理符合条件的文本对象
    24.            }
    25.            pText->close();
    26.        }
    27.    }
    28.    ```

    29. ### 方法二:自定义选择过滤器

    30. 1. **实现自定义选择过滤器**:创建一个继承自`AcRxFilter`的类,重载`isMember()`方法以检查文本对象的内容是否包含“s”字符。

    31.    ```cpp
    32.    class TextContentFilter : public AcRxFilter
    33.    {
    34.    public:
    35.        virtual Adesk::Boolean isMember(const AcRxClass*, const AcDbObject* pObj) override
    36.        {
    37.            AcDbText* pText = AcDbText::cast(pObj);
    38.            if (pText)
    39.            {
    40.                const char* content = pText->textString();
    41.                return (strstr(content, "s") != NULL);
    42.            }
    43.            return Adesk::kFalse;
    44.        }
    45.    };
    46.    ```

    47. 2. **使用自定义过滤器进行选择**:调用`acedSSGet`时传入自定义过滤器的实例。

    48.    ```cpp
    49.    TextContentFilter filter;
    50.    ads_name ss;
    51.    acedSSGet(NULL, NULL, NULL, &filter, ss);
    52.    ```

    53.    这样,用户在选择时,只有内容包含“s”字符的文本对象会被纳入选择集。

    54. 采用上述任一方法,您都可以在ObjectARX程序中实现根据文本内容包含特定字符(如“s”)来筛选用户选择的文本对象。第一种方法更适用于简单场景或临时需求,而第二种方法提供了更灵活、更高效的内置筛选机制,尤其适合频繁或复杂的选择条件。
    复制代码

     

     

     

     

    obejectarx ssget text 带s字符
    哎...膜结构车棚,签到来了1...
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-5-13 00:43 , Processed in 0.061277 second(s), 21 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表