天气与日历 切换到窄版

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

AcDbArcDimension as dynamic dimension

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
我已经创建了一个弧长动态尺寸夹具。

但我无法通过维度的编辑字段设置所需的弧长。

任何输入的值都将被解释为错误(编辑字段的边框变为红色)。

同时,基于AcDbAlignedDimension或AcDbRotatedDimension的任何线性动态维度都非常有用。

我可以将AcDbArcDimension类用作动态维度吗?

我已经为测试创建了一个示例项目,它按中心、起点和终点创建了一个弧。

测试类中dimData()的实现如下所示:


#pragma once


class CArcTestJig: public AcEdJig
{
public:
        CArcTestJig();
        virtual ~CArcTestJig();

        //- dynamic dimension data setup
        virtual AcDbDimDataPtrArray* dimData (const double dimScale) override;
        //- dynamic dimension data update
        virtual Acad::ErrorStatus setDimValue(const AcDbDimData* dimData,        const double dimValue) override;

        virtual Adesk::Boolean update() override;
        virtual DragStatus sampler() override;
        virtual AcDbEntity* entity() const override         { return m_pArc;  }

        AcEdJig::DragStatus start();

protected:
        void  releaseDimData();
        void  updateDimData();
        void  setEndAngleTo(AcGePoint3d pntEnd);

protected:

#define ARCDIM_OFFSET  20.0

        enum stage
        {
                center = 1,
                startpnt,
                endpnt
        };

        stage        m_Stage;
        AcGePoint3d  m_PntPrev;
        AcDbArc*     m_pArc;

        AcDbDimDataPtrArray* m_pDimData;

        double     __PI;
};

void CreateArc();



#include "StdAfx.h"
#include "ArcTestJig.h"

//
CArcTestJig::CArcTestJig(): m_Stage(center), m_pDimData(NULL), __PI(atan (1.)*4)
{
        m_pArc = new AcDbArc(AcGePoint3d::kOrigin, AcGeVector3d::kZAxis, 100., 0., __PI/2);
}

CArcTestJig::~CArcTestJig()
{
        releaseDimData();
};

void CArcTestJig::releaseDimData()
{
        if(m_pDimData == NULL)
                return;
        for(int ii = 0; ii < m_pDimData->length(); ii++)
                delete m_pDimData->at(ii);

        delete m_pDimData;
        m_pDimData = NULL;
}

void  CArcTestJig::updateDimData()
{
        if(m_pDimData == NULL || m_pArc == NULL)
                return;

        if(m_pDimData->length() < 2)
                return;

        double  dRadius = m_pArc->radius();
        AcGePoint3d  pntCenter = m_pArc->center();

        AcGePoint3d  pntStart;
        m_pArc->getStartPoint(pntStart);
        double dStart;
        m_pArc->getStartParam(dStart);

        AcGePoint3d  pntEnd;
        m_pArc->getEndPoint(pntEnd);
        double dEnd;
        m_pArc->getEndParam(dEnd);

        AcDbArcDimension* pArcDim = AcDbArcDimension::cast(m_pDimData->at(0)->dimension());
        if(pArcDim)
        {
                pArcDim->setArcSymbolType(2); // no symbol
                pArcDim->setCenterPoint(pntCenter);
                pArcDim->setXLine1Point(pntStart);
                pArcDim->setXLine2Point(pntEnd);
                pArcDim->setArcStartParam(dStart);
                pArcDim->setArcEndParam(dEnd);

                AcGeVector3d vStart = (pntStart - pntCenter).normalize();
                AcGeVector3d vEnd = (pntEnd - pntCenter).normalize();
                AcGeVector3d vMid = vStart + vEnd;
                vMid.normalize();

                if(vStart.angleTo(vEnd, m_pArc->normal()) > __PI)
                        vMid.negate();

                pArcDim->setArcPoint(pntCenter + (dRadius + ARCDIM_OFFSET)*vMid );

                pArcDim->setHasLeader(false);
        }

        AcDbAlignedDimension* pChordDim = AcDbAlignedDimension::cast(m_pDimData->at(1)->dimension());
        if(pChordDim)
        {
                pChordDim->setXLine1Point(pntStart);
                pChordDim->setXLine2Point(pntEnd);
                AcGeVector3d vDir = (pntEnd - pntStart).normalize();

                pChordDim->setDimLinePoint(pntStart + ARCDIM_OFFSET*vDir.perpVector());
        }
}

AcDbDimDataPtrArray* CArcTestJig::dimData (const double dimScale)
{
        if(m_Stage != endpnt)
                return NULL;

        releaseDimData();

        m_pDimData = new AcDbDimDataPtrArray();

        AcDbDimData* pNewData(NULL);

        // Arc Dimension
        AcDbArcDimension* pArcDim = new AcDbArcDimension();
        pArcDim->setDatabaseDefaults();
        pArcDim->setNormal(m_pArc->normal());
        pArcDim->setElevation(0.0);
        pArcDim->setHorizontalRotation(0.0);
        pArcDim->setDimscale(dimScale);
        pArcDim->setDimtad(1);
//        pArcDim->setDynamicDimension(true);

        pNewData = new AcDbDimData(pArcDim);
        pNewData->setDimHideIfValueIsZero(false);
        pNewData->setDimEditable(true);
        pNewData->setDimFocal(true);

        m_pDimData->append(pNewData);

        // Chord Dimension
        AcDbAlignedDimension* pChordDim = new AcDbAlignedDimension();
        pChordDim->setDatabaseDefaults();
        pChordDim->setNormal(m_pArc->normal());
        pChordDim->setElevation(0.0);
        pChordDim->setHorizontalRotation(0.0);
        pChordDim->setDimtad(1);
        pChordDim->setDynamicDimension(true);

        pNewData = new AcDbDimData(pChordDim);
        pNewData->setDimHideIfValueIsZero(false);
        pNewData->setDimEditable(true);
        pNewData->setDimFocal(false);

        m_pDimData->append(pNewData);

        // set dimension location
        updateDimData();

        return m_pDimData;
}

Acad::ErrorStatus CArcTestJig::setDimValue(const AcDbDimData* dimData,        const double dimValue)
{
        AcDbDimension* pDim = dimData->dimension();

        AcDbArcDimension* pArcDim = AcDbArcDimension::cast(pDim);
        if(pArcDim)
        {
                AcGePoint3d pntNewEnd;
                Acad::ErrorStatus es = m_pArc->getPointAtDist(dimValue, pntNewEnd);
                if(Acad::eOk != es)
                        return es;

                setEndAngleTo(pntNewEnd);

                return Acad::eOk;
        }
        else
        {
                AcDbAlignedDimension* pChordDim =  AcDbAlignedDimension::cast(pDim);
                if(pChordDim)
                {
                        double dRadius = m_pArc->radius();
                        if(dimValue > dRadius*2)
                                return Acad::eNotApplicable;


                        double dAngDlt = asin(dimValue/(dRadius*2));
                        double dNewEnd = m_pArc->startAngle() + dAngDlt*2;
                        m_pArc->setEndAngle(dNewEnd);
                        return Acad::eOk;
                }
        }

        return  Acad::eInvalidInput;
}

void  CArcTestJig::setEndAngleTo(AcGePoint3d pntEnd)
{
        AcGeVector3d vEnd = (pntEnd - m_pArc->center()).normalize();
        double dNewEnd = vEnd.angleTo(AcGeVector3d::kXAxis, m_pArc->normal().negate());
//         if(dNewEnd > __PI)
//                 dNewEnd -= __PI*2;
        m_pArc->setEndAngle(dNewEnd);
}

Adesk::Boolean CArcTestJig::update()
{
        if(m_pArc == NULL)
                return false;

        switch(m_Stage)
        {
                case center:
                        m_pArc->setCenter(m_PntPrev);
                        break;

                case startpnt:
                        {
                                AcGeVector3d vStart = m_PntPrev - m_pArc->center();
                                double dRadius = vStart.length();
                                vStart.normalize();
                                double dStart = vStart.angleTo(AcGeVector3d::kXAxis, m_pArc->normal().negate());
                                if(dStart > __PI)
                                        dStart -= __PI*2;
                                m_pArc->setRadius(dRadius);
                                m_pArc->setStartAngle(dStart);
                                m_pArc->setEndAngle(dStart + __PI/2);
                        }
                        break;

                case endpnt:
                        setEndAngleTo(m_PntPrev);
                        break;

                default:
                        return false;
        }

        updateDimData();
        return true;
}

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

        DragStatus sts;
        AcGePoint3d pntTemp;
        if(m_Stage == startpnt)
                sts = acquirePoint(pntTemp, m_pArc->center());
        else
                sts = acquirePoint(pntTemp);
        if(sts == AcEdJig::kNormal)
        {
                if(pntTemp.isEqualTo(m_PntPrev))
                        sts = kNoChange;
                m_PntPrev = pntTemp;
        }
        return sts;
}

AcEdJig::DragStatus  CArcTestJig::start()
{
        CString sPrompt;

        m_Stage = center;
        sPrompt = _T("\nCenter of arc: ");
        setDispPrompt(sPrompt);
        AcEdJig::DragStatus sts = drag();
        if(sts != kNormal)
                return sts;

        m_Stage = startpnt;
        sPrompt = _T("\nStart point of arc: ");
        setDispPrompt(sPrompt);
        m_pArc->getStartPoint(m_PntPrev);
        sts = drag();
        if(sts != kNormal)
                return sts;

        m_Stage = endpnt;
        sPrompt = _T("\nEnd point of arc: ");
        setDispPrompt(sPrompt);
        m_pArc->getEndPoint(m_PntPrev);
        sts = drag();
        if(sts == kNormal)
        {
                AcDbObjectId idArc = append();
        }

        return sts;
}

void CreateArc()
{
        CArcTestJig arcJig;
        arcJig.start();
}

 

 

 

 

AcDbArcDimension as dynamic dimension

该用户从未签到

主题

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=92608][color=Red]法拉利膜材中国代理商 - 膜结构网[/color][/size][/url]
AcDbArcDimension as dynamic dimension

该用户从未签到

主题

0

回帖

2

积分

新手上路

积分
2
发表于 2024-8-6 10:42:43 | 显示全部楼层
麦柏膜材,作为海宁麦柏涂层织物有限公司的主打产品,在建筑膜结构材料领域具有显著的市场地位和广泛的应用。以下是对麦柏膜材的详细分析:
[b]一、公司背景与实力[/b]
地理位置:海宁麦柏涂层织物有限公司位于浙江省杭州市与上海之间的海宁市经济开发区,交通、物流方便,区位优势明显,信息资源充足。
专业经验:麦柏涂层是国内专业的刀刮涂层建筑膜结构材料生产供应商,其创建人具有15年的行业从业经历,积累了丰富的行业经验和专业知识。
产品种类:麦柏膜材涵盖了PVF膜材、PVDF膜材、PTFE膜材和ETFE膜材等多种类型,产品涵盖目前所有建筑膜结构工程领域。
[b]二、产品特点[/b]
高性能:麦柏膜材具有高强度、高透光率、高耐候性和优异的自洁性能。这些特性使得麦柏膜材在各种恶劣环境下都能保持稳定的性能,延长使用寿命。
防火等级:麦柏膜材具有良好的防火性能,符合相关防火标准,提高了建筑的安全性。
经济性:麦柏膜材在保证高性能的同时,也注重成本控制,为客户提供性价比高的产品。
环保性:麦柏膜材注重环保性能,部分产品可回收再利用,符合绿色建筑的理念。
[b]三、应用领域[/b]
麦柏膜材广泛应用于多个领域,包括但不限于:
建筑领域:作为体育场馆、展览馆、体育馆等建筑的屋顶、墙面覆盖材料,提供美观且耐用的解决方案。
交通设施:在机场、火车站、汽车站等交通枢纽的遮阳篷、雨棚等结构中发挥作用。
文化设施:用于博物馆、图书馆、文化中心等场所的屋顶和墙面覆盖。
景观设施:在公园、广场等景观区域的遮阳、遮雨设施中使用。
[b]四、技术创新与发展[/b]
研发能力:海宁麦柏涂层织物有限公司不断投入研发资源,致力于开发新的膜结构材料,以满足市场的多元化需求。
定制服务:麦柏膜材提供定制服务,根据客户的具体需求进行个性化设计和生产。
品质保证:公司秉承高品质、优服务的经营理念,确保每一批产品的质量都达到行业领先水平。
[b]五、市场认可度与前景[/b]
麦柏膜材凭借其优异的性能和广泛的应用领域在市场上赢得了广泛的认可。随着全球对绿色建筑和可持续发展的重视不断加深,麦柏膜材的市场前景将更加广阔。未来,麦柏膜材将继续加大在技术创新和产品研发上的投入,为客户提供更加优质、环保、高效的解决方案。
综上所述,麦柏膜材作为一种高性能的建筑膜结构材料,在建筑、交通、文化、景观等多个领域具有广泛的应用前景。其优异的性能、环保特性和定制服务使得麦柏膜材在市场上具有很强的竞争力。

 

 

 

 

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

本版积分规则

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

GMT+8, 2024-11-1 10:27 , Processed in 0.180507 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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