vault backup: 2025-09-20 12:47:05
This commit is contained in:
+30
-26
@@ -1,8 +1,32 @@
|
|||||||
{
|
{
|
||||||
"recentFiles": [
|
"recentFiles": [
|
||||||
{
|
{
|
||||||
"basename": "pre-takeoff-confirmation",
|
"basename": "automating-pdf-annotation",
|
||||||
"path": "pre-takeoff-confirmation.md"
|
"path": "automating-pdf-annotation.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "automating-estimating-project-creation",
|
||||||
|
"path": "automating-estimating-project-creation.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "automating-email",
|
||||||
|
"path": "automating-email.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "assembly-philosophy",
|
||||||
|
"path": "assembly-philosophy.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "assembly-objects",
|
||||||
|
"path": "assembly-objects.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "breakdown-objects",
|
||||||
|
"path": "breakdown-objects.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "feeders",
|
||||||
|
"path": "feeders.md"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"basename": "full-takeoff",
|
"basename": "full-takeoff",
|
||||||
@@ -12,6 +36,10 @@
|
|||||||
"basename": "README",
|
"basename": "README",
|
||||||
"path": "README.md"
|
"path": "README.md"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"basename": "pre-takeoff-confirmation",
|
||||||
|
"path": "pre-takeoff-confirmation.md"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"basename": "breakdowns",
|
"basename": "breakdowns",
|
||||||
"path": "breakdowns.md"
|
"path": "breakdowns.md"
|
||||||
@@ -20,30 +48,10 @@
|
|||||||
"basename": "subfeeds",
|
"basename": "subfeeds",
|
||||||
"path": "subfeeds.md"
|
"path": "subfeeds.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"basename": "assembly-philosophy",
|
|
||||||
"path": "assembly-philosophy.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "automating-pdf-annotation",
|
|
||||||
"path": "automating-pdf-annotation.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "automating-estimating-project-creation",
|
|
||||||
"path": "automating-estimating-project-creation.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"basename": "project-setup",
|
"basename": "project-setup",
|
||||||
"path": "project-setup.md"
|
"path": "project-setup.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"basename": "breakdown-objects",
|
|
||||||
"path": "breakdown-objects.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "assembly-objects",
|
|
||||||
"path": "assembly-objects.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"basename": "2025-07-18_estimating-isnt-engineering",
|
"basename": "2025-07-18_estimating-isnt-engineering",
|
||||||
"path": "2025-07-18_estimating-isnt-engineering.md"
|
"path": "2025-07-18_estimating-isnt-engineering.md"
|
||||||
@@ -108,10 +116,6 @@
|
|||||||
"basename": "area-of-refuge",
|
"basename": "area-of-refuge",
|
||||||
"path": "area-of-refuge.md"
|
"path": "area-of-refuge.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"basename": "feeders",
|
|
||||||
"path": "feeders.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"basename": "lightning-protection",
|
"basename": "lightning-protection",
|
||||||
"path": "lightning-protection.md"
|
"path": "lightning-protection.md"
|
||||||
|
|||||||
+27
-7
@@ -10,19 +10,33 @@ tags:
|
|||||||
# Assembly Objects
|
# Assembly Objects
|
||||||
|
|
||||||
```cs
|
```cs
|
||||||
public class GangableReceptacle : IGangableDevice
|
public class GangableReceptacle : IGangableDevice, IUtilizationEquipment
|
||||||
...
|
{
|
||||||
|
public int Gangs { get; }
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
public class GangableSwitch : IGangableDevice
|
public class GangableSwitch : IGangableDevice
|
||||||
...
|
...
|
||||||
|
|
||||||
public class OutletBox
|
public class DeviceBox : IOutletBox
|
||||||
{
|
{
|
||||||
public List<IUtilizationEquipment> Contents;
|
private List<IGangableDevice> _contents;
|
||||||
|
|
||||||
public void Add(IUtilizationEquipment)
|
public void Add(IGangableDevice device)
|
||||||
{
|
{
|
||||||
// Add to contents or throw if incompatible
|
_contents.Add(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetGangs()
|
||||||
|
{
|
||||||
|
int gangs = 0;
|
||||||
|
foreach (device in _contents)
|
||||||
|
{
|
||||||
|
gangs += device.Gangs
|
||||||
|
}
|
||||||
|
return gangs
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Item> Resolve()
|
public List<Item> Resolve()
|
||||||
@@ -43,9 +57,15 @@ public class OutletBox
|
|||||||
- type: transfer-switch
|
- type: transfer-switch
|
||||||
parents: 2
|
parents: 2
|
||||||
children: 1
|
children: 1
|
||||||
|
primary-rating: amperes
|
||||||
|
|
||||||
- type: transformer
|
- type: transformer
|
||||||
parents: 1
|
parents: 1
|
||||||
children: 1
|
children: 1..
|
||||||
primary-rating: volt-amperes
|
primary-rating: volt-amperes
|
||||||
|
|
||||||
|
- type: generator
|
||||||
|
parents: 0
|
||||||
|
children: 1..
|
||||||
|
primary-rating: watts
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -10,7 +10,29 @@ tags:
|
|||||||
|
|
||||||
See [[portable-tools]] for valid dependencies.
|
See [[portable-tools]] for valid dependencies.
|
||||||
|
|
||||||
## Bluebeam Revu Measure Hack
|
## Clean Documents
|
||||||
|
|
||||||
|
### Page Rotation
|
||||||
|
|
||||||
|
Pages have a rotation value independent of appearance
|
||||||
|
which rotates the drawing reference grid.
|
||||||
|
This must be resolved before further processing.
|
||||||
|
|
||||||
|
Trivial coordinate-returning tools/functions
|
||||||
|
may use the non-rotation-adjusted values,
|
||||||
|
which are essentially useless for our purposes.
|
||||||
|
|
||||||
|
MuPDF and similar libraries provide functions
|
||||||
|
to return the "visual" (read _correct_) coordinates,
|
||||||
|
but it would be ideal to redraw content with the correct orientation.
|
||||||
|
|
||||||
|
## Extract Bluebeam Markups
|
||||||
|
|
||||||
|
Right now I'm exporting Bluebeam markups to csv before processing,
|
||||||
|
however if I converted to the code to extract the markups directly with MuPDF.Net
|
||||||
|
as I've managed before with itext, that could save a step.
|
||||||
|
|
||||||
|
### Bluebeam Revu Measure Hack
|
||||||
|
|
||||||
BlueBeam Revu give coordinates for count annotations,
|
BlueBeam Revu give coordinates for count annotations,
|
||||||
even where count = 1.
|
even where count = 1.
|
||||||
@@ -37,20 +59,6 @@ Bluebeam's .bax is a annotation interchange format based on xml
|
|||||||
> [!menu]
|
> [!menu]
|
||||||
> Markups List > Markups > Import
|
> Markups List > Markups > Import
|
||||||
|
|
||||||
## Clean Documents
|
|
||||||
|
|
||||||
### Page Rotation
|
|
||||||
|
|
||||||
Pages have a rotation value independent of appearance
|
|
||||||
which rotates the reference grid.
|
|
||||||
This must be resolved before further processing.
|
|
||||||
|
|
||||||
## Extract Bluebeam Markups
|
|
||||||
|
|
||||||
Right now I'm exporting Bluebeam markups to csv before processing,
|
|
||||||
however if I converted to the code to extract the markups directly with MuPDF.Net
|
|
||||||
as I've managed before with itext, that could save a step.
|
|
||||||
|
|
||||||
## PDF Content Positional Tokenization
|
## PDF Content Positional Tokenization
|
||||||
|
|
||||||
Recursively parse and consume pdf vector content.
|
Recursively parse and consume pdf vector content.
|
||||||
|
|||||||
@@ -22,9 +22,19 @@ Buildings["Building A"].GetHeight()
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
|
Buildings["Building A"].GetLevels()[0]
|
||||||
Buildings["Building A"].Levels[0]
|
Buildings["Building A"].Levels[0]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For jobs with only one building:
|
||||||
|
|
||||||
|
```
|
||||||
|
Building = Buildings["Main Building"]
|
||||||
|
Building.Levels[0]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pathfinding
|
||||||
|
|
||||||
Define equipment locations stochastically
|
Define equipment locations stochastically
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
+1
-1
@@ -43,7 +43,7 @@ All feeder takeoff descriptions should be prefixed with `<parent> TO <child>`
|
|||||||
|
|
||||||
> [!cite] Joel Jansen, in reference to Omni Hotels Raleigh, pp.
|
> [!cite] Joel Jansen, in reference to Omni Hotels Raleigh, pp.
|
||||||
> It is acceptable to use typicals for identical feeders
|
> It is acceptable to use typicals for identical feeders
|
||||||
> so long as the typical is in the Feeders `Area`
|
> so long as the typical is in the Feeders `Area`.
|
||||||
|
|
||||||
## Sequence
|
## Sequence
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user