Toward Optimistic Version Control in Architecture

Diffing, Patching, and Three-Way Merging for openNURBS 3D Models

A thesis submitted to the faculty of The University of North Carolina at Charlotte in partial fulfillment of the requirements for the degrees of Master of Architecture and Master of Science in Information Technology

The ability of architects to collaborate and work in parallel on digital assets is limited by pessimistic strategies for managing shared files. The software engineering community has worked around this problem by adopting optimistic version control techniques, which rely on the ability to diff, patch, and merge versions of the files they manage. Unfortunately, the diffing, patching, and merging algorithms in existing version control systems are designed to work with text, and not with the types of files, such as 3D models, most commonly used by architects. This thesis describes a set of command line programs capable of diffing, patching, and merging openNURBS models, an open-source 3D model format that enjoys widespread use among architects and other design professionals. Integration of these programs into an off-the-shelf version control system is demonstrated, and an abstract domain model is presented which can be used to apply their capabilities to other file formats as well.

Contents

  1. Dedication
  2. Acknowledgements
  3. Chapter 1: Introduction
  4. Chapter 2: Background
    1. Version Control Systems
    2. Diffing, Patching, and Merging
    3. Benefits of Optimistic Version Control in Architecture
    4. Research into Version Control for Architecture and Related Disciplines
  5. Chapter 3: Methods
    1. OpenNURBS
    2. Programming Languages
    3. The Unix Philosophy
    4. Delta Format
    5. System Architecture
  6. Chapter 4: Implementation
    1. The Abstract Model
    2. The Adapter Layer
    3. Command Line Interface
    4. Git Integration
  7. Chapter 5: Demonstration
    1. Diffing and Patching
    2. Merging via the Command Line
    3. Merging via Sourcetree
  8. Chapter 6: Discussion
    1. A Proof of Concept
    2. Floating Point Numbers
    3. Beyond UUIDs
    4. Conflict Resolution
    5. Optimism in the Real World
    6. Conclusion
  9. References
  10. Appendix A: Reprint Permissions
  11. Appendix B: OpenNURBS Geometry Types
  12. Appendix C: Open Source Contributions
  13. Appendix D: Supported Component Types
  14. Appendix E: Source Code

Figures

Figure 1.1
Resource locking in action
Figure 2.1
Branching and merging
Figure 2.2
Diffing and patching
Figure 2.3
Three-way merging
Figure 3.1
Example transformation matrices
Figure 3.2
The layered architecture of the 3dmdiff suite
Figure 4.1
A UML diagram of the Stringable, Value, and Delta interfaces
Figure 4.2
A UML diagram of the remainder of the abstract model
Figure 5.1
The original Maison Dom-ino tracing
Figure 5.2
A modified version of the Dom-ino tracing
Figure 5.3
Another modified version of the Dom-ino tracing
Figure 5.4
The merged model
Figure 5.5
Authoring a commit
Figure 5.6
Creating a branch
Figure 5.7
After committing changes on alternate
Figure 5.8
After committing changes on master
Figure 5.9
After merging
Figure 6.1
Two approaches to point registration
Figure 6.2
A twisted cube
Figure 6.3
Examples of floating-point numbers