first candidate: arb8

libged/make arb8 logic -> librt/arb8.c ft_make
This commit is contained in:
f4alt committed 2026-07-29 16:20:50 -04:00
1 parent cebe7916cd
commit 70518d83e4
3 files changed
+103 -119

No files matched your search

+3 -118
View File
@@ -145,124 +145,7 @@ ged_make_core(struct ged *gedp, int argc, const char *argv[])
GED_CHECK_EXISTS(gedp, argv[bu_optind], LOOKUP_QUIET, BRLCAD_ERROR);
RT_DB_INTERNAL_INIT(&internal);
if (BU_STR_EQUAL(argv[bu_optind+1], "arb8") ||
BU_STR_EQUAL(argv[bu_optind+1], "rpp")) {
internal.idb_major_type = DB5_MAJORTYPE_BRLCAD;
internal.idb_type = ID_ARB8;
internal.idb_meth = &OBJ[ID_ARB8];
BU_ALLOC(internal.idb_ptr, struct rt_arb_internal);
arb_ip = (struct rt_arb_internal *)internal.idb_ptr;
arb_ip->magic = RT_ARB_INTERNAL_MAGIC;
VSET(arb_ip->pt[0] ,
origin[X] + 0.5*scale,
origin[Y] - 0.5*scale,
origin[Z] - 0.5*scale);
for (i = 1; i < 8; i++)
VMOVE(arb_ip->pt[i], arb_ip->pt[0]);
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Z] += scale;
for (i = 4; i < 8; i++)
arb_ip->pt[i][X] -= scale;
arb_ip->pt[5][Y] += scale;
arb_ip->pt[6][Y] += scale;
arb_ip->pt[6][Z] += scale;
arb_ip->pt[7][Z] += scale;
} else if (BU_STR_EQUAL(argv[bu_optind+1], "arb7")) {
internal.idb_major_type = DB5_MAJORTYPE_BRLCAD;
internal.idb_type = ID_ARB8;
internal.idb_meth = &OBJ[ID_ARB8];
BU_ALLOC(internal.idb_ptr, struct rt_arb_internal);
arb_ip = (struct rt_arb_internal *)internal.idb_ptr;
arb_ip->magic = RT_ARB_INTERNAL_MAGIC;
VSET(arb_ip->pt[0] ,
origin[X] + 0.5*scale,
origin[Y] - 0.5*scale,
origin[Z] - 0.25*scale);
for (i = 1; i < 8; i++)
VMOVE(arb_ip->pt[i], arb_ip->pt[0]);
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Z] += 0.5*scale;
for (i = 4; i < 8; i++)
arb_ip->pt[i][X] -= scale;
arb_ip->pt[5][Y] += scale;
arb_ip->pt[6][Y] += scale;
arb_ip->pt[6][Z] += 0.5*scale;
} else if (BU_STR_EQUAL(argv[bu_optind+1], "arb6")) {
internal.idb_major_type = DB5_MAJORTYPE_BRLCAD;
internal.idb_type = ID_ARB8;
internal.idb_meth = &OBJ[ID_ARB8];
BU_ALLOC(internal.idb_ptr, struct rt_arb_internal);
arb_ip = (struct rt_arb_internal *)internal.idb_ptr;
arb_ip->magic = RT_ARB_INTERNAL_MAGIC;
VSET(arb_ip->pt[0],
origin[X] + 0.5*scale,
origin[Y] - 0.5*scale,
origin[Z] - 0.5*scale);
for (i = 1; i < 8; i++)
VMOVE(arb_ip->pt[i], arb_ip->pt[0]);
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Z] += scale;
for (i = 4; i < 8; i++)
arb_ip->pt[i][X] -= scale;
arb_ip->pt[4][Y] += 0.5*scale;
arb_ip->pt[5][Y] += 0.5*scale;
arb_ip->pt[6][Y] += 0.5*scale;
arb_ip->pt[6][Z] += scale;
arb_ip->pt[7][Y] += 0.5*scale;
arb_ip->pt[7][Z] += scale;
} else if (BU_STR_EQUAL(argv[bu_optind+1], "arb5")) {
internal.idb_major_type = DB5_MAJORTYPE_BRLCAD;
internal.idb_type = ID_ARB8;
internal.idb_meth = &OBJ[ID_ARB8];
BU_ALLOC(internal.idb_ptr, struct rt_arb_internal);
arb_ip = (struct rt_arb_internal *)internal.idb_ptr;
arb_ip->magic = RT_ARB_INTERNAL_MAGIC;
VSET(arb_ip->pt[0] ,
origin[X] + 0.5*scale,
origin[Y] - 0.5*scale,
origin[Z] - 0.5*scale);
for (i = 1; i < 8; i++)
VMOVE(arb_ip->pt[i], arb_ip->pt[0]);
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Z] += scale;
for (i = 4; i < 8; i++)
{
arb_ip->pt[i][X] -= scale;
arb_ip->pt[i][Y] += 0.5*scale;
arb_ip->pt[i][Z] += 0.5*scale;
}
} else if (BU_STR_EQUAL(argv[bu_optind+1], "arb4")) {
internal.idb_major_type = DB5_MAJORTYPE_BRLCAD;
internal.idb_type = ID_ARB8;
internal.idb_meth = &OBJ[ID_ARB8];
BU_ALLOC(internal.idb_ptr, struct rt_arb_internal);
arb_ip = (struct rt_arb_internal *)internal.idb_ptr;
arb_ip->magic = RT_ARB_INTERNAL_MAGIC;
VSET(arb_ip->pt[0] ,
origin[X] + 0.5*scale,
origin[Y] - 0.5*scale,
origin[Z] - 0.5*scale);
for (i = 1; i < 8; i++)
VMOVE(arb_ip->pt[i], arb_ip->pt[0]);
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Y] += scale;
arb_ip->pt[3][Z] += scale;
for (i = 4; i < 8; i++)
{
arb_ip->pt[i][X] -= scale;
arb_ip->pt[i][Y] += scale;
}
} else if (BU_STR_EQUAL(argv[bu_optind+1], "arbn")) {
if (BU_STR_EQUAL(argv[bu_optind+1], "arbn")) {
point_t view_center;
internal.idb_major_type = DB5_MAJORTYPE_BRLCAD;
@@ -924,6 +807,8 @@ ged_make_core(struct ged *gedp, int argc, const char *argv[])
internal.idb_ptr = (struct rt_brep_internal *)brep_ip;
brep_ip->magic = RT_BREP_INTERNAL_MAGIC;
brep_ip->brep = (ON_Brep *)brep_create();
} else if (rt_obj_make(argv[bu_optind+1], origin, scale, &internal) == BRLCAD_OK) {
bu_log("SUCCESS for type %s\n", argv[bu_optind+1]);
} else {
bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
return BRLCAD_ERROR;
+99
View File
@@ -2157,6 +2157,105 @@ rt_arb_describe(struct bu_vls *str, const struct rt_db_internal *ip, int verbose
}
/**
* Create a default arb at point 'origin', scaled by 'scale'.
* 'variants' are stored as ID_ARB8; the variant switch selects which points
* are collapsed.
*/
C_DECL int
rt_arb_make(const struct rt_functab *ftp, struct rt_db_internal *intern, const char *variant, const point_t origin, double scale)
{
struct rt_arb_internal *arb_ip;
size_t i;
intern->idb_major_type = DB5_MAJORTYPE_BRLCAD;
intern->idb_type = ID_ARB8;
BU_ASSERT(&OBJ[intern->idb_type] == ftp);
intern->idb_meth = ftp;
BU_ALLOC(arb_ip, struct rt_arb_internal);
intern->idb_ptr = (void *)arb_ip;
arb_ip->magic = RT_ARB_INTERNAL_MAGIC;
VSET(arb_ip->pt[0],
origin[X] + 0.5*scale,
origin[Y] - 0.5*scale,
origin[Z] - 0.5*scale);
for (i = 1; i < 8; i++)
VMOVE(arb_ip->pt[i], arb_ip->pt[0]);
/* switch on variant type */
if (BU_STR_EQUAL(variant, "arb7")) {
/* NOTE: for some reason we scale origin[Z] by .25 instead of .5 like
* everything else. But this dates back to commit 58501018 */
VSET(arb_ip->pt[0],
origin[X] + 0.5*scale,
origin[Y] - 0.5*scale,
origin[Z] - 0.25*scale);
for (i = 1; i < 8; i++)
VMOVE(arb_ip->pt[i], arb_ip->pt[0]);
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Z] += 0.5*scale;
for (i = 4; i < 8; i++)
arb_ip->pt[i][X] -= scale;
arb_ip->pt[5][Y] += scale;
arb_ip->pt[6][Y] += scale;
arb_ip->pt[6][Z] += 0.5*scale;
} else if (BU_STR_EQUAL(variant, "arb6")) {
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Z] += scale;
for (i = 4; i < 8; i++)
arb_ip->pt[i][X] -= scale;
arb_ip->pt[4][Y] += 0.5*scale;
arb_ip->pt[5][Y] += 0.5*scale;
arb_ip->pt[6][Y] += 0.5*scale;
arb_ip->pt[6][Z] += scale;
arb_ip->pt[7][Y] += 0.5*scale;
arb_ip->pt[7][Z] += scale;
} else if (BU_STR_EQUAL(variant, "arb5")) {
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Z] += scale;
for (i = 4; i < 8; i++)
{
arb_ip->pt[i][X] -= scale;
arb_ip->pt[i][Y] += 0.5*scale;
arb_ip->pt[i][Z] += 0.5*scale;
}
} else if (BU_STR_EQUAL(variant, "arb4")) {
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Y] += scale;
arb_ip->pt[3][Z] += scale;
for (i = 4; i < 8; i++)
{
arb_ip->pt[i][X] -= scale;
arb_ip->pt[i][Y] += scale;
}
} else {
/* default arb8 - also silently catches rpp / NULL / (unknown) */
arb_ip->pt[1][Y] += scale;
arb_ip->pt[2][Y] += scale;
arb_ip->pt[2][Z] += scale;
arb_ip->pt[3][Z] += scale;
for (i = 4; i < 8; i++)
arb_ip->pt[i][X] -= scale;
arb_ip->pt[5][Y] += scale;
arb_ip->pt[6][Y] += scale;
arb_ip->pt[6][Z] += scale;
arb_ip->pt[7][Z] += scale;
}
return BRLCAD_OK;
}
/**
* Free the storage associated with the rt_db_internal version of this
* solid.
+1 -1
View File
@@ -438,7 +438,7 @@ const struct rt_functab OBJ[] = {
RTFUNCTAB_FUNC_GET_CAST(rt_generic_get),
RTFUNCTAB_FUNC_ADJUST_CAST(rt_generic_adjust),
RTFUNCTAB_FUNC_FORM_CAST(rt_generic_form),
NULL, /* make */
RTFUNCTAB_FUNC_MAKE_CAST(rt_arb_make), /* make */
RTFUNCTAB_FUNC_PARAMS_CAST(rt_arb_params),
RTFUNCTAB_FUNC_BBOX_CAST(rt_arb_bbox),
RTFUNCTAB_FUNC_VOLUME_CAST(rt_arb_volume),