TgINLINE TgVOID V(tgGM_Constructor_LN)( V(PCU_TgLINE) psLN0 )
{
V(tgGM_Reset_LN)( psLN0 );
}
TgINLINE TgVOID V(tgGM_Reset_LN)( V(PCU_TgLINE) psLN0 )
{
psLN0->m_vOrigin = V(F_SETP_ELEM)( MKL(0.0), MKL(0.0), MKL(0.0) );
psLN0->m_vDirN = V(F_SETV_ELEM)( MKL(0.0), MKL(0.0), MKL(0.0) );
}
TgINLINE TgBOOL V(tgGM_Is_Valid_LN)( V(CPCU_TgLINE) psLN1 )
{
if (!V(F_Is_Point_Valid)( &psLN1->m_vOrigin ))
{
return (TgFALSE);
};
if (!V(F_Is_Vector_Valid)( &psLN1->m_vDirN ))
{
return (TgFALSE);
};
return (TgTRUE);
}
TgINLINE TgVOID V(tgGM_BA_LN)( V(PCU_TgBOXAA) psBA0, V(CPCU_TgLINE) psLN )
{
V(tgGM_Set_Invalid_BA)( psBA0 );
}
TgINLINE TgVOID V(tgGM_Sweep_BA_LN)( V(PCU_TgBOXAA) psBA0, V(CPCU_TgLINE) psLN, V(CPCU_TgVEC) pvDT )
{
V(tgGM_Set_Invalid_BA)( psBA0 );
}
TgINLINE TgVOID V(tgGM_Project_LN)( PCU_TYPE ptyMin, PCU_TYPE ptyMax, V(CPCU_TgLINE) psLN1, V(CPCU_TgVEC) pvDN )
{
TgGEOM_ASSERT_PARAM(0 != ptyMin && 0 != ptyMax && V(tgGM_Is_Valid_LN)( psLN1 ) && V(F_Is_Vector_Valid)( pvDN ));
*ptyMin = -F(KTgMAX);
*ptyMax = F(KTgMAX);
}
TgINLINE TgBOOL V(tgGM_Is_Contained_LN)( V(CPCU_TgLINE) psLN1, V(CPCU_TgVEC) pvS0 )
{
V(C_TgVEC) vDS = V(F_SUB_VV)( pvS0, &psLN1->m_vOrigin );
const TYPE fDS = V(F_DOT_VV)( &vDS, &psLN1->m_vDirN );
V(C_TgVEC) tvS1 = V(F_MUL_SV)( fDS, &psLN1->m_vDirN );
V(C_TgVEC) tvS2 = V(F_ADD_VV)( &tvS1, &psLN1->m_vOrigin );
V(C_TgVEC) tvS3 = V(F_SUB_VV)( pvS0, &tvS2 );
return (F(tgCM_NR0)( V(F_LEN)( &tvS3 ) ));
}
TgINLINE TgVOID V(tgGM_TX_LN)( V(PCU_TgLINE) psLN0, M34(CPCU_TgMAT) pxM0 )
{
TgGEOM_ASSERT_PARAM(!M34(F_NaN)( pxM0 ));
psLN0->m_vOrigin = V(F_TX_P_34)( pxM0, &psLN0->m_vOrigin );
psLN0->m_vDirN = V(F_TX_V_34)( pxM0, &psLN0->m_vDirN );
}
TgINLINE TgVOID V(tgGM_Copy_TX_LN)( V(PCU_TgLINE) psLN0, V(CPCU_TgLINE) psLN1, M34(CPCU_TgMAT) pxM0 )
{
TgGEOM_ASSERT_PARAM(V(tgGM_Is_Valid_LN)( psLN1 ) && !M34(F_NaN)( pxM0 ));
psLN0->m_vOrigin = V(F_TX_P_34)( pxM0, &psLN1->m_vOrigin );
psLN0->m_vDirN = V(F_TX_V_34)( pxM0, &psLN1->m_vDirN );
}
TgINLINE TgVOID V(tgGM_Init_LN)( V(PCU_TgLINE) psLN0, V(CPCU_TgVEC) pvS0, V(CPCU_TgVEC) pvDN )
{
TgGEOM_ASSERT_PARAM(V(F_Is_Point_Valid)( pvS0 ) && V(F_Is_Vector_Valid)( pvDN ));
psLN0->m_vOrigin = *pvS0;
psLN0->m_vDirN = *pvDN;
}
TgINLINE TgVOID V(tgGM_Copy_LN)( V(PCU_TgLINE) psLN0, V(CPCU_TgLINE) psLN1 )
{
TgGEOM_ASSERT_PARAM(V(tgGM_Is_Valid_LN)( psLN1 ));
psLN0->m_vOrigin = psLN1->m_vOrigin;
psLN0->m_vDirN = psLN1->m_vDirN;
}
TgINLINE TgVOID V(tgGM_Set_Origin_LN)( V(PCU_TgLINE) psLN0, V(CPCU_TgVEC) pvS0 )
{
TgGEOM_ASSERT_PARAM(V(F_Is_Point_Valid)( pvS0 ));
psLN0->m_vOrigin = *pvS0;
}
TgINLINE TgVOID V(tgGM_Set_DirN_LN)( V(PCU_TgLINE) psLN0, V(CPCU_TgVEC) pvDN )
{
TgGEOM_ASSERT_PARAM(V(F_Is_Vector_Valid)( pvDN ));
psLN0->m_vDirN = *pvDN;
}
TgINLINE V(CP_TgVEC) V(tgGM_Query_Origin_LN)( V(CPCU_TgLINE) psLN1 )
{
return (&psLN1->m_vOrigin);
}
TgINLINE V(CP_TgVEC) V(tgGM_Query_DirN_LN)( V(CPCU_TgLINE) psLN1 )
{
return (&psLN1->m_vDirN);
}