Skip to content

Instantly share code, notes, and snippets.

View cdiggins's full-sized avatar
🐉
Eliminating Lines of Code

Christopher Diggins cdiggins

🐉
Eliminating Lines of Code
View GitHub Profile
@cdiggins
cdiggins / revit-api-parameters.cs
Created July 15, 2025 15:37
Built in Revit API data as parameters
public void CreateCommonDescriptors()
{
AddDesc(ref _apiTypeDescriptor, "rvt:Object:TypeName");
AddDesc(ref _elementLevel, "rvt:Element:Level");
AddDesc(ref _elementLocation, "rvt:Element:Location.Point");
AddDesc(ref _elementLocationEndPointA, "rvt:Element:Location.EndPointA");
AddDesc(ref _elementLocationEndPointB, "rvt:Element:Location.EndPointB");
AddDesc(ref _elementBoundsMin, "rvt:Element:Bounds.Min");
AddDesc(ref _elementBoundsMax, "rvt:Element:Bounds.Max");
@cdiggins
cdiggins / BIMOpenSchema.cs
Created July 11, 2025 17:51
BIM Open Schema
// Schema for BIM data in an efficient columnar EAV format for loading into various tools and libraries.
using System.Collections.Generic;
namespace BIMOpenSchema;
/// <summary>
/// Contains all the BIM Data for a federated model.
/// We generally don't use this as-is except for serialization.
/// This is an EAV data model. It is intended to be denormalized into a set of components
/// </summary>
@cdiggins
cdiggins / revit_parameter_data_model.cs
Created July 7, 2025 15:52
Revit Parameter Data Model
public enum ParameterStorageTypeEnum
{
Unknown = 0,
Integer = 1,
Double = 2,
String = 3,
ElementId = 4
}
[Flags]
@cdiggins
cdiggins / BIM-object-model.js
Created March 21, 2025 17:47
Revit and BIM Object Model for Relational Databases
// This is a documented and lightly modified version of the Object Schema for VIM Files:
// https://github.com/vimaec/vim-format/blob/develop/docs/object-model-schema.json
{
// The "Area" table holds data about Revit area elements, including whether the area is gross interior,
// its perimeter, and references to its corresponding AreaScheme and Element. Use this table to track and
// calculate different kinds of areas within the model.
"Area": [
"boolean:IsGrossInterior",
"double:Perimeter",
@cdiggins
cdiggins / IfcPropertyDataReader.cs
Created July 29, 2024 19:02
NarwhalDB PoC for IFC Property Database
using Ara3D.Buffers;
using Ara3D.Collections;
using Ara3D.NarwhalDB;
namespace Ara3D.IfcParser;
public class IfcPropertyDataReader
{
public IfcPropertyDataReader(IReadOnlyList<ByteSpanBuffer> buffers)
{
@cdiggins
cdiggins / web-ifc-test.cpp
Last active July 12, 2024 03:21
Using Web IFC C++ to parse IFC files
/*
Modified from https://github.com/ThatOpen/engine_web-ifc/blob/main/src/cpp/web-ifc-test.cpp
This is a snippet of code used to properly benchmark Web IFC in C++
https://github.com/ThatOpen/engine_web-ifc for loading files and counting doors.
Unlike the previous code, we count the entire file load process.
*/
int main(int argc, char* argv[])
{
std::cout << "Web IFC test" << std::endl;
std::cout << "# args = " << argc << std::endl;
@cdiggins
cdiggins / concept-examples.plato.cs
Created December 14, 2022 16:30
Example of concepts in action
class ConceptExamples
{
Number Lerp(Number a, Number b, double t)
=> a * t + b * (1.0 - t);
Number Dot(Vector v)
=> (v * v).Sum().Sqrt();
Number Sum(Array xs)
=> xs.Aggregate((x, y) => x + y);
@cdiggins
cdiggins / Algebra.plato.cs
Last active December 3, 2022 16:35
Work in progress of expressing algebraic concepts
namespace Plato;
#region Groups
// https://en.wikipedia.org/wiki/Algebraic_group
interface IGroup<T>
where T : IGroup<T>
{
T GroupOperation(T x);
}
@cdiggins
cdiggins / PMoveTowards.cs
Created November 23, 2022 17:10
Unity Interpolation demo script
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
[ExecuteAlways]
public class PMoveTowards : MonoBehaviour
{
@cdiggins
cdiggins / animation-clip.cs
Created November 18, 2022 22:20
Animation Clip
public interface IAnimationCurve
{
double this[double t] { get; }
double Duration { get; }
}
public class AnimationClip<T> : IAnimationClip<T>
{
public AnimationClip(IAnimationCurve curve, T from, T to, Func<T, T, double, T> lerp)