Toward Optimistic Version Control in Architecture

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

Appendix C
Open Source Contributions

The rhino3dm package provides bindings for the openNURBS library for the Python programming language. Unfortunately, those bindings are incomplete; a number of functions and data types defined in the openNURBS C++ library are not available in Python. During the course of this thesis, seven pull requests containing enhancements and corrections were submitted to the rhino3dm Github repository. As of this writing, four of those pull requests have been accepted by Robert McNeel & Associates and merged into the rhino3dm source.

Linetype Bindings

Pull request #477 seeks to enable inspection and manipulation of line types by adding the Linetype and File3dmLinetypeTable classes. It has not yet been accepted.

Pull request #477 was merged into rhino3dm’s dev branch on July 17, 2023.

Editorconfig File

Pull request #478 added an .editorconfig file to the repository to help ensure the project's coding conventions. It was accepted on September 5, 2022.

Equality Operators

Pull request #479 added support for the equality (==) and inequality (!=) operators on the Interval, Point2d, Point2f, Point3d, Point3f, Point4d, Vector2d, Vector3d, and Vector3f data types. It was accepted on September 8, 2022.

Arc Plane Property

Pull request #480 added a Plane property to the Arc class. It was accepted on September 18, 2022. An earlier version of this pull request also included a Normal property for the Arc class and added a setter to the Arc property of the ArcCurve class. Those changes were rejected because they lacked precedent in the RhinoCommon API after which rhino3dm is modeled.

Spelling Corrections

Pull request #481 fixed a few spelling mistakes that were present in the rhino3dm code. It was accepted on October 31, 2022.

Group Deletion

Pull request #482 seeks to add a Delete method to the File3dmGroupTable class. It has not yet been accepted.

Pull request #482 was merged into rhino3dm’s dev branch on July 17, 2023.

Transform Properties and Methods

Pull request #483 seeks to add the following properties and methods to the Transform class:

IsAffine
boolean
Indicates whether the Transform is affine.
IsLinear
boolean
Indicates whether the Transform is linear.
IsRotation
boolean
Indicates whether the Transform is a proper rotation.
RigidType
TransformRigidType
Indicates whether the Transform is rigid.
SimilarityType
TransformSimilarityType
Indicates whether the Transform is an orientation-preserving or orientation-reversing similarity.
Rotation
startDirection
Vector3d
endDirection
Vector3d
center
Point3d
Transform
Creates a Transform that rotates from the direction specified by one vector to the direction specified by another.
PlaneToPlane
fromPlane
Plane
toPlane
Plane
Transform
Creates a Transform that moves and re-orients objects in one plane to another.
Shear
plane
Plane
x
Vector3d
y
Vector3d
z
Vector3d
Transform
Creates a shear transformation.

This pull request has not yet been accepted.

Pull request #483 was merged into rhino3dm’s dev branch on July 17, 2023.