设为首页收藏本站

中国膜结构网

 找回密码
 立即注册
膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 45|回复: 1

块的角度

[复制链接]
  • TA的每日心情
    开心
    2021-3-7 10:01
  • 签到天数: 1440 天

    连续签到: 19 天

    [LV.10]以坛为家III

    发表于 2021-2-14 22:01 | 显示全部楼层 |阅读模式
    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构咨询服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系QQ:463017170.
    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 );
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-3-7 10:01
  • 签到天数: 1440 天

    连续签到: 19 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-14 22:01 | 显示全部楼层
    AcGePoint3d ptTarget = ...;
    AcGeVector3d vZAxisTarget = ...;
    AcGeVector3d vXAxisTarget = ...;
    AcGeVector3d vYAxisTarget = ...;
    AcGeMatrix3d mxOrientBlockRef;
    mxOrientBlockRef.setToAlignCoordSys(AcGePoint3d::kOrigin, AcGeVector3d::kXAxis, AcGeVector3d::kYAxis, AcGeVector3d::kZAxis, ptTarget, vXAxisTarget, vYAxisTarget, vZAxisTarget);

    m_BlockRef = new AcDbBlockReference();
    m_BlockRef->setBlockTableRecord(blk_objid);
    m_BlockRef->transformBy(mxOrientBlockRef);
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    推荐膜材品牌上一条 /5 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构协会

    QQ|申请友链|Archiver|手机版|中国膜结构论坛

    GMT+8, 2021-3-8 01:15 , Processed in 0.273747 second(s), 22 queries .

    Powered by 中国膜结构网->膜材采购->膜结构设计->膜结构安装->膜结构维修

    © 2014-2020 膜结构协会->进口膜材->国产膜材->PVDF膜材->PTFE膜材->ETFE膜材.

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