天气与日历 切换到窄版

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

acedGrread配合Jig在动态拖动中捕捉点并获取坐标

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
项目场景:
提示:Jig配合acedGrread实现捕捉与坐标获取:
例如:acedGrread配合Jig在动态拖动中捕捉点并获取坐标

问题描述:
提示:基础的acedGrread在鼠标移动过程中没有捕捉功能,仅仅可获得鼠标信息,不能进行特殊点捕捉:
例如:基础的acedGrread在鼠标移动过程中没有捕捉功能,仅仅可获得鼠标信息,不能进行特殊点捕捉:

@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget(); }
原因分析:
提示:acedGrread是鼠标的响应,过程占用,有点模式状态的感觉:
例如:acedGrread是鼠标的响应,过程占用,有点模式状态的感觉,这种状态下,CAD的捕捉将失效。

解决方案:
提示:采用JIG:
例如:采用JIG的方式来进行捕捉,配合acedGrread来获得鼠标信息,可以很完美的解决问题。

以下上源码:

#pragma once
#include <dbjig.h>
class CDrawXPXJig :
    public AcEdJig
{
public:
    CDrawXPXJig();
    virtual ~CDrawXPXJig();
    //外部调用的函数,一般用于Jig的初始化
    bool doIt(const AcGePoint3d &centerPoint, AcDbObjectId& polyId, AcGePoint3d SPoint, AcGePoint3d EPoint);
    //此函数将被drag函数调用以获得用户输入
    virtual AcEdJig::DragStatus sampler();
    //对需要在拖动过程中发生变化的实体进行修改
    virtual Adesk::Boolean update();
    //指定了Jig所操作的对象
    virtual AcDbEntity* entity() const;
    AcGePoint2d ToPoint2d(const AcGePoint3d &point3d);
    void Erase(AcDbObjectId entId);
    void SetColor(AcDbObjectId entId, int colorIndex);
private:

    AcDbPolyline* m_pPoly; //拖动过程中动态变化的实体
    AcGePoint3d m_curPoint;  //储存用户光标移动时临时点的临时位置
    AcGePoint3d m_centerPoint; //正方形的中心点
};



#include "stdafx.h"
#include "CDrawXPXJig.h"
#include "BAS_DRAW_FUN1.h"
BAS_DRAW_FUN ob;
CDrawXPXJig::CDrawXPXJig()
{
    m_pPoly = NULL;
}


CDrawXPXJig::~CDrawXPXJig()
{
}
void CDrawXPXJig::SetColor(AcDbObjectId entId, int colorIndex)
{
    // 检测参数的有效性
    assert(colorIndex >= 0 && colorIndex <= 256);
    AcDbEntity *pEnt = NULL;
    if (acdbOpenObject(pEnt, entId, AcDb::kForWrite) == Acad::eOk)
    {
        pEnt->setColorIndex(colorIndex);
        pEnt->close();
    }
}

bool CDrawXPXJig::doIt(const AcGePoint3d ¢erPoint,AcDbObjectId &polyId, AcGePoint3d SPoint, AcGePoint3d EPoint)
{
    m_centerPoint = centerPoint;
    //拖动之前:将多段线创建出来
    m_pPoly = new AcDbPolyline();
    m_pPoly->addVertexAt(0, ToPoint2d(SPoint));
    m_pPoly->addVertexAt(1, ToPoint2d(centerPoint));
    m_pPoly->addVertexAt(2, ToPoint2d(EPoint));

   
    //进入拖动流程
   
    AcEdJig::DragStatus stat = drag();
    //拖动结束:函数返回部分
    if (stat == kNormal)
    {
        polyId = ob.AddEntityToDbs(m_pPoly);
        return true;
    }
    else
    {
        delete m_pPoly;
        return false;
    }
}

AcGePoint2d CDrawXPXJig::ToPoint2d(const AcGePoint3d &point3d)
{
    return AcGePoint2d(point3d.x, point3d.y);
}

//此函数将被drag函数调用以获得用户输入

AcEdJig::DragStatus CDrawXPXJig::sampler()
{
    setUserInputControls((UserInputControls)
        (/*AcEdJig::kAccept3dCoordinates|*/ AcEdJig::kNoNegativeResponseAccepted| AcEdJig::kNullResponseAccepted));
    //一定要判断一下点是否发生了变化,否则update函数不停地被调用,实体反而不能被绘制出来
    static AcGePoint3d pointTemp;
    DragStatus stat = acquirePoint(m_curPoint);
    if (pointTemp != m_curPoint)
    {
        pointTemp = m_curPoint;
    }
    else if (stat == AcEdJig::kNormal)
    {
        return AcEdJig::kNoChange;
    }
    return stat;
}

Adesk::Boolean CDrawXPXJig::update()
{
    //实现你的更新操作,在这里更新的是m_pPoly
    double dist = ToPoint2d(m_centerPoint).distanceTo(ToPoint2d(m_curPoint));
    m_pPoly->setPointAt(1, ToPoint2d(m_curPoint));
    /*for (int i = 0; i < 4; i++)
    {
        double angle = i * PI* 0.5 + PI*0.25;
        AcGePoint2d pt = PolarPoint(ToPoint2d(m_centerPoint), angle, dist);
        m_pPoly->setPointAt(i, pt);
    }*/
    return Adesk::kTrue;
}

//指定了Jig所操作的对象
AcDbEntity* CDrawXPXJig::entity() const
{
    return m_pPoly;
}

void CDrawXPXJig::Erase(AcDbObjectId entId)

{
    AcDbEntity *pEnt = NULL;
    if (acdbOpenObject(pEnt, entId, AcDb::kForWrite) == Acad::eOk)
    {
        pEnt->erase();
        pEnt->close();
    }
}





CDrawXPXJig jig;
        AcDbObjectId polyID;
        if (acedGrRead(track, &type, result) == RTCAN)//读取输入设备,RTCAN即按下了ESC键
            return;                               //track=1:以拖曳方式
        if (jig.doIt(asPnt3d(result->resval.rpoint), polyID, asPnt3d(OriSpt), asPnt3d(OriEpt)))
        {
            if (acedGrRead(track, &type, result) == RTCAN)//读取输入设备,RTCAN即按下了ESC键
                return;                               //track=1:以拖曳方式
            //成功创建之后,可以进行其他的修改
            pt[X] = result->resval.rpoint[X];
            pt[Y] = result->resval.rpoint[Y];
        }
        else
        {
            return;
        }

 

 

 

 

acedGrread配合Jig在动态拖动中捕捉点并获取坐标

该用户从未签到

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-7-28 09:28:43 | 显示全部楼层
  法拉利膜材作为一种高性能的建筑材料,在建筑、汽车及广告等多个领域有着广泛的应用。以下是对法拉利膜材型号、特点及优点的详细分析:
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223041uiqmeujen4jjj6zv.jpg[/img]
[b]一、法拉利膜材型号[/b]
法拉利膜材有多种型号,包括但不限于以下几种:1302 S2 Flexlight Advanced:这是一种高性能IV型柔性复合膜材,以其卓越的透光性、耐久性和易维护性而受到青睐。942、1202 S2、1002 S2、902 S2、1212 S2、912 S2:这些型号同样属于法拉利膜材系列,各自具有不同的特性和适用范围,但具体特点需根据具体型号进一步分析。需要注意的是,法拉利膜材的型号可能随着产品更新换代而有所变化,具体型号及其特性请参考最新产品资料。
[img=860,1255]http://www.mjgou.com/data/attachment/forum/202403/13/223254bbblwlbvbvsbwlsl.jpg[/img]
[b]二、法拉利膜材特点[/b]
法拉利膜材的特点主要体现在以下几个方面:
1、高强度与耐用性:法拉利膜材采用高强度材料制成,具有良好的抗拉强度和撕裂强度,能够承受较大的外力作用而不易破损。耐用性强,能够在恶劣气候条件下保持稳定的性能,延长使用寿命。
2、透光性与美观性:部分型号如1302 S2 Flexlight Advanced具有高透光性,能够在保持室内光线充足的同时,提供清晰的视野。膜材表面平整光滑,色彩丰富多样,能够满足不同建筑和装饰需求,提升整体美观性。
3、轻质与灵活性:法拉利膜材重量较轻,便于运输和安装,能够降低施工成本和时间。膜材具有一定的柔韧性,能够适应各种复杂形状和结构的设计要求。
4、环保与可回收性:法拉利膜材符合环保要求,部分材料可回收利用,减少了对环境的影响。
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223128owhn0099rrds5h5y.jpg[/img]
[b]三、法拉利膜材优点[/b]
法拉利膜材的优点主要体现在以下几个方面:
1、提升建筑性能:高强度与耐用性使得法拉利膜材能够提升建筑的稳定性和安全性,延长使用寿命。透光性与美观性使得建筑内部光线充足、视野开阔,同时提升整体美观度。
2、降低施工成本:轻质特性使得运输和安装成本降低,施工效率提高。膜材的柔韧性使得施工更加灵活多变,能够适应各种复杂地形和结构要求。
3、节能环保:部分材料可回收利用,符合环保要求,减少了对环境的影响。良好的透光性能够减少室内照明需求,降低能耗。
4、广泛应用领域:
法拉利膜材不仅适用于建筑领域(如体育设施、商业设施、文化设施、交通设施等),还广泛应用于汽车及广告领域(如高档车辆贴膜保护和装饰、广告招贴等),展现出其多功能的特性。

综上所述,法拉利膜材以其高强度、耐用性、透光性、美观性、轻质灵活性以及环保可回收性等优点,在建筑、汽车及广告等多个领域发挥着重要作用。具体型号的选择应根据实际需求和应用场景进行综合考虑。
[url=http://www.mjgou.com/forum-17-1.html][size=94628][color=Red]法拉利膜材中国代理商 - 膜结构网[/color][/size][/url]
acedGrread配合Jig在动态拖动中捕捉点并获取坐标
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:36 , Processed in 0.134417 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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