找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1389|回复: 7

[求助] jig中怎么用关键字

[复制链接]
发表于 2017-3-2 17:39:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
请问一下,jig在拖动的时候按下关键字,改变图形,我的本意是按下关键字k,改变m_pJigEnt的kqfx属性的值,然后在拖动出来的图形中体现出来,可是一按下k,程序就创建图形,然后结束了,kqfx所对应的图形式样也没变
AcEdJig::DragStatus CWinLmJig::sampler()
{
        setUserInputControls((UserInputControls)
                (AcEdJig::kAccept3dCoordinates
                | AcEdJig::kNoNegativeResponseAccepted
                | AcEdJig::kNullResponseAccepted));       

        AcEdJig::setKeywordList(TEXT("K"));
        // 一定要判断一下点是否发生了变化,否则update函数不停地被调用,实体反而不能被绘制出来
        static AcGePoint3d pointTemp;
        DragStatus stat = acquirePoint(m_curPoint);

        if (stat == AcEdJig::kKW1)
        {
                if (m_pJigEnt->kqfx="Right")
                        kqfx="Left";
                else
                        kqfx="Right";
        }

        if (pointTemp != m_curPoint)
        {       
                pointTemp = m_curPoint;
        }
        else if (stat == AcEdJig::kNormal)
        {
                return AcEdJig::kNoChange;
        }
       
        return stat;
}

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-3-2 17:57:30 | 显示全部楼层
本帖最后由 LoveArx 于 2017-3-2 18:29 编辑

1、你可以在你的  AcEdJig::kKW1 里面,加个打印语句,看看你输入关键字进这个里面来吗?

2、贴下你进一步的处理的代码


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 10:17:29 | 显示全部楼层
以下是WINlmJig.CPP的代码
#include "StdAfx.h"
#include "WINlmJig.h"

CWinLmJig::CWinLmJig(void)
{
        m_pJigEnt = NULL;
        m_intkqfx=1;
}

CWinLmJig::~CWinLmJig(void)
{
        if (m_pJigEnt)
        {
                delete m_pJigEnt;
                m_pJigEnt = NULL;
        }
}
bool CWinLmJig::doIt( const AcGePoint3d &startPoint, AcGePoint3d &endPoint)
{
        // 拖动之前:创建自定义实体
        if (m_pJigEnt != NULL)
        {
                delete m_pJigEnt;
                m_pJigEnt = NULL;
        }
        m_pJigEnt = new CWinLmJigEntity(startPoint, endPoint);
       
        // 执行拖动绘制
        CString prompt = TEXT("\n指定下一点: ");
        setDispPrompt(prompt);
        AcEdJig::DragStatus stat = drag();
       
        // 拖动之后:根据需要确定自己的处理方式
        bool bRet = false;
        if (stat == kNormal)
        {
                // 添加子实体到模型空间
                m_pJigEnt->PostToModelSpace();       
                bRet = true;
        }

        m_EntIds = m_pJigEnt->GetEntIds();
        delete m_pJigEnt;
        m_pJigEnt = NULL;

        return bRet;
}

AcEdJig::DragStatus CWinLmJig::sampler()
{
        setUserInputControls((UserInputControls)
                (AcEdJig::kAccept3dCoordinates
                | AcEdJig::kNoNegativeResponseAccepted
                | AcEdJig::kNullResponseAccepted));       

        AcEdJig::setKeywordList(TEXT("K"));
        // 一定要判断一下点是否发生了变化,否则update函数不停地被调用,实体反而不能被绘制出来
        static AcGePoint3d pointTemp;
        DragStatus stat = acquirePoint(m_curPoint);
       
        if (pointTemp != m_curPoint)
        {       
                pointTemp = m_curPoint;
        }
        else if (stat == AcEdJig::kKW1)
        {
                acutPrintf(TEXT("KK"));
                m_intkqfx=1;
        }
        else if (stat == AcEdJig::kNormal)
        {
                return AcEdJig::kNoChange;
        }
       
        return stat;
}

Adesk::Boolean CWinLmJig::update()
{
        m_pJigEnt->SetEndPoint(m_curPoint,m_intkqfx);

        return Adesk::kTrue;
}

AcDbEntity* CWinLmJig::entity() const
{
        return m_pJigEnt;
}

AcDbObjectIdArray CWinLmJig::GetEntIds()
{
        return m_EntIds;
}

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 10:20:04 | 显示全部楼层

我按您说的,加了个提示,按下K关键字以后进入到了else if (stat == AcEdJig::kKW1)        {
                acutPrintf(TEXT("KK"));
                m_intkqfx=1;
        }
这个里面


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 10:22:15 | 显示全部楼层
要拖动的图形类的声明
class CWinLmJigEntity :
        public AcDbEntity
{
public:
        CWinLmJigEntity(const AcGePoint3d &startPoint,const AcGePoint3d &endPoint);
public:
        ~CWinLmJigEntity(void);

        // 自定义实体的绘制函数
        virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode);

        // 设置终点的位置
        void SetEndPoint(const AcGePoint3d &pt,int intkqfx);

        // 将图形添加到模型空间
        void PostToModelSpace();

        // 获得添加的块参照集合
        AcDbObjectIdArray GetEntIds();
       
        double w;
        double h;
        bool drawdkline;
        CString m_kqfx;
private:
        // 绘制实体或添加到模型空间
        void DrawOrAddSubEnts(AcGiWorldDraw* mode);
        void SetBasePoint_h_w();
private:
        AcGePoint3d m_startPoint,m_endPoint;//拖动的起点、终点
        AcGePoint3d m_basePoint;//绘图的基准点
        AcDbObjectIdArray m_EntIds;//各子图形的Id集合

private:
        //绘制立面窗套的函数
        void DrawCCtb(AcGiWorldDraw* mode);
        //绘制立面窗扇的函数
        void DrawShanDS(AcGiWorldDraw* mode);
};
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-3-3 10:56:42 | 显示全部楼层

你取点,和输入关键字,都应该是一次DRAG的结束,stat状态返回给doit里面,你试试在 doit里面,做成循环,判断不是取点结束,就继续循环拖动,直到取点后退出拖动。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-4 15:09:45 | 显示全部楼层

谢谢,我按你说的加入循环搞定了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-28 19:10 , Processed in 0.285585 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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