weixin_44370039 2024-06-06 13:14 采纳率: 60%
浏览 8

ug二次开发坐标系问题

img

img

img

img

img


如图,创建块的坐标系为啥偏了这么多?原点应该在模型终点才是,各位码友帮忙看一下,谢谢

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-06 13:14
    关注

    引自免费微信小程序:皆我百晓生

    从您提供的信息来看,您似乎在进行Unigraphics(通常简称为UG)的二次开发,使用的编程语言是C++。您遇到了几个问题,包括警告、错误以及坐标系偏移的问题。我将针对这些问题逐一解答,并提供可能的解决方案。

    首先,让我们解决编译警告和错误:

    1. 警告C4101:表示有未使用的局部变量。在图2的第65行,这个警告可能是由于某个局部变量没有被使用导致的。检查一下代码,确保所有局部变量都有实际用途,如果没有,可以删除它们。

    2. 警告C4551:这是关于函数调用缺少参数列表的。在图2的第441行,检查是否有函数调用少传了参数,或者参数类型不匹配。确保传递给函数的所有参数都正确无误。

    然后,我们来看看如何正确创建临时坐标系并使其位于选择的面的中心。在图3中,您已经获取了选定面的中心点midPoint,并且创建了一个基于XVecYVec的3x3矩阵。然而,在创建临时坐标系时,需要注意的是,UF_CSYS_create_csys函数的第二个参数应该是旋转矩阵,而不是平移矩阵。因此,你需要先创建一个旋转矩阵,然后结合平移矩阵来创建坐标系。以下是修复后的代码片段:

    // 创建X轴向量
    double XVec[3] = { /* 计算XVec的值 */ };
    // 创建Y轴向量
    double YVec[3] = { /* 计算YVec的值 */ };
    
    // 创建旋转矩阵Mtx
    double Mtx[9];
    UF_MTX3_inititalize(XVec, YVec, Mtx);
    
    // 创建平移矩阵Tht
    double Tht[3] = { 0, 0, 0 }; // 如果midPoint不是原点,这里应填入midPoint
    double ThMtx[9];
    UF_MTX3_translate(Tht, ThMtx);
    
    // 结合旋转和平移矩阵创建最终的坐标系矩阵
    double CsysMtx[9];
    UF_MTX3_multiply(Mtx, ThMtx, CsysMtx);
    
    // 创建临时坐标系
    tag_t CsysID = NULL_TAG;
    UF_CSYS_create_csys(NULL_TAG, CsysMtx, &CsysID);
    

    至于图4中的问题,看起来是一个条件语句的缩进错误,这可能会导致逻辑错误。正确的代码应该像这样:

    if (b < c) {
        t = b;
        b = c;
        c = t;
    }
    x2 = a; // 最大值赋值给x2
    y2 = b; // 中间值赋值给y2
    z2 = c; // 最小值赋予z2
    

    对于图5中提到的块坐标系偏移问题,可能是因为在创建块时,所使用的参考点或者边界的坐标不正确。确保在创建块时,使用的边界坐标与预期一致,并且参照点(通常是坐标原点)也是正确的。

    请按照上述建议修改您的代码,并尝试重新编译和运行。如果有任何其他问题或代码需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月6日