Difference between revisions of "User:Clouddrift/GSoC2014/Midterm"

From BRL-CAD
(Fix Debugs)
(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);

Conclusion