天气与日历 切换到窄版

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

ARX关于块的相关疑难问题整理

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
块的角度[code]        static void CreateAngleOfBlk()
        {
                if (m_BlockRef)
                {
                        delete m_BlockRef;
                        m_BlockRef = nullptr;
                }

                m_DirPt = dir_pt;
                m_BlockRef = new AcDbBlockReference();
                m_BlockRef->setBlockTableRecord(blk_objid);

                // Calcualte Normal : refactor as function
                AcGeVector3d vec = endPoint().asVector() - startPoint().asVector();
                AcGeVector3d vec1 = m_DirPt.asVector() - startPoint().asVector();
                AcGeVector3d vec_normal = vec.crossProduct(vec1);
                vec_normal.normalize();

                // Get UCS, refactor as a function
                AcGeMatrix3d  myUCS;
                acdbUcsMatrix(myUCS, nullptr);
                AcGeVector3d  xAxis, yAxis, zAxis;
                AcGePoint3d   myOrigin;
                myUCS.getCoordSystem(myOrigin, xAxis, yAxis, zAxis);

                bool AngleFlip = false;
                if (fabs(vec_normal.dotProduct(zAxis)) < 1e-8)
                        return;
                else if (vec_normal.dotProduct(zAxis) < 0)
                        AngleFlip = true;
                else
                        AngleFlip = false;

                m_BlockRef->setNormal(zAxis); //(vec_normal);
                m_BlockRef->setPosition(ins_pt);
                AcGeScale3d scl;
                if (scale < 0)
                        scale = 1.0;
                scl.set(scale, scale, scale);
                m_BlockRef->setScaleFactors(scl);

                // calculate angle
                ads_point p_start_wcs, p_end_wcs, p_start_ucs, p_end_ucs;
                p_start_wcs[X] = startPoint().x; p_start_wcs[Y] = startPoint().y; p_start_wcs[Z] = startPoint().z;
                p_end_wcs[X] = endPoint().x; p_end_wcs[Y] = endPoint().y; p_end_wcs[Z] = endPoint().z;
                ConvertFromWCSToUCS(p_start_wcs, p_start_ucs);
                ConvertFromWCSToUCS(p_end_wcs, p_end_ucs);
                AcGePoint3d p_start(p_start_ucs[X], p_start_ucs[Y], p_start_ucs[Z]);
                AcGePoint3d p_end(p_end_ucs[X], p_end_ucs[Y], p_end_ucs[Z]);
                AcGeVector3d v1_ucs = p_end.asVector() - p_start.asVector();
                AcGeVector3d v1 = endPoint().asVector() - startPoint().asVector();

                AcGeVector3d ref_vector = AcGeVector3d::kZAxis;
                double dangle = xAxis.angleTo(v1_ucs, zAxis); // this is not what I want?
                double dangle1 = AcGeVector3d::kXAxis.angleTo(v1_ucs, AcGeVector3d::kZAxis);

                if (m_AngleFlip)
                {
                        dangle1 *= -1;
                        m_FlipHandle = !m_FlipHandle;
                }
                m_BlockRef->setRotation(dangle1);

        }

[/code]

 

 

 

 

ARX关于块的相关疑难问题整理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 11:44 , Processed in 0.123920 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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