Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Learn more about Tcl/Tk at http://www.tcl.tk
Full List of Project Mirrors: http://fossil.etoyoc.com/fossil

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

50 most recent timeline items

[30904b800f] Leaf: Fixing a warning on windows that is a failure on mac (user: hypnotoad, tags: trunk)
[7b4bcd768d] Typo fix (user: hypnotoad, tags: trunk)
[5c082166e9] Added a bias to prefer continuing the path of a line rather than turning when connecting a convex point to an edge. Added complex cases from irm compartments to the polygonxyz test (user: tne, tags: trunk)
[713fc8605d] Fine tuning and logic fixes to segset's polygon synthesis (user: tne, tags: trunk)
[3b344f8279] Adding a test file that I'd skipped (user: tne, tags: trunk)
[6c123a106d] Closing the faceset branch and pulling all changes in. (user: tne, tags: trunk)
[cef321fbcc] Pulling together two unintended branches (user: tne, tags: trunk)
[39bbbfdd79] Closed-Leaf: Tweaks to handle edge cases. Added a sawtooth pattern to the tests (user: tne, tags: faceset)
[72df4d4fc9] Resolve a crash in segset if the tclapi changes the modified value without dumping the polygon cache (user: tne, tags: faceset)
[c99de7bffb] 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 (user: tne, tags: faceset)
[5624575d46] 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. (user: tne, tags: faceset)
[481a6d544c] 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 (user: tne, tags: faceset)
[5ad290b101] 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. (user: tne, tags: trunk)
[0b3e53d50e] 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 (user: tne, tags: faceset)
[c767c81bbc] Fixing a typo in VectorXYZ (user: swoods, tags: trunk)
[e9881fc477] Added a polygon decompose function. Fixes to ensure other colinear tests register there and back again loops (user: tne, tags: faceset)
[bbf70d1efb] Added a check to determine a line doubling back on itself is colinear in 2d (user: tne, tags: faceset)
[fe52eed2be] Added a backface exclusion marker to segsets. Segsets now report their bounding box Added tcl api tools to manage 3d and 2d bounding boxes (user: tne, tags: faceset)
[b6b4e20a32] Added checks to break up moby angles and made "make convex" clean up after each phase (user: tne, tags: faceset)
[2040e0bbfd] 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. (user: tne, tags: faceset)
[6990ffe5ad] 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. (user: tne, tags: faceset)
[ae31364727] Tweaks to handle edge cases in IRM (user: tne, tags: faceset)
[7bbb6f377d] 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) (user: tne, tags: faceset)
[78039d873b] Simplifying the process of rendering matrix objects as strings. The prior process was producing a lot of zeros where there were still significant digits. (user: tne, tags: faceset)
19:08 • Edit [cf34a098fce1593e|cf34a098fc]: Move to branch irm2d. Add propagating "closed". Add propagating "hidden". (user: hypnotoad)
[7e331fa74e] Fixed a case where within_concave was counting on the old behavior of polygon within (user: tne, tags: faceset)
[fdc86a9745] 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 (user: tne, tags: faceset)
[80061598d4] 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 (user: tne, tags: faceset)
[25af608acb] 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. (user: tne, tags: faceset)
[8beb960bee] 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) (user: tne, tags: faceset)
[286181e108] 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. (user: tne, tags: faceset)
[c6a1ef9cad] Fixed a case in VectorXYZ_LineLineCoincident that was missing intersections of lines. Removed debugging printf() statements. Fixed a test that was wrong. (user: tne, tags: faceset)
[e7bd5f3815] 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 (user: tne, tags: faceset)
[bbadeb37b3] 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.) (user: tne, tags: faceset)
[c48857859c] 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. (user: tne, tags: faceset)
[4c43474ff5] 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. (user: tne, tags: faceset)
[7d661ebd78] 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 (user: tne, tags: faceset)
[43ff500b29] 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. (user: tne, tags: faceset)
[1a0e4f962d] 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. (user: tne, tags: faceset)
[36a6a9865f] Modified polygon namespace commands to use the same shimmer on exit approach used in the polygonxyz namespace (user: tne, tags: faceset)
[279797e95e] 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 (user: tne, tags: faceset)
[a87f89543c] 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. (user: tne, tags: faceset)
[595fdff77d] Added a coincident check that needs to be accurate for polygon testing operation to work in another test (user: tne, tags: faceset)
[16237ef660] Added new function to generate rotation quaterionions from normal vectors (user: tne, tags: faceset)
[e8ec27a335] 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. (user: tne, tags: faceset)
[30c6a48dcb] 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. (user: tne, tags: faceset)
11:39 • Edit [e3e0351bf5d8ee22|e3e0351bf5]: Move to branch faceset. (user: hypnotoad)
[b187c6a414] 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 (user: tne, tags: faceset)
[0bf9b155fc] 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 (user: tne, tags: faceset)
[2251e12cf2] 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 (user: tne, tags: faceset)