Difference between revisions of "User:Clouddrift/GSoC2014/Midterm"
From BRL-CAD
< User:Clouddrift | GSoC2014
Clouddrift (talk | contribs) (→Fix Debugs) |
Clouddrift (talk | contribs) (→Reorganize NMG Data Structure) |
||
Line 1: | Line 1: | ||
== Reorganize NMG Data Structure == | == Reorganize NMG Data Structure == | ||
+ | The functionality of struct '''model''' and '''nmgregion''' are redundant to '''combination''' concept in BRL-CAD. | ||
+ | |||
+ | struct model { | ||
+ | uint32_t magic; | ||
+ | struct bu_list r_hd; /**< @brief list of regions */ | ||
+ | char *manifolds; /**< @brief structure 1-3manifold table */ | ||
+ | long index; /**< @brief struct # in this model */ | ||
+ | '''long maxindex; /**< @brief # of structs so far */''' | ||
+ | }; | ||
+ | |||
+ | struct nmgregion { | ||
+ | struct bu_list l; /**< @brief regions, in model's r_hd list */ | ||
+ | struct model *m_p; /**< @brief owning model */ | ||
+ | struct nmgregion_a *ra_p; /**< @brief attributes */ | ||
+ | struct bu_list s_hd; /**< @brief list of shells in region */ | ||
+ | long index; /**< @brief struct # in this model */ | ||
+ | }; | ||
+ | |||
+ | Then, change struct '''shell''' to fit new nmg philosophy. | ||
+ | |||
+ | old: | ||
+ | |||
+ | struct shell { | ||
+ | '''struct bu_list l; /**< @brief shells, in region's s_hd list */''' | ||
+ | '''struct nmgregion *r_p; /**< @brief owning region */''' | ||
+ | struct shell_a *sa_p; /**< @brief attribs */ | ||
+ | struct bu_list fu_hd; /**< @brief list of face uses in shell */ | ||
+ | struct bu_list lu_hd; /**< @brief wire loopuses (edge groups) */ | ||
+ | struct bu_list eu_hd; /**< @brief wire list (shell has wires) */ | ||
+ | struct vertexuse *vu_p; /**< @brief internal ptr to single vertexuse */ | ||
+ | long index; /**< @brief struct # in this model */ | ||
+ | }; | ||
+ | |||
+ | new: | ||
+ | struct shell { | ||
+ | '''uint32_t magic;''' | ||
+ | struct shell_a *sa_p; /**< @brief attribs */ | ||
+ | struct bu_list fu_hd; /**< @brief list of face uses in shell */ | ||
+ | struct bu_list lu_hd; /**< @brief wire loopuses (edge groups) */ | ||
+ | struct bu_list eu_hd; /**< @brief wire list (shell has wires) */ | ||
+ | struct vertexuse *vu_p; /**< @brief internal ptr to single vertexuse */ | ||
+ | '''char *manifolds; /**< @brief structure 1-3manifold table */''' | ||
+ | long index; /**< @brief struct # in this model */ | ||
+ | '''long maxindex; /**< @brief # of structs so far */''' | ||
+ | }; | ||
== Fix Debugs == | == Fix Debugs == |
Revision as of 01:41, 26 June 2014
Reorganize NMG Data Structure
The functionality of struct model and nmgregion are redundant to combination concept in BRL-CAD.
struct model {
uint32_t magic; struct bu_list r_hd; /**< @brief list of regions */ char *manifolds; /**< @brief structure 1-3manifold table */ long index; /**< @brief struct # in this model */ long maxindex; /**< @brief # of structs so far */
};
struct nmgregion {
struct bu_list l; /**< @brief regions, in model's r_hd list */ struct model *m_p; /**< @brief owning model */ struct nmgregion_a *ra_p; /**< @brief attributes */ struct bu_list s_hd; /**< @brief list of shells in region */ long index; /**< @brief struct # in this model */
};
Then, change struct shell to fit new nmg philosophy.
old:
struct shell {
struct bu_list l; /**< @brief shells, in region's s_hd list */ struct nmgregion *r_p; /**< @brief owning region */ struct shell_a *sa_p; /**< @brief attribs */ struct bu_list fu_hd; /**< @brief list of face uses in shell */ struct bu_list lu_hd; /**< @brief wire loopuses (edge groups) */ struct bu_list eu_hd; /**< @brief wire list (shell has wires) */ struct vertexuse *vu_p; /**< @brief internal ptr to single vertexuse */ long index; /**< @brief struct # in this model */
};
new: struct shell {
uint32_t magic; struct shell_a *sa_p; /**< @brief attribs */ struct bu_list fu_hd; /**< @brief list of face uses in shell */ struct bu_list lu_hd; /**< @brief wire loopuses (edge groups) */ struct bu_list eu_hd; /**< @brief wire list (shell has wires) */ struct vertexuse *vu_p; /**< @brief internal ptr to single vertexuse */ char *manifolds; /**< @brief structure 1-3manifold table */ long index; /**< @brief struct # in this model */ long maxindex; /**< @brief # of structs so far */
};
Fix Debugs
Due to the change of core NMG data structure, thousands of compiling errors are coming. I spend most time in these weeks to fix and test them properly.
28 functions in raytrace.h are removed because they are no longer necessary. The detailed list is as following:
- struct model *nmg_mmr(void);
- struct nmgregion *nmg_mrsv(struct model *m);
- int nmg_kr(struct nmgregion *r);
- void nmg_km(struct model *m);
- void nmg_region_a(struct nmgregion *r, const struct bn_tol *tol);
- struct model *nmg_find_model(const uint32_t *magic_p);
- struct vertex *nmg_find_pt_in_model(const struct model *m, point_t pt, struct bn_tol *tol);
- void nmg_pr_m(const struct model *m);
- void nmg_pr_r(const struct nmgregion *r, *h);
- int nmg_find_outer_and_void_shells(struct nmgregion *r, bu_ptbl ***shells, struct bn_tol *tol);
- fastf_t nmg_region_area(const struct nmgregion *r);
- fastf_t nmg_model_area(const struct model *m);
- struct model *nmg_mk_model_from_region(struct nmgregion *r, reindex);
- int nmg_mv_shell_to_region(struct shell *s, nmgregion *r);
- char *nmg_manifolds(struct model *m);
- void nmg_r_to_vlist(struct bu_list *vhead, struct nmgregion *r, int poly_markers);
- void nmg_m_to_vlist(struct bu_list *vhead, struct model *m, int poly_markers);
- void nmg_pl_r(FILE *fp, const struct nmgregion *r);
- void nmg_pl_m(FILE *fp, const struct model *m);
- void nmg_vlblock_r(struct bn_vlblock *vbp, const struct nmgregion *r, int fancy);
- void nmg_vlblock_m(struct bn_vlblock *vbp, const struct model *m, int fancy);
- void nmg_vshell(const struct bu_list *hp, const struct nmgregion *r);
- void nmg_vregion(const struct bu_list *hp, const struct model *m);
- void nmg_vmodel(const struct model *m);
- int nmg_ck_closed_region(const struct nmgregion *r, const struct bn_tol *tol);
- void nmg_r_radial_check(const struct nmgregion *r, const struct bn_tol *tol);
- void nmg_visit_region(struct nmgregion *r, const struct nmg_visit_handlers *htab, genptr_t state);
- void nmg_visit_model(struct model *model, const struct nmg_visit_handlers *htab, genptr_t state);