天气与日历 切换到窄版

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

查找多个AcDbLine的所有交点

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
This question came from Sandhya who asked how to find all line intersections into a drawing.
        In this case, we will consider only intersections between AcDbLine entities.

        First we need to prepare our CMap structure to be able to handle AcGePoint3d as the map key. The idea is to group all Lines passing through each intersection point.

        CMap does not support AcGePoint3d because it does not know how to Hash it and also how to compare it as a key. To allow that we will need to define both HasKey and CompareElements templates as follows:




// These are template classes to allow AcGePoint3d do be used as a Key do CMap class
const double _dTol = 0.0001;

template<> UINT AFXAPI HashKey<AcGePoint3d> (AcGePoint3d key)
{
        CString sPoint;
        sPoint.Format(_T("%f,%f,%f"),key.x, key.y ,key.z);

        UINT iHash = (NULL == &key) ? 0 : HashKey((LPCSTR)sPoint.GetBuffer());
        return iHash;
}

template<> BOOL AFXAPI CompareElements<AcGePoint3d, AcGePoint3d>
(const AcGePoint3d* pElement1, const AcGePoint3d* pElement2)
{
        if ((pElement1 == NULL) || (pElement2 == NULL))
                return false;

        AcGeTol gTol;
        gTol.setEqualPoint(_dTol); // Point comparison tolerance
        return (pElement1->isEqualTo(*pElement2,gTol));
}


Next, we will collect the AcDbLine entities in ModelSpace:


// Collect lines from ModelSpace
Acad::ErrorStatus es;
AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
AcDbBlockTableRecordPointer pBTR(acdbSymUtil()->blockModelSpaceId(pDb),AcDb::kForWrite);

AcDbBlockTableRecordIterator *pIter = NULL;
pBTR->newIterator(pIter, true);
AcDbObjectIdArray arrLines;

while(!pIter->done())
{
        AcDbEntity *pEnt = NULL;
        es = pIter->getEntity(pEnt, AcDb::kForRead);
        if (es == Acad::eOk)
        {
                if (pEnt->isKindOf(AcDbLine::desc()))
                        arrLines.append(pEnt->objectId());

                pEnt->close();
        }

        pIter->step(true);
}
delete pIter;
pIter = NULL;

if (arrLines.length() == 0)
{
        acutPrintf(_T("There are no lines in Model Space!\n"));
        return;
}
else
{
        acutPrintf(_T("We've found %d lines in Model Space!\nChecking intersection with tolerance %f...\n"),
                arrLines.length(), _dTol);
}


Ok, with the lines collected we will then build our CMap with the information we need:


// Process lines in pairs
CMap<AcGePoint3d,AcGePoint3d,AcDbObjectIdArray,AcDbObjectIdArray&> mapLines;

acdbTransactionManager->startTransaction();
for (int i=0; i<arrLines.length()-1; i++)
{
        AcDbLine* pLineA = NULL;
        if (acdbTransactionManager->getObject((AcDbObject*&)pLineA,arrLines, AcDb::kForRead) == Acad::eOk)
        {
                for (int j=i+1; j<arrLines.length(); j++)
                {
                        AcDbLine* pLineB = NULL;
                        if (acdbTransactionManager->getObject((AcDbObject*&)pLineB,arrLines[j], AcDb::kForRead) == Acad::eOk)
                        {
                                AcGePoint3dArray arrPts;
                                if (pLineA->intersectWith(pLineB,AcDb::kOnBothOperands,arrPts) == Acad::eOk)
                                {
                                        if (arrPts.length() > 0)
                                        {
                                                for (int p=0; p<arrPts.length(); p++)
                                                {
                                                        AcDbObjectIdArray arrExist;
                                                        if (mapLines.Lookup(arrPts[p],arrExist) == TRUE)
                                                        {
                                                                // Existing point...
                                                                if (arrExist.contains(pLineA->objectId()) == false)
                                                                        mapLines[arrPts[p]].append(pLineA->objectId());

                                                                if (arrExist.contains(pLineB->objectId()) == false)
                                                                        mapLines[arrPts[p]].append(pLineB->objectId());
                                                        }
                                                        else
                                                        {
                                                                // New point...
                                                                AcDbObjectIdArray arrNewEnts;
                                                                arrNewEnts.append(pLineA->objectId());
                                                                arrNewEnts.append(pLineB->objectId());
                                                                mapLines.SetAt(arrPts[p],arrNewEnts);
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
}

acdbTransactionManager->endTransaction();


To demonstrate the use of this information, we then use our CMap data to create AcDbPoint entities on ModeSpace and also print a small report at the command prompt:


// Just as demonstration, walk through points and add an AcDbPoint entity to ModelSpace then print the info
POSITION pos = mapLines.GetStartPosition();
while (pos)
{
        AcGePoint3d ptKey(0,0,0);
        AcDbObjectIdArray arrEnts;
        mapLines.GetNextAssoc(pos,ptKey, arrEnts);

        AcDbPoint* ptEnt = new AcDbPoint(ptKey);
        AcDbObjectId idPointEnt;
        pBTR->appendAcDbEntity(idPointEnt,ptEnt);
        ptEnt->close();

        CString sEnts;
        for (int e=0; e<arrEnts.length(); e++)
        {
                ACHAR pBuff[255] = _T("");
                arrEnts[e].handle().getIntoAsciiBuffer(pBuff);
                CString sBuff;
                sBuff.Format( (e==arrEnts.length()-1) ? _T("%s"): _T("%s,"), pBuff);
                sEnts += sBuff;
        }

        CString sPromptReport;
        sPromptReport.Format(_T("Point (%.4f, %.4f, %.4f) - Entities [%s]\n"),ptKey.x, ptKey.y, ptKey.z, sEnts);
        acutPrintf(sPromptReport);
}


This is the sample DWG (remember to adjust the PTYPE):








And this is the prompt result:


        And this is the prompt result:

Command: LINEINTS
                         We've found 8 lines in Model Space!
                         Checking intersection with tolerance 0.000100...
                         Point (49.4194, 7.7097, 0.0000) - Entities [1E0,1E1]
                 Point (43.8908, 18.4889, 0.0000) - Entities [1DF,1E0]
                 Point (37.2051, 11.5104, 0.0000) - Entities [1DF,1E1]
                 Point (32.4059, 13.0038, 0.0000) - Entities [1DE,1E1]
                 Point (33.7651, 7.9199, 0.0000) - Entities [1DE,1DF]
                 Point (30.4900, 20.1703, 0.0000) - Entities [1DD,1DE]
                 Point (20.6648, 16.6573, 0.0000) - Entities [1E1,1E2]
                 Point (22.1562, 13.7469, 0.0000) - Entities [1DD,1E2]
                 Point (24.4172, 15.4897, 0.0000) - Entities [1DD,1E1]
                 Point (17.0892, 9.8415, 0.0000) - Entities [1DC,1DD]
                 Point (16.3380, 17.5581, 0.0000) - Entities [1DB,1DC]

                 Full source code can be downloaded from here:
0.jpg (32.13 KB, 下载次数: 0)

 

 

 

 

查找多个AcDbLine的所有交点

该用户从未签到

主题

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=94374][color=Red]法拉利膜材中国代理商 - 膜结构网[/color][/size][/url]
查找多个AcDbLine的所有交点

该用户从未签到

主题

0

回帖

4

积分

新手上路

积分
4
发表于 2024-8-6 10:42:43 | 显示全部楼层
中兴化成(中兴化成工业株式会社)作为一家在氟树脂领域享有盛誉的企业,其进口PTFE膜材在市场上也备受关注。以下是对中兴化成进口PTFE膜材的详细介绍:
[b]一、品牌与产品系列[/b]
中兴化成工业株式会社创立于1963年,致力于开发、制造以氟树脂为主的高功能树脂产品。其PTFE膜材产品系列丰富,包括FGT系列等,这些产品广泛应用于半导体、通信、汽车、食品、化学、建筑等多个领域。
[b]二、产品特点[/b]
耐高温性:
中兴化成的PTFE膜材可耐700~800℃的高温,表现出色的耐热性能。
耐候性:
不受低温和紫外线的影响,长期保持材料的稳定性和功能性。
不粘附性与疏水性:
氟树脂的非粘着性和防水性使得膜材表面不易粘附灰尘和污物,具备自洁功能。
高强度与安全性:
使用世界上最细的玻璃纤维B纱作为基材,赋予膜材足够的强度和安全性。
透光性与热性能:
自然光通过膜材后变为自然扩散光,营造柔和的空间氛围。同时,膜材能反射大部分太阳能,抑制热量传导到建筑物内部,提高隔热效果。
自动清洁性:
雨水能自动冲洗掉膜材表面的灰尘和污染物,保持膜材的清洁和美观。
吸音性:
作为内部装修材料时,氟树脂膜材的柔软性和透气性有助于提升建筑物内的音响效果。
[b]三、应用领域[/b]
中兴化成的PTFE膜材广泛应用于以下领域:
屋顶材料:作为建筑物的屋顶覆盖材料,提供优异的隔热、防水和自洁功能。
天花板材料:为室内空间创造柔和的光线环境,同时具备良好的隔音效果。
内部装修材料:用于墙面、隔断等内部装修,提升整体装修品质和空间舒适度。
[b]四、总结[/b]
中兴化成的进口PTFE膜材凭借其卓越的耐高温性、耐候性、高强度和自洁性等特点,在建筑、装饰等多个领域展现出广泛的应用前景。作为氟树脂产品的综合加工制造商,中兴化成始终致力于提供最优质的产品和服务,满足客户的多样化需求。

 

 

 

 

查找多个AcDbLine的所有交点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 11:31 , Processed in 0.143782 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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