Timeline
Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2018 Conference, Houston/TX, US, Oct 15-19
Send your abstracts to tclconference@googlegroups.com or submit via the online form
by Aug 20.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

50 most recent check-ins related to "faceset"

2017-08-22
14:33
Closing the faceset branch and pulling all changes in. check-in: 6c123a106d user: tne tags: trunk
2017-08-15
18:27
Tweaks to handle edge cases. Added a sawtooth pattern to the tests Closed-Leaf check-in: 39bbbfdd79 user: tne tags: faceset
2017-08-10
08:41
Resolve a crash in segset if the tclapi changes the modified value without dumping the polygon cache check-in: 72df4d4fc9 user: tne tags: faceset
08:11
Added an optimization to use a quasi-bounding box rule to exclude coincidence checks for vectors that don't share the same region of space check-in: c99de7bffb user: tne tags: faceset
03:44
Added a looseend check to cleanup Added logic that restricts convex intercepts to points that actually fall on other line segments Revised the logic for check_oblique Added a coincident check in the make_convex method for segsets. Added the ability to monitor and control the "modified" flag for setsets. check-in: 5624575d46 user: tne tags: faceset
2017-08-07
20:58
2d polygons now use a similar arrangement to polygonxyz to shimmer AFTER the operation is complete. Added 2d versions of boolean set operations to polygons New implementation of check_oblique that does not depend on polygons having been formed first. Also does a better job with edge cases. Re-added a grid for individual segment sets. But that really doesn't seem to work well when not coupled with odielib grid and vector tolerance check-in: 481a6d544c user: tne tags: faceset
19:11
Preliminary merge to get build system changes in, as well as new vectorxyz function needed for IRM. Note that segset and faceset are still not ready for prime time. check-in: 5ad290b101 user: tne tags: trunk
2017-08-02
11:58
Added a mechanism to allow polygonxyz and polygon namespace commands to accept inputs from one another. Added a routine to have the segset export 2d polygons directly check-in: 0b3e53d50e user: tne tags: faceset
2017-08-01
16:57
Added a polygon decompose function. Fixes to ensure other colinear tests register there and back again loops check-in: e9881fc477 user: tne tags: faceset
16:52
Added a check to determine a line doubling back on itself is colinear in 2d check-in: bbf70d1efb user: tne tags: faceset
2017-07-30
09:28
Added a backface exclusion marker to segsets. Segsets now report their bounding box Added tcl api tools to manage 3d and 2d bounding boxes check-in: fe52eed2be user: tne tags: faceset
2017-07-27
15:43
Added checks to break up moby angles and made "make convex" clean up after each phase check-in: b6b4e20a32 user: tne tags: faceset
00:41
Moved polygon 3d code back to polygonxyz Reverted 2d polygon implementation back to the old version Added a 2d implemenations of several tests that the old version lacked. Eliminated the grid from segset. Too many conflicts between the internal grid and vector tolerance. check-in: 2040e0bbfd user: tne tags: faceset
2017-07-25
10:38
Reimplemented SegmentSetNext() to use an absolute angle measurement instead of using bend direction as an early sort. Fixes a lot of pathological cases in IRM. check-in: 6990ffe5ad user: tne tags: faceset
2017-07-24
17:49
Tweaks to handle edge cases in IRM check-in: ae31364727 user: tne tags: faceset
2017-07-22
08:48
Fixed a crash in polygon::within Reverted to an older routine for Polygon_WithinUV that seems to be producing better answers Renamed polygon::union to polygon::set_union Renamed polygon::intersection to polygon::set_intersection Renamed polygon::clib to polygon::set_difference. Revised the logic to work on the principle of "return all things NOT this set..." The set operations have reverted to using the "centercoord within" logic, intersect_test_uv does not seem ready for prime time Condending check_coincident, delete_overlapping, and check_intersect into a single method "cleanup" (with similar changes internally in c) Added the concept of an internal grid to segment sets. This causes vertices to always fall at discrete intervals Where needed, the segset's grid will actually change out the Vector_Tolerance to its own grid, and then revert after the operation. Multiple logic and math fixes. Added a polygon_info command to debug the edge cache Added a facewide bend factor to distinguish clockwise from counterclockwise polygons Vector_Tolerance also populates Vector_Tolerance_Sq to allow direct comparison to squared magnetudes without having to perform two square root ops. Revised the logic for VectorXYZ_LineLineCoincident(). The Tcl API function now returns the code and the intercept points. Broke the low level segset tests out ot the polygonxyz test and into a dedicated file Moved in-common utilities for testing into the procs.tcl file Polygon operations now handle all but the most oddball cases. (Case U) check-in: 7bbb6f377d user: tne tags: faceset
2017-07-18
13:07
Simplifying the process of rendering matrix objects as strings. The prior process was producing a lot of zeros where there were still significant digits. check-in: 78039d873b user: tne tags: faceset
2017-07-14
16:23
Altered 2d behavior and API to match behavior (however wrong...) that older version of IRM were counting on check-in: cf34a098fc user: tne tags: irm2d
15:40
Fixed a case where within_concave was counting on the old behavior of polygon within check-in: 7e331fa74e user: tne tags: faceset
15:38
Set the polygon within commands arguments to be able to accept either X Y or POINT and moved the ability to evaluate over N polygons to a new command within_set check-in: fdc86a9745 user: tne tags: faceset
2017-07-13
08:44
Reset the field order for bounding boxes to match external standards. 2d boxes are now TOP LEFT RIGHT BOTTOM. 3d boxes are XMIN YMIN ZMIN XMAX XMIN ZMIN Added a simplify stage to the native faceset Added an improved gerator to produce polygon access methods and the info function. Removed the left/right facelinks for faceset. Just a number seems to be working better for large sets. Fused the Odie_Polygon_ComputeXYZ and Odie_Polygon_ComputeXY routines into a common Odie_PolygonCompute Combined all of the polygonxyz functions and polygon functions into a unified namespace polygon Reverted the Polygon_WithinUV to the prior version, which seems to manage concave cases better. Removed functions in the polygon namespace that were duplicates of other functions in the shapes namespace Improvements to check_oblique in segset Added a vector::isnull command to allow a test for null without shimmering the object More test cases This version passes all of the polygon visual tests check-in: 80061598d4 user: tne tags: faceset
2017-07-10
16:45
Improvements to faceset. Instead of edge matching in now looks for coplaner faces with areas of intersection. SegmentSet now marks a flag when the cache needs to be rebuilt. Renamed VectorNNN_DotProduct to VectorNNN_Dot_Product (to be consistent with Cross_Product) Added a new coplaner test in the vectorxyz namespace Renamed the face_coords method to face_polygon, and it now exports an Odie_polygon data structure. check-in: 25af608acb user: tne tags: faceset
2017-07-09
11:39
Removed debugging code. Added general purpose polygon union, intersection, and clipping tools to the polygonxyz namespace. Currently implemented as pure-tcl, but there is the potential in the future to make them C. (The expensive bits are already C) check-in: 8beb960bee user: tne tags: faceset
2017-07-08
22:17
segset: Added independent flags for forward/back segment marking. Removed flags that are no longer used by either segset or wallset. Added a dynamic generator to build the access routines for segment fields. SegSet_Insert_Polygon now operates by looking at the direction of segments relative to its own UV system rather than hoping all polygons are given in clockwise or counter clockwise directions. SegmentSetNext() now takes in a Segment data structure and direction rather than raw coordinates. This allows it to access the segment's internal flags. SegmentSetNext() now prefers edges to non-edges. Edges are defined as a virtual wall, or the side of a non-virtual wall that has been marked with a compartment. On building a the edge cache, if one loop canibalizes another loop it shreds all of the links in the cannibalized loop. The edge cache builder now marks complete loops, and prevents them from being cannibalized. Removed debugging printf() and fflush() calls. Fixed a math error on the number of edges for a segment set in the polygons method. Re-ordered checks in the tests to ensure polygon unions are formed correctly. check-in: 286181e108 user: tne tags: faceset
2017-07-07
10:20
Fixed a case in VectorXYZ_LineLineCoincident that was missing intersections of lines. Removed debugging printf() statements. Fixed a test that was wrong. check-in: c6a1ef9cad user: tne tags: faceset
2017-06-29
10:22
Minor improvements add the ability for edge connection to specify which edge to connect Moved the oblique check to the end. Still producing odd shapes check-in: e7bd5f3815 user: tne tags: faceset
2017-06-28
14:41
Revert to sprintf() for Vector to string. The extra decimal places are wrecking my regression tests Fixed the size of UV maps in the unified Odie_Polygon data structure Polygon_Within now uses the VectorXY_BendDirection tool instead of rolling its own. (And now actually works to boot...) Implementing a new seed/growth algorithm for forming polygons from segments. (Still not perfect, but its far less easily fooled than the method used by wallset and the method used by the concave decomposition tool.) check-in: bbadeb37b3 user: tne tags: faceset
2017-06-27
06:46
Renamed several affine_XXXXX series functions Odie_Affine4x4_XXXXX More tweaks to make 2d and 3d bounding boxes play nicely with the same indices Added an inverse rotation to polygons and segment sets. Removed the habit of polygons to add an extra vertex to facilitate looping back to the origin. Added a canvascoords command to polygons to facilitate rending shapes on canvases. Removed the code that forces polygons to be counter clockwise XYZ points always overwrite uv coords for polygons now. The affair between the wallset and segset is, alas, over. Reverted Wallset to the version in Trunk to cut down on possible breakage. Added Segset specific data structures to do the roles that we had copted structures from wallset to accomplish. Segset now uses a "die marker" style of unrolling loops. Like the triangularization tool, it likes to see the world as counterclockwise loops. But instead of shredding the segset as it goes, it marks the edges it traces for each loop, and prevents later traces for stealing them for new loops. Added translation mapping for polygon and segest transforms. Segment sets are now back to useing 3d coordinates internally, The compute UV coordinates on the fly to handle cases where we want the answer from 2d math functions, but in all other respects they use 3d where practical. check-in: c48857859c user: tne tags: faceset
2017-06-23
21:11
Reorganized the affine4x4 source file Switched from sprintf() to Tcl_PrintDouble for converting matrices to strings Added an affine rotation matrix to segest and polygon. Renamed the vertex_xy field to vertex_uv. UV is now a pure 2d value that is mapped from the 3d value and rotated by the rotation matrix to make a psuedo-2d point. Porting tools from wallset to generate compartment boxes and walk segment sets to produce lists of vectors. check-in: 4c43474ff5 user: tne tags: faceset
14:29
Adapted to new practcl notation: c_tclproc_raw -> c_tclcmd cmethod -> c_tcloomethod Renames the affine3d namespace affine4x4 Fixed a few off-by-one errors in the code that generates affine function Added affine_compare to the Tcl and C API Affine functions now follow the convention throughout the rest of the library, the value to be modified first. Added aliase for rotate_pitch,rotate_yaw,rotate_roll, rotate_spin,rotate_nutation,rotate_precession New implementation of affine from euler Added a built-in "up" vector, with the possibility of altering it in the future Added a C and TCL api function to convert normals into affine 4x4 matrices Matrix_Free now uses refCount to figure out when to free data check-in: 7d661ebd78 user: tne tags: faceset
00:24
Simplified the API for calling Matrix objects into being. The only stickler now is that you have to know what size and form you want (or at least the size) ahead of time. Working on making functions and data structures friendly for integration into larger projects. Starting the work of prepending "Odie_SYSTEM_TYPE_VERB" to function names and Odie_XXXX to data structures Odie_MatrixObj can now be freed with a standard free, the storage for the array is now always the flexible type at the end of the structure, and we pre-malloc the expected size. Replaced the Matrix_NewObj()...Matrix_Alloc system with two new functions Odie_MatrixObj_Create and Odie_MatrixObj_Create_NXN Create takes a form, NXN assumes something formless but in need of NXN columns. The minimum size allocated is for a 4x4 matrix. Reorderd the indices for AABB style 3d bounding boxes so the X and Y extents can map over a 2d bounding box. Continuing work on combining the core functions of segmentset and wallset. Now segmentset indexes by To coordinate and tracks segment ids. segment_add is now a sticker for unique links. Added a new method segment_add_virtual to mimic the carefree behavior of old. Polygons can now paint a "compartment" on the inside of walls they define. With luck this will allow use to solve some of our edgier cases. Changes the isBoundary field to isVirtual and reversed the logic. Now true boundaries are false, and and setting above that is assumed to be user defined. Added a "Odie_Matrix_to_Fit" function for cases like vector namespace commands where we are playing fast and loose with the type of inputs we are expecting. check-in: 43ff500b29 user: tne tags: faceset
2017-06-22
18:55
Combined the Wallset and SegmentSet data structures. The Wallset object is now a descendent of SegSet Non-2d specific calls for Wallset methods moved to SegSet SegSet now indexes on TO as well as ID. Improved the coordinate hashing system for the general case in IRM. check-in: 1a0e4f962d user: tne tags: faceset
16:56
Modified polygon namespace commands to use the same shimmer on exit approach used in the polygonxyz namespace check-in: 36a6a9865f user: tne tags: faceset
16:42
Unified the PolygonXYZ and Poly data structure into a command Odie_Polygon, which tracks both 2d projections and 3d. Created an Odie_Polygon_Create function to handle the quirks of allocating memory for 2 dynamically allocated arrays. To differentiate between the 2d and 3d realm, Odie_Polygon stores vector_xy and vector_xyz. The vertex count tracks with both. Added C implemented segment tools for common use cases: edge_connection - Find the other end of a point on the boundary that is not coincident with another edge. check_intersecting: Return a report of segments that intersect within the segment set check_coincident: Return a report of segments that are coincident segment_linelineintersect - Compute the intercept points for all segments given an external line. segment_coincident: Return a list of all segments that are coincident with a given line segment_find: Return a list of segments that have a vertex on the point specified segment_next: Return the next segment in a sequence given a segment segment_oblique: Return a list of segment chains that produce oblique angles segment_orphans: Return a list of segments that do not connect with other segment check-in: 279797e95e user: tne tags: faceset
2017-06-21
23:04
Reimplemented the segset tool as a TclOO object. (It needed so much state, treating it as a TCL value was getting unwieldy) Added a "trash can" style memory cleanup for segsets. Instead of immediately freeing data structures, it places them in a "take me bin" that it reads from the next time it wants to allocate a new structure. When we destroy the set, all of the items are unlinked (which puts them in the trash) and then freed en-masse. Reimplemented the polygon method to not destroy the segset while its running. Instead it marks the data structures it has exported in a way that it knows not to count them more than once. On the second pass to the polygons command, WalkSegmentSet is only run if the segset was modified. Fixed a bug in the VectorXYZ_IsColinear that occurs for near-zero values for key terms not being recognized as zero. The polygonxyz tests now include examples with clipping, intersection, and union. check-in: a87f89543c user: tne tags: faceset
15:42
Added a coincident check that needs to be accurate for polygon testing operation to work in another test check-in: 595fdff77d user: tne tags: faceset
12:01
Added new function to generate rotation quaterionions from normal vectors check-in: 16237ef660 user: tne tags: faceset
03:05
Added a function VectorXYZ_Zero to zero a vector Added a user controllable tolerance for "closeness" Renamed the withinPolygon function PolygonXY_Within Added a center and radius field to PolygonXYZ Created a PolygonXYZ_Within_Polygon_2d which uses a 2d variation of the check that exploits the fact that most polygons will be axis aligned. Moved the edge check for PolygonXYZ_Within ahead of the triangle test. Created polygonxyz::compare to return true or false of polygons are equivilent Added a tcl and C api function to simplify polygons Added a function to perform batch checks of a sea of points: ::polygonxyz::points_within Created a new function VectorXYZ_ToString() Segset now uses a linked list to finalize the chain of vectors when assembling polygons. Added logic to attempt to close off loops in complex shapes Added logic to prevent looping back in complex shapes segset::polygons now returns PolygonXYZ structures The tcl implementation of polygon clipping now produces plausible output. check-in: e8ec27a335 user: tne tags: faceset
2017-06-19
11:49
Added a new command ::polygonxyz::xycoords which expresses a 3d vector as a 2d axis aligned set of points. It happily switches the axis to allow an arbitrary axis aligned polygon to be displayed on an XY canvas Fleshing out the C implementation of polygonxyz Fixed several TclObj issues with the polygonxyz type Moved the pure tcl implementation of polygon commands in the test suite to tcl_polygonxyz Added a C and Tcl api call to compute the normal of three points The VectorXYZ_Angle_Three_Points now expects an addtional argument with the normal of the plane the three points reside on. Added a C and TCL api call to return the axis a normal is aligned to. Renamed the segset::decompose function to segset::polygons Injected some debugging code into the vertex walking system for segset Added a command to list the contents of a segset. (To prevent having to assemble a string representation and convert that to a list.) Added a command to delete a segment from a segment set Added a command to insert a polygon into a segment set Added a C API for polygonxyz, segset is now aware of how to read data from that tcltype Added a linked list to track the sequence of ripping a segment set apart into polygons The C and TCL API are now such that I can successfully clip a polygon from the interior of another polygon. check-in: 30c6a48dcb user: tne tags: faceset
2017-06-15
22:11
Revamped the logic for vector bend tests. The 3d version now tries to exploit 2d plane tests if it detects surfaces that are axis aligned. Revamped the coordinate hashing scheme Dusted off the segset tool, adapted it to handle 3d coordinates. More progress on polygon clipping check-in: b187c6a414 user: tne tags: faceset
2017-06-14
21:13
Added a new inline VectorXYZ_IsZero Added a new command vectorxyz::polygon_normal_compare VectorXYZ_DotProduct handles zero magnetude results more gracefully VectorXYZ_Normalize returns an integer indicating if the normalized vector is in fact zero; Added a new vectorxyz::rightof (and VectorXYZ_Rightof) to return if two vectors make a right turn (wrt the left hand rule) Added a function to return the angle made by three 3d points Moved polygonxyz tests to a dedicated test file check-in: 0bf9b155fc user: tne tags: faceset
2017-06-10
03:18
Revamped the structure of the geometry module to allow datatypes to be declared outside of the objecttype core. (And ideally with the rest of the type's implementation.) Moved type and form specific code into the sub-modules that define them. Invented a new bbox and aabb form for matrices to store bounding data. condensed the heart of the matrix type system to a single file cmatrixforms.tcl Moved constants to new file const.tcl Added vectorxyz::zero, vectorxyz::scale, vectorxyz::distance vectorxyz::distanceSq, vectorxyz::point_in_triangle, vectorxyz::aabb_intersect, vectorxyz::polygon_normal, Corrected a typo in vectorxyz::triangle_line_intersect Added regression tests for vectorxyz namespace functions Started work on a polygonxyz namespace check-in: 2251e12cf2 user: tne tags: faceset
2017-06-08
20:40
Added a facility of injecting a vertex into a face within the polygonhull tool check-in: 89a907fc4c user: tne tags: faceset
07:08
Reimplemented the tests for face_within Added a new routine vectorxyz::within_aabb Faces now calculate a bounding box which is used to accellerates face_within, and clean up pathological cases involiving axis aligned large polygons check-in: 5f1122e887 user: tne tags: faceset
05:34
The tool in the polygonhull to locate a vertex by coordinates was not working. We now follow up a full search of all vertices if the hashed coordinate search turns up empty. Devised a link list to store a temporary list of new vertices for a face temporarily during creation. When computing other aspects, the tool now allocates memory and re-links faces to vertices. Replaced the custom hash-tableish system in the polygon faceset with the Sqlite Hash implementation for integer keys. Storing radius^2 for faces to speed up distance searches and to allow a radius check to work list a bbox Added a function to detect if a point is within a polygon face Added a pointer check for VectorXYZ_SamePoint (cheap and covers the same array pointer) Tweaked the rules for vectorxyz::linelineinstersect Added new parts of the faceset test to detect connecting faces check-in: f90479638d user: tne tags: faceset
2017-06-07
17:52
Renamed odielib::faceset to ::odielib::polygonhull Renamed functions and reorganized the faceset file (prepping to add surfaces and polygon groups) Added a function to sort two vectors into an AABB bounding box check-in: 990e14e01a user: tne tags: faceset
2017-06-06
20:11
Moving more functions into their proper namespace Reimplement the XYZ version of line coincident checks. Added more regression tests to catch edge cases. Added several sub-operation commands to VectorXYZ to diagnose math goofs in regression tests Added several numerical safeties to ensure the Tcl interface to Odielib Does The Right Thing (tm) when presented with pathologial cases. check-in: 5dc58addb3 user: tne tags: faceset
11:33
Applied a more consistent naming pattern to C functions. Moved generic geometry tests that are genuinely useful out of the faceset tool and into vectorxyz Replaced custom functions in Faceset with more general versions (that do the same thing) in Vector3d Reversed the direction of Vector subtraction to be more like what users/developers would expect: RESULT=A-B. (We were doing a more RPN style where RESULT=B-A) Moved routines out of ODIEMATH if there is a better location within a numerical namespace Fixed the vector regression tests to match the new behavior of subtraction check-in: 8c4f584dd0 user: tne tags: faceset
2017-06-05
21:45
When requesting or creating quaternion the library now asks via the proper channels rather than accepting input as gospel. Fixed several compiler warnings. check-in: cc05805c5e user: tne tags: faceset
17:57
To reduce testing, went back to a singular Tcl_ObjType for all vector/matrix routines. Reimplemented all Tcl_Obj->Matrix routines to run the conversion to double through and intermediary variable instead of trying to directly access the chunk of memory VectorXYZ, VectorXY, and Quaterion are now back to their proper sizes All matrix types now reserve enough space to contain a 4x4 matrix (at the very least) Fixed some pointer goofs in faceset Eliminated all compiler warnings for the geometry module Replaced Tcl_Free with Odie_Free (which under normal cases is just ckfree) Internally Odie_Alloc now calls ckalloc Added a "create" and "compare" operator for VectorXY and VectorXYZ Rewrote the tests/vector.tcl file as a proper Tcl regression test Can now get through all of the faceset tests without a segfault check-in: 99d956a346 user: tne tags: faceset