All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added
extend_beam_to_plane,angle_and_dot_product_main_beam_and_cross_beam,parse_cross_beams_and_main_beams_from_clusterfunctions incompas_timber.connections.utilities. - Added
oriented_polyhedronandpolyhedron_from_box_planesfunctions incompas_timber.utils. - Added
allow_undercutflag inPocket.from_volume_and_element - Added
back_planeattribute toButtJoint. - Added
KMiterJoint - Added
parse_cross_beams_and_main_beams_from_clusterincompas_timber.connections.utilites. - Added
KButtJoint
- Refactored
ButtJointto calculate trimming planes with thebutt_planeandback_planeattributes.
- Added new multi-face brep support via the
Plate.from_brep()class method, which automatically creates plates from multi-face breps by detecting parallel faces. - Added
Plate.from_face_thickness()class method for creating plates from single-face breps (replacing the previous single-facePlate.from_brep()behavior). - Added
Panel.from_brep()class method to create panels from multi-face breps, parallel toPlate.from_brep(). - Added
Panel.from_face_thickness()class method to create panels from single-face breps with an explicit thickness, parallel toPlate.from_face_thickness(). - Added
get_plate_geometry_outlines_from_breptocompas_timber.utils— a shared utility used by bothPlate.from_brep()andPanel.from_brep()to extract the two main outlines and openings from a multi-face brep using mesh-based face identification. - Added new
compas_timber.btlxpackage withBTLxReaderclass for reading BTLx XML files into aTimberModel. - Added
BTLxParsingErrortocompas_timber.errors— a non-fatal exception withpart_idandprocessing_typefields, collected during BTLx parsing without aborting the process. - Added
BTLxProcessing.HEADER_ATTRIBUTE_MAPclass attribute mapping BTLx XML header attributes (e.g.ReferencePlaneID,ProcessID,CounterSink) to Python parameter names with type converters, used by the reader. - Added
nameandprocessparameters and read-only properties toBTLxProcessingto capture BTLx metadata attributes that are not serialized back. - Added
FreeContourParamsclass and overriddenFreeContour.paramsproperty as a special case: unlike all other processings,FreeContourrequires custom serialization logic to handle its polymorphicContour/DualContourchild element. - Added
get_leaf_subclassesutility function back tocompas_timber.utils. - Added
AttributeSpecdataclass incompas_timber.fabrication.btlxto declareATTRIBUTE_MAPentries with apython_nameand atypefor deserialization.
- Changed minimum required
compasversion to2.15.1due to bugfix. - Fixed
Plate.geometryisNone. - Fixed
FreeContourBTLx file creation failing with assertionprocessident != 0;process_idnow defaults to1instead of the base class default of0. - Fixed circular import between
compas_timber.connections.analyzersandcompas_timber.modelby movinganalyzersmodule tocompas_timber.analyzers. Joint.locationnow auto-computes from element centerlines when not explicitly set, and raisesValueErrorif accessed before elements are available (e.g. during deserialization).BTLxGenericPartannotation attribute now usesstr(self.name)only, dropping the appended GUID fragment.BTLxPart.attrnow includes aDesignationfield ("Beam"or"Plate") based on element type.ATTRIBUTE_MAPentries inBTLxProcessingsubclasses now useAttributeSpecdataclass instances, carrying both the Python attribute name and the deserialisation type.FreeContour.ATTRIBUTE_MAPnow has two entries (ContourandDualContour) both mapping tocontour_param_object, allowing the reader to handle both XML child element types.MachiningLimits.from_dict()now accepts string values"yes"/"no"in addition to booleans, allowing the method to be used directly byBTLxReaderwhen deserializing machining limit values from BTLx XML.
- Added
InteractionTypeenum tocompas_timber.structuralfor controlling which interaction types (AUTO,JOINTS,CANDIDATES) are used when creating structural segments. - Added
get_joints_for_element()method toTimberModelto retrieve only joints for a given element. - Added
get_candidates_for_element()method toTimberModelto retrieve only joint candidates for a given element. - Added
ATTRIBUTE_MAPclass attribute to allBTLxProcessingclasses to define attribute-to-BTLx parameter mappings directly on processing classes. - Added
__init_subclass__validation toBTLxProcessingto catch invalidATTRIBUTE_MAPentries at class definition time. - Added
contour_param_objectproperty toFreeContourprocessing class with validation forContourandDualContourtypes. - Added
LTenonMortiseJointandTTenonMortiseJointclasses that inherit fromMortiseTenonJointto avoid usingSUPPORTED_TOPOLOGYas a list. - Added
MortiseTenonJointbase class to centralize shared mortise/tenon joint logic. - Added
Beam.from_box()alternative constructor to create a beam from acompas.geometry.Box, handling the frame offset between the box center and the beam's centerline start point. - Added new module
geometrywithKDTreewrapper aroundscipy.spatial.KDTreefor spatial queries in timber models.
-
Breaking change: the previous single-face
Plate.from_brep()constructor behavior has been replaced, andPlate.from_brep()is now used exclusively to construct plates from multi-face breps. Existing code that calledPlate.from_brep()with a single-face brep should be updated to callPlate.from_face_thickness()for plates, orPanel.from_face_thickness()for panels, instead. -
Plate.from_brep()now delegates all brep parsing logic toget_plate_geometry_outlines_from_brep, which usesmesh_from_brep_simpleto convert the brep into aMeshdatastructure. Face identification and vertex correspondence are resolved through mesh topology instead of directly iterating the brep API. -
Rewrote
polyline_from_brep_loopto usejoin_polyline_segmentsinternally; curved edges are no longer sampled (curved breps must be pre-tessellated before use). -
Improved
join_polyline_segmentsto silently discard degenerate (zero-length) segments at entry. -
Fixed multi-beam joints get de-serialized multiple times.
-
Changed
BeamStructuralElementSolverto accept anInteractionTypevia theinteraction_typeparameter. -
Changed
TimberModel.create_beam_structural_segments()to accept an optionalBeamStructuralElementSolverallowing users to configure the solver externally. -
Added interfaces
BeamSegmentGeneratorandJointConnectorGeneratorfor more extensible structural analysis segment generation. -
Renamed attribute
segmenttolineinStructuralSegmentfor better clarity. -
TStepJoint.step_shapenow acceptsStepShapeTypestring constants instead of integers. -
TenonMortiseJoint.tenon_shapenow acceptsTenonShapeTypestring constants instead of integers. -
TStepJointunset attributes are now resolved at instantiation time when beams are provided, rather than deferred toadd_features(). -
TStepJointunset attributes are now also resolved insiderestore_beams_from_keys(), ensuring joint state is fully consistent immediately after deserialization. -
TenonMortiseJointunset attributes are now resolved at instantiation time and insiderestore_beams_from_keys(), ensuring consistent state before and after deserialization. -
TenonMortiseJoint.__init__now acceptsmain_beam=Noneandcross_beam=Noneas defaults, consistent with other joint classes and required for correct deserialization via__from_data__. -
TDovetailJoint.dovetail_shapenow acceptsTenonShapeTypestring constants instead of integers. -
TDovetailJointunset attributes are now resolved inside_set_unset_attributes(), with dimensional defaults proportional to the main beam's cross-section. -
DovetailTenon.apply()now trims the dovetail volume against the beam's reference sides when the volume exceeds the beam geometry, failing silently when trimming is not possible. -
Changed
compas_timber.fabrication.BTLxProcessingParamsto a single concrete universal class that accepts anyBTLxProcessinginstance and uses itsATTRIBUTE_MAPfor serialization. -
Changed
BTLxProcessingto be an abstract base class (ABC) withPROCESSING_NAMEandATTRIBUTE_MAPas abstract properties. -
Renamed
OliGinaJointtoTOliGinaJointfor consistency wrt to the supported topology. -
Refactored
TTenonMortiseJoint,LTenonMortiseJoint, andTOliGinaJointto inherit shared mortise/tenon behavior and reuse common feature/extension logic. -
New
NBeamKDTreeAnalyzerinstances for the sameTimberModelshare a KDTree for efficient spatial queries.
- Removed
tapered_heelattribute and parameter fromTStepJoint; usestep_shape=StepShapeType.TAPERED_HEELinstead. - Removed
tenon_shapeproperty fromTenonMortiseJoint; useshapewithTenonShapeTypestring constants directly. - Removed the
shapeproperty fromTDovetailJoint;dovetail_shapenow stores theTenonShapeTypevalue directly. - Removed deprecated
Featuresskipping mechanism fromcompas_timber.fabrication.BTLxWriter, streamlining processing handling and error reporting for cleaner BTLx output generation. - Removed all
BTLxProcessingParamssubclasses asATTRIBUTE_MAPis now defined directly onBTLxProcessingclasses. - Removed all
paramsproperties in allBTLxProcessingsubclasses since it's now universal in the parentBTLxProcessingclass and dynamically uses each processing'sATTRIBUTE_MAP.
- Added
get_element()method tocompas_timber.model.TimberModelfor optional element access by GUID. - Added
__getitem__support toTimberModelto allow strict element access viamodel[guid]. - Added
add_elements()method tocompas_timber.model.TimberModel, following its removal from the baseModel. - Added
geometryproperty incompas_timber.elements.TimberElementfollowing its removal from the baseElementthat returns the result ofcompute_modelgeometry(). - Added
compute_elementgeometrymethod inTimberElementthat returns the element geometry in local coordinates. - Added
reset_computed_properties()method toTimberElementto provide interface for invalidating@reset_computeddecorated properties. - Added
transform()method override toTimberModelto properly invalidate element caches when model transformation is applied, fixing inconsistent element transformation behavior. - Added
__from_data__class method override inTimberElementto handle frame/transformation conversion during deserialization. - Added standalone element support through minimal overrides in
compute_modeltransformation()andcompute_modelgeometry()methods inTimberElement. - Added new
compas_timber.planning.Stockbase class for representing raw material stock pieces with polymorphic element handling. - Added new
compas_timber.planning.BeamStockclass for 1D beam stock pieces with length-based nesting and dimensional compatibility checking. - Added new
compas_timber.planning.PlateStockclass for 2D plate stock pieces with area-based nesting and dimensional compatibility checking. - Added new
compas_timber.planning.BeamNesterclass for automated beam nesting with first-fit and best-fit decreasing algorithms. - Added new
compas_timber.planning.NestingResultclass as a serializable wrapper for nesting results with analysis properties and enhanced dimensional reporting. - Added new
compas_timber.fabrication.BTLxGenericPartas a new base class for BTLx part representations, upstreaming shared functionality fromBTLxPartandBTLxRawpart. - Added new
compas_timber.fabrication.BTLxRawpart, inheriting fromBTLxGenericPart, to support raw part handling and nesting operations within the BTLx framework. - Added
reset_timber_attrsdecorator to invalidate cachedTimberElementattributes. - Added
PlateJoint.add_extensions()which does the initial extension of plate outline edges. - Added
PlateGeometryclass. - Fixed
TimberElement.transformdoesn't reflect in drawn geometry due to caching. - Added new
DrillingProxyandDoubleCutProxyclasses. - Added
planar_surface_point_attocompas_timber.utils. - Added
Panelclass as a renaming ofSlab. - Added
**kwargsargument toLongitudinalCutandLongitudinalCutProxyconstructors to allow passing additional parameters, particularlyis_joinery=Falseto keep the processing during serialization. - Added
PanelJointabstract base class for panel joints. - Added
PanelLButtJointclass. - Added
PanelTButtJointclass. - Added
PanelMiterJointclass. - Added
TimberModel.connect_adjacent_panels()method to find and create joint candidates between panels. - Added
PanelFeatureTypeclass for classifying panel feature types. - Added
panel_featuresdirectory andPanelFeatureabstract base class. - Added
Panel.remove_features()method to removePanelFeatureobjects from a panel. - Added
Panel.interfacesproperty to filter features forPanelConnectionInterfaceinstances. - Added
NestedElementDataclass tocompas_timber.planningfor explicit typing of nested element information. - Added new
summaryproperty incompas_timber.planning.NestingResultthat returns a human-readable string summarizing the nesting operation. - Added
move_polyline_segment_to_lineto compas_timber.utils. - Added
join_polyline_segmentsto compas_timber.utils. - Added
polyline_from_brep_loopto compas_timber.utils. - Added
polylines_from_brep_faceto compas_timber.utils. - Added
get_polyline_normal_vectorto compas_timber.utils. - Added
combine_parallel_segmentsto compas_timber.utils. - Added alternative constructor
MachiningLimits.from_dict(). - Added
compas_timber.structural.BeamStructuralElementSolverclass to generate structural analysis segments from beams and joints. - Added
add_beam_structural_segments,get_beam_structural_segments, andremove_beam_structural_segmentstoTimberModelto manage structural analysis segments for beams. - Added
add_structural_connector_segments,get_structural_connector_segments, andremove_structural_connector_segmentstoTimberModelto manage structural analysis segments for joints. - Added
create_beam_structural_segmentstoTimberModelto generate structural segments for all beams and joints. - Added
ref_side_miter,miter_plane, andcleanarguments toLMiterJoint.__init__. - Added
ref_side_mitermiter plane toLMiterJointthat finds the miter plane from the intersections of the beams' ref_sides. - Added user-defined
miter_planeargument toLMiterJointto allow users to define an arbitrary cut plane. - Added a
cleanoption which trims eact beam of anLMiterJointwith the back sides of the other beam. - Added Shape String implementation to
Platefor representation inBTLxPart. - Added
elementsargument toJoint.__init__. - Added
element_guidsproperty toJointwhich are used for deserializing joints.
- Deprecated
element_by_guid()inTimberModel; useget_element()for optional access ormodel[guid]for strict access. - Updated
compas_modelversion pinning from0.4.4to0.9.1to align with the latest development. - Changed
compas_timber.connections.Jointto inherit fromDatainstead of the deprecatedInteraction. - Replaced
face.frame_at()withsurface.frame_at()on NURBS surfaces inLap.from_volume_and_elementto avoidNotImplementedErrorinOCC. - Changed
TimberModel.element_by_guid()to useself._elements[guid]instead ofself._guid_element[guid]for element lookup. - Replaced all
GroupNodereferences with the newGroupelement class fromcompas_model. - Changed
jointsandjoint_candidatesproperties inTimberModelto use direct edge-based lookup instead of interactions. - Updated default edge attributes in the model graph to include
jointsandcandidates. - Updated
graph_nodeproperty tographnodefollowing the changes in the parentcompas_model.elements.Elementclass. - Upstreamed
ref_frameproperty fromcompas_timber.elements.Beamtocompas_timber.elements.TimberElement. - Upstreamed
ref_sidesproperty fromcompas_timber.elements.Beamandcompas_timber.elements.Platetocompas_timber.elements.TimberElement. - Upstreamed
ref_edgesproperty fromcompas_timber.elements.Beamandcompas_timber.elements.Platetocompas_timber.elements.TimberElement. - Upstreamed
front_side,back_side,opp_sidemethods fromcompas_timber.elements.Beamtocompas_timber.elements.TimberElement. - Upstreamed
side_as_surfacemethod fromcompas_timber.elements.Beamtocompas_timber.elements.TimberElement. - Upstreamed
get_dimensions_relative_to_sidemethod fromcompas_timber.elements.Beamtocompas_timber.elements.TimberElement. - Refactored
TimberElement.__init__()to acceptframeparameter and convert totransformationfor parentElementclass, bridging frame-based user interface with transformation-based inheritance. - Changed the way the
ref_frameis computed from theBlank's geometry inTimberElement. - Changed the way the
blankis computed incompas_timber.elements.Beamapplying themodeltransformationto a locally generated geometry. - Changed the
apply()method inDoubleCut,DovetailMortise,DovetailTenon,Drilling,FrenchRidgeLap,JackRafterCut,Lap,LongitudinalCut,Mortise,Pocket,StepJointNotch,StepJoint,Tenonby transforming the computed feature geometry in the element's local space to allow the element geometry computation to happen in local coordinates. - Fixed bug in
LongitudinalCutthat occured when the cutting plane intersected a ref_side but the normals pointed away from each other, resulting in the cut parameter being out of range. - Changed
JointRuleSolver.apply_rules_to_model()to considerJointCandidates pairwise if larger clusters fail to create joints. - Improved performance of
TimberModel.process_joinery()by caching some attributes ofTimberElement. - Changed
Fastener,Slab,Wallto inherit fromcompas_model.Elementinstead ofTimberElement.TimberElementnow represents BTLx parts exclusively. - Changed core definition of
Plateto be same asBeam, (frame, length, width, height) withoutline_aandoutline_boptional arguments. - Changed
Plateto inherit fromTimberElementandPlateGeometry. - Fixed the
ShowTopologyTypesGH Component. - Changed
Slot.apply()to visualize the slot geometry. - Changed
BTLxProcessing*Proxyclasses to define geometry locally to the element to enable transform operations on elements with features defined with Proxies. - Refactored
ButtJoint.__init__()to acceptforce_pocket: boolandconical_tool: boolparameters. - Fixed minor bug in
Pocket.apply()that caused to the tilt angle to be assigned wrong. - Changed default values for
Pocket.__init__()to match BTLx standard values. - Replaced calls to
PlanarSurface.point_at()with calls to the newplanar_surface_point_atto fix processing visualization issue sincecompas==2.15.0. - Changed
Slabto inherit fromPlateGeometryandcompas_model.Element. - Changed
Slab.from_boundarytoSlab.from_outline_thickness, inherited fromPlateGeometry. - Renamed
SlabtoPaneleverywhere in code and docs. - Changed
LongitudinalCutto properly generatetool_positionparameter. - Changed
JackRafterCutto computeorientationbased on the beam centerline and plane normal instead of ref_frame.point and plane normal for when the plane does not fully cross the beam. - Changed
JackRafterCutto allow negativestart_xvalues in case the cutting plane does not fully cross the beam. - Changed
Panel.__data__to enable proper serialization. - Changed some
PlateJointproperties and methods to private. - Changed
FreeContourto compute geometry in local element coordinates. - Changed how
FreeContourcomputes theref_side_indexwhen not provided. - Changed
FreeContourconstructors to work with new local geometry computation. - Fixed models with
XLapJointfail to serialize. - Fixed circular import cause by typing import in
slot.py. - Fixed a bug in
FreeContour.from_top_bottom_and_elementwhereDualContouris expecting aPolylineinstead of a list ofPoints. - Refactored
BTLxGenericPartto accept an optional name, now used for theAnnotationandElementNumberattributes in theBTLxPartandBTLxRawpartoutputs. - Changed
element_datadictionary incompas_timber.planning.Stockto now map each element GUID to aNestedElementDataobject containing its frame, a human-readable key, and length. - Changed the constructor of
compas_timber.planning.NestingResultto optionally accept aToleranceobject, allowing each result to specify its own units and precision for reporting and summaries. - Changed
main_beamtobeam_aandcross_beamtobeam_binLapJoint,LLapJoint,FrenchRidgeLapJoint, andXLapJoint. - Changed
PanelandPlateto no longer inherit from 'PlateGeometry`. - Implemented
compute_modeltransformation()andcompute_modelgeometry()inPanelandPlateto handle local geometry computation. - Implemented alternate constructors
from_brep,from_outlinesandfrom_outline_thicknessinPanelandPlate. - Changed
MachiningLimitsto accept machining limits parameters in the constructors. - Changed
Lap,PocketandSlotto accepte aMachiningLimitsinstance instead of a dictionary. - Moved
attributesdictionary toTimberElementwhich carries arbitrary attributes set in it or given askwargsaccross serialization. - Added
attributesdictionary contet to serialization ofPanel. - Updated the
class_diagrams.rstto reflect the changes in the class structure and inheritance. - Removed all GH components as was migrated to the
timber_designproject. - Removed package
compas_timber.designas it was migrated to thetimber_designproject. - Removed package
compas_timber.ghpythonas it was migrated to thetimber_designproject. - Moved
timber.pymodule out of theelementspackage and renamed tobase.py. This is to avoid circular dependencies between theelementandfabricationpackages. - Fixed
Panel.elementgeometryto return the geometry in local coordinates. - Fixed
Plate.elementgeometryto return the geometry in local coordinates. - Changed
PlateGeometrygeometry creation to useBrep.from_polygonsinstead ofBrep.from_loftto ensure every face is correctly generated. - Implemented
get_elements_from_keysinJoint. - Made all element references(
beam_a,beam_b,main_beam,cross_beam, etc.) in concrete joint implementations references to specific elements in theJoint.elementstuple. - Moved the
small_beam_buttsparameter to thecreate()alternate constructor ofLButtJoint. - Moved the
cut_plane_biasparameter to theLapJointparent class.
- Removed the
add_element()method fromcompas_timber.model.TimberModel, as the inherited method fromModelnow covers this functionality. - Removed
interactionsproperty fromTimberModelin favor of direct edge-based joint lookup. - Removed
blank_frameproperty fromcompas_timber.elements.Beamsince the ref_frame could serve it's purpose. - Removed
facesproperty fromcompas_timber.elements.Beamsince it wasn't used anywhere. - Removed
has_featuresproperty fromcompas_timber.elements.Beamsince it wasn't used anywhere. - Removed
keyproperty fromcompas_timber.elements.Beamandcompas_timber.elements.Platesince it is not used anymore. - Removed all Rhino7 components!
- Removed method
add_group_elementfromTimberModel. - Removed
PlateToPlateInterfacesince plates should be givenBTLxProcessingfeatures. - Removed
Wall,WallJoint,WallToWallInterface,InterfaceRole,InterfaceLocation,Opening,OpeningType,TimberModel.connect_adjacent_walls,TimberModel._clear_wall_jointsand related GH components and component functionality. - Removed
Slabclass and renamed toPanel. - Removed unused
main_outlinesandcross_outlinesproperties fromPlateButtJoint. - Removed unused module
compas_timber.solvers. - Removed
restore_beams_from_keysin allJointsubclasses. - Removed
restore_plates_from_keysinPlateJoint. - Removed all *guid properties, eg
main_beam_guid,cross_beam_guid,beam_a_guid, etc. from concrete joint classes. - Removed
LButtJoint.update_beam_rolesas thesmall_beam_buttsparameter is used in an alternatecreateconstructor now.
- Added
TimberElement.add_featureto override theElementmethod. - Added new GH helper
get_createable_jointsto get all createable Joint classes.
- Fixed a bug in
TLapJointandXLapJointwhere thecut_plane_biasparameter was not passed to the_create_negative_volumes()method after its signature was changed. - Replaced
JackRafterCutandLapwith their Proxy counterparts inLLapJointandTLapJoint. - Changed
BTLxParttransformation GUID to use theTimberElement's GUID instead of generating a random UUID incompas_timber.fabrication.BTLxPart. - Updated the
write()andmodel_to_xml()methods of theBTLxWriterclass to optionally accept aNestingResultobject, enabling inclusion of beam nesting information in the BTLx output. - Fixed a bug in
TStepJointwhere beam dimensions were calculated incorrectly for certain reference side orientations. - Renamed
TOliGinaJointtoOliginaJointfor consistency wrt to the supported topology. - Replaced
get_leaf_subclasses(Joint)withget_createable_joints()in the relevant GH components. - Added inflation of the negative volume in
LapProxyto fix boolean difference artifact.
- Added attribute
tolerancetoTimberModel. - Added
scaledmethod tocompas_timber.fabrication.BTLxProcessingto scale the BTLx parameters. - Added
scaledmethod tocompas_timber.fabrication.BTLxPartto scale the BTLx parameters. - Added
scalemethod tocompas_timber.fabrication.JackRafterCut. - Added
scalemethod tocompas_timber.fabrication.Drilling. - Added
scalemethod tocompas_timber.fabrication.DoubleCut. - Added
scalemethod tocompas_timber.fabrication.Lap. - Added
scalemethod tocompas_timber.fabrication.FrenchRidgeLap. - Added
scalemethod tocompas_timber.fabrication.Tenon. - Added
scalemethod tocompas_timber.fabrication.Mortise. - Added
scalemethod tocompas_timber.fabrication.StepJoint. - Added
scalemethod tocompas_timber.fabrication.StepJointNotch. - Added
scalemethod tocompas_timber.fabrication.DovetailTenon. - Added
scalemethod tocompas_timber.fabrication.DovetailMortise. - Added
scalemethod tocompas_timber.fabrication.Slot. - Added
scalemethod tocompas_timber.fabrication.Pocket. - Added
scalemethod tocompas_timber.fabrication.Text. - Added
is_joineryflag toBTLxProcessingto indicate if the processing is a result of joinery operation. - Added new
compas_timber.fabrication.LongitudinalCut. - Added tasks
update-gh-headerto update the version in the header of the GH components. - Added new
compas_timber.connections.XNotchJoint. - Added a proxy class for
PocketBTLx processing for performance optimization. - Added
topologyto classJoint. - Added
locationto classJoint. - Added
NBeamKDTreeAnalyzertocompas_timber.connections. - Added
TripletAnalyzertocompas_timber.connections. - Added
QuadAnalyzertocompas_timber.connections. - Added
CompositeAnalyzertocompas_timber.connections. - Added method
connect_adjacent_beamstoTimberModel. - Added
PlateJoint. - Added
PlateButtJoint. - Added
PlateMiterJoint. - Added
PlateConnectionSolver. - Added generic
ButtJointclass from whichTButtJointandLButtJointinherit. - Added new
BTLxProcessingErrortocompas_timber.errors. - Added
errorsproperty toBTLxWriterclass which can be used after call towrite()to check for errors. - Added
CategoryPlateJointRule,DirectPlateJointRule,EdgeEdgeTopologyPlateJointRule, andEdgeFaceTopologyPlateJointRulePlate joint rule GH components. - Added
joints_contribution_guidein docs. - Added
PlateJointCandidatetogeneric_joint.py. - Added
Joint.promote_clusterandJoint.promote_joint_candidateconstructors toJoint. - Added
PlateJoint.promote_joint_candidateas override. - Added
joints_contribution_guidein docs. - Added
JointRuleSolverclass. - Added
JointTopology.TOPO_Yfor Beam Connections. - Added
JointTopology.TOPO_Kfor Beam Connections. - Added
JointTopology.TOPO_EDGE_EDGEfor Plate Connections. - Added
JointTopology.TOPO_EDGE_FACEfor Plate Connections. - Added
Cluster.topology. - Added
PlateSolverResultandBeamSolverResultto package results fromPlateConnectionSolver.find_topology()andConnectionSolver.find_topology(). - Added
joint_candidatesproperty toTimberModel. - Added
add_joint_candidatemethod toTimberModel. - Added
remove_joint_candidatemethod toTimberModel.
- BTLx Write now considers the
TimberModel.toleranceattribute and scales parts and processings it when units are set to meters. - Added missing
__data__tocompas_timber.fabrication.Drilling. - Added missing
__data__tocompas_timber.fabrication.Slot. - Fixed
TypeErrorwhen deepcopying beams withdebug_infoon them. - Processings which are not the result of joinery are now serialized with
TimberElement. - Fixed visualization bug in
Platedue to loft resulting in flipped volume. - Fixed a few bugs in the
WallPopulatorworkflow including GH component updates. - Renamed
NullJointtoJointCandidate. - Fixed bug in show_ref_faces GH component.
BTLxProcessing.ref_side_indexdefaults to0if not set, instead of the invalidNone.- Updated
BTLx_contribution_guidein docs. - Fixed several GH Components for Rhino8 compatibility.
- Fixed
graph_nodeisNoneafter deserializing aTimberModel. - Fixed a bug in
BeamsFromMeshGH Component. - Fixed attribute error when creating a
TButtJoint. - Changed default value for
modify_crosstoTrueforLButtJoint. - Minor fixes to GH Components.
- Fixed
elementsand geometry creation forBallNodeJoint. - Changed
PlateConnectionSolver.find_topology()to solve forTOPO_EDGE_EDGEorTOPO_EDGE_FACE. - Changed
PlateConnectionSolver.find_topology()to return aPlateSolverResultinstance. - Reworked
ConnectionSolver.find_topology()for readability and to implementTOPO_I. - Changed
ConnectionSolver.find_topology()to return aBeamSolverResultinstance. - Removed
topology,a_segment_indexandb_segment_indexfromPlateJointsubclass__init__()methods. These can now be passed as kwargs. Platejoints can now be isntantiated with just 2 Plates as arguments. If no topology or segment index data is in kwargs, the joint will solve for those.- Fixed ironpython compatibility issues.
NBeamKDTreeAnalyzernow usesmodel.joint_candidatesinstead of filteringmodel.joints.- Fixed element interaction gets removed even if there are still attributes on it.
- Changed
elementsargument inpromote_joint_candidatetoreordered_elementsfor clarity. - Fixed
TStepJointdeserialization error where__init__()was accessing beam properties before beams were restored from GUIDs. - Removed the
cut_plane_biasparameter from theLapJoint.__init__()method, as it is not required by all subclasses. - Added the
cut_plane_biasparameter to the constructors ofTLapJoint,LLapJoint, andXLapJoint. - Updated the
__data__methods ofTLapJoint,LLapJoint, andXLapJointto serialize thecut_plane_biasvalue. - Updated the
__data__method ofLFrenchRidgeLapJointto serialize thedrillhole_diamvalue. - Changed the
_create_negative_volumes()method inLapJointto acceptcut_plane_biasas an argument. - Renamed
set_default_values()to_update_default_values()and moved method call from__init__()toadd_features()inTenonMortiseJointto avoid inconsistencies during deserialization. - Set minimum
compas_timberversion in CPython GH components to1.0.0. - Reworked
ConnectionSolver.find_topology()for readability and to implementTOPO_I. - Changed
JointRule.joints_from_beams_and_rules()toJointRule.apply_rules_to_modelwhich now addsJoints to theTimberModeldirectly. - Changed
WallPopulator.create_joint_definitions()toWallPopulator.create_joints(), which now returnsDirectRuleinstances. - Changed
toleranceargument tomax_distanceinNBeamKDTreeAnalyzerfor clarity and consisten naming. - Changed
Joint.check_elements_compatibility()to a class method to check Joint-type specific requirements before instantiation.
- Removed Grasshopper after-install plugin. Components should be installed via Rhino's Plugin Manager.
- Removed
get_face_most_towards_beamfromJointas not used anywhere. - Removed
get_face_most_ortho_to_beamfromJointas not used anywhere. - Removed
angle_vectors_projectedfromcompas_timber.utilssince this has been upstreamed to core. - Removed
comply()from JointRule and its child classes. - Removed
JointDefinition. - Removed
FeatureDefinition. - Removed redundant checks in
TopologyRuleGH components.
- Fixed max recursion depth error when copying
TimberModel/Beamwith proxy processings.
- Added new
compas_timber.fabrication.Pocket. - Added
front_side,back_side,opp_sidemethods to theBeamclass for retrieving specific sides relative to a reference side. - Added processing
Texttocompas_timber.fabrication. - Added
TextParamstocompas_timber.fabrication. - Added new Grasshopper components for Rhino8/cpython.
- Added new methods to handle adaptive GH_component parameters using cpython.
- Fixed
AttributeErrorwhen deserializing a model with Lap joints. - Fixed a bug in
compas_timber.fabrication.Lapwhereref_side_indexfailed for0by checking forNoneinstead. - Fixed a bug in
compas_timber.fabrication.Lapto handle the case when the vectors used to calculate theinclinationangle are perpendicular.
- Added
DualContourBTLx Contour type for ruled surface Swarf contours.
- Removed
main_ref_side_indexproperty fromTBirdsmouthJointsince it's now defined in theDoubleCutBTLxProcessing. - Added
mill_depthargument inTBirdsmouthJointfor creating pockets on the cross_beam if asked. - Refactored the
check_element_compatibilitymethod inYButtJointso that it checks for coplanarity and dimensioning of the cross elements. - Enhanced
DoubleCut.from_planes_and_beamto verify that provided planes are not parallel and raise aValueErrorif they are. - Adjusted
process_joinerymethod to catchValueErrorexceptions duringBTLxProcessinggeneration and wrap them inBeamJoiningErrorobjects. - Refactored and renamed
are_beams_coplanarfunction toare_beams_aligned_with_cross_vector. - Refactored
_create_negative_volumes()inLapJointso that it generates box-like volumes. - Refactored
XLapJoint,LLapJoint,TLapJointso that they use the_create_negative_volumes()method to get the negative volumes and use the alt constructorLap.from_volume_and_beam(). - Fixed an error occuring in
BTLxPart.shape_stringsby ensuring the polyline is always closed. - Implemented
Inclinationin theFreeContourBTLx Processing. - Changed
Plateelement to be defined by top and bottom contours instead of one contour and thickness.
- Removed
check_elements_compatibilitymethod from the parentLapJointsince non co-planar lap joints can be achieved. - Removed the
is_pocketargument inLap.from_plane_and_beam()since this class method will now only serve for pockets in Butt joints. - Removed
opposing_side_indexandOPPOSING_SIDE_MAPfromBeamclass since they have now been replaced byfront_side,back_side,opp_sidemethods. - Removed the deprecated
main_beam_opposing_side_indexproperty fromLButtJointandTButtJointas it is no longer in use.
- Fixed
ValueErroroccurring when connecting just a slab to the GH model component.
- Fixed "No intersection found between walls" error when walls connect in unsupported topology.
- Implemented slab perimeter offset workaround.
- Added
BTLx_From_ParamsGH component which contains the definiton for classDeferredBTLxProcessingto allow directly defining BTLx parameters and passing them to the model. - Added
Shapeto BTLx output, showing finished element geometry in BTLx Viewer instead of just blank. - Added
as_plane()toWallToWallInterface. - Added optional argument
max_distancetoWallPopulator.create_joint_definitions().
- Added
max_distancetoTimberModel.connect_adjacent_walls(). - Fixed plate doesn't get properly extended to the end of an L detail.
- Fixed detail edge beams don't get LButt.
- Fixed walls might not be considered connecting depending on the surface's orientation.
- Adjusted
LMiterJointso that it now applies an extra cut to elements when thecutoffflag is enabled.
- Added missing arguments in configuration set component.
- Added
FlipDirectionflag to flip stud direction of a slab.
- Fixed rotating stud direction in slab causes breaks plates and connections.
- Restructured some Gh Toolboxes & added Icons for Walls & Slabs
- Added
distance_segment_segmenttocompas_timber.utils - Added
BTLxFromGeometryDefinitionclass to replace the depricatedFeatureDefinition. This allows deferred calculation of BTLx processings. - Added
from_shapes_and_elementclass method toDrilling,JackRafterCut, andDoubleCutas a wrapper for their geometry based constructors for use withBTLxFromGeometryDefinition. - Added
YButtJointwhich joins the ends of three joints where thecross_beamsget a miter cut and themain_beamgets a double cut. - Added
JackRafterCutProxyto allow for deferred calculation of theJackRafterCutgeometry thus improving visualization performance. - Added class "WallPopulator" to
compas_timber.design. - Added class "WallPopulatorConfigurationSet" to
compas_timber.design. - Added class "WallSelector" to
compas_timber.design. - Added class "AnyWallSelector" to
compas_timber.design. - Added class "LConnectionDetailA" to
compas_timber.design. - Added class "LConnectionDetailB" to
compas_timber.design. - Added class "TConnectionDetailA" to
compas_timber.design. - Added
from_brepto `compas_timber.elements.Wall. - Added
from_polylineto `compas_timber.elements.Wall. - Added
WallJointtocompas_timber.connections. - Added error handling when BTLx processing from geometry fails in GH.
- Added new
Slabclass tocompas_timber.elements. - Added
SlabGH component. - Added
FreeContourBTLx processing and applied it to thePlatetype so that plates can be machined.
- Updated Grasshopper Toolbox and Icons
- Fixed
ValueErrorExceptioninas_dict()method ofBTLxProcessingParamsclass by ensuring precision specifiers are used with floats. - Removed model argument from
BTLxWriterin the GH component and updated it to always return the BTLx string. - Fixed a bug in
compas_timber.Fabrication.StepJointNotchrelated to theorientationandstrut_inclinationparameters. - Fixed the error message when beam endpoints coincide, e.g. when a closed polyline is used as input.
- Changed
indexinput ofShowFeatureErrorsandShowJoiningErrorsdo have default value of 0. - Fixed spelling of
BeamJoinningErrortoBeamJoiningError. - Changed
process_joinery()method to handleBeamJoiningErrorexceptions and return them. Also updatedModelGH component. - Updated
add_joint_error()method inDebugInformationclass to handle lists. - Changed
compas_timber.fabrication.Lapso that the volume is generated fully from the relevant BTLx params. - Refactored
compas_timber.connections.LapJointto comply with the new system. - Changed
THalfLapJoint,LHalfLapJoint,XHalfLapJointfromcompas_timber.connectionsso that they use theLapBTLx processing. - Renamed all
X/T/LHalfLapJointclasses toX/T/LLapJoint. - Enhanced lap behavior for optimal beam orientation in
LapJointclass. - Fixed
restore_beams_from_keysinLMiterJointto use the correct variable names. - Reworked
DoubleCutto more reliably produce the feature and geometry with thefrom_planes_and_elementclass method. - Renamed
intersection_box_line()tointersection_beam_line_param(), which now take a beam input and outputs the intersecting ref_face_index. - Added
max_distanceargument toJointRulesubclasses and GH components so that max_distance can be set for each joint rule individually. - Changed referenced to
beaminDrillingtoelement. - Changed
Drill HoleandTrim FeatureGH components to generate the relevantBTLxProcessingtype rather than the deprecatedFeatureDefinitiontype. - Changed
Show_beam_facesgh component toShow_ref_sides, which now takes anintindex and shows the corresponding face including origin corner. - Bug fixes after adding
max_distanceto joint defs. - Using new
JackRafterCutProxyin LMiterJoint, LButtJoint and TButtJoint. - Changed input type from
ElementtoBeamin components that currently only support beams. - Fixed drilling GH component not taking diameter as a string.
- Reworked
Wallclass to be defined with a standard polyline, frame and thickness. - Changed labels in
Show_ref_sidesGH component to be 1-based to match the spec.
- Added API documentation for
designanderrorpackages. - Added
guess_joint_topology_2beamsandset_default_jointsfunctions todesign.__init__.py. - Added
list_input_valid,item_input_valid,get_leaf_subclasses,rename_gh_inputfunctions toghpython.__init__.py. - Added
Instruction,Model3d,Text3d,LinearDimension,BuildingPlanParserclasses toplanning.__init__.py. - Added
subprocessingsproperty toBTLxProcessingto allow nesting of processings.
- Fixed comma incompatible with py27 in
Slotmodule. - Updated the API documentation for
connections,elements,fabrication,ghpython,planningpackages. - Refactored all btlx
processreferences toprocessing, including base classes, properties, variables, and docstrings. - Refactored
BTLxtoBTLxWriterin thecompas_timber.Fabricationpackage.
- Removed
BeamJoiningErrorfromconnections.__init__.py. - Removed duplicate entries from the
__all__list in theelements.__init__.pymodule. - Removed package
compas_timber._fabrication. - Removed
btlx_processesanfjoint_factoriesfromcompas_timber.fabricationpackage. - Removed
.btlxfiles from.gitignore.
- Added new base class for timber elements
TimberElement. - Added property
is_beamtoBeamclass. - Added property
is_platetoPlateclass. - Added property
is_walltoWallclass. - Added
side_as_surfacetocompas_timber.elements.Beam. - Added
opposing_side_indextocompas_timber.elements.Beam. - Added
Plateelement. - Added attribute
platestoTimberModel. - Added new temporary package
_fabrication. - Added new
compas_timber._fabrication.JackRafterCut. - Added new
compas_timber._fabrication.JackRafterCutParams. - Added new
compas_timber._fabrication.Drilling. - Added new
compas_timber._fabrication.DrillingParams. - Added new
compas_timber._fabrication.StepJoint. - Added new
compas_timber._fabrication.StepJointNotch. - Added new
compas_timber._fabrication.DovetailTenon. - Added new
compas_timber._fabrication.DovetailMortise. - Added new
compas_timber.connections.TStepJoint. - Added new
compas_timber.connections.TDovetailJoint. - Added new
utilitiesmodule inconnectionspackage. - Added new
compas_timber._fabrication.DoubleCut. - Added new
compas_timber.connections.TBirdsmouthJoint. - Added new method
add_group_elementtoTimberModel. - Added new method
has_grouptoTimberModel. - Added new method
get_elements_in_grouptoTimberModel. - Added attribute
is_group_elementtoTimberElement. - Added
JointRule.joints_from_beams_and_rules()static method - Added
Element.reset()method. - Added new
fasteners.pymodule with newFastenerelement type. - Added new
compas_timber._fabrication.Lap. - Added
Joint_Rule_From_ListGH Component that takes lists of beams to create joints. - Added
MIN_ELEMENT_COUNTandMAX_ELEMENT_COUNTclass attributes toJoint. - Added
element_count_compliesclass method toJoint. - Added
compas_timber.fasteners.FastenerTimberInterface. - Added
compas_timber.connections.BallNodeJoint. - Added
compas_timber.elements.BallNodeFastener. - Added
transform()method toFeaturetypes. - Added
FastenerInterfaceComponentGH component. - Added
ShowElementsByTypeGH Component. - Added
fastenersproperty toTimberModel. - Added
BTLx_FeatureGH component. - Added
CT_Beams_From_MeshGH component. - Added new
compas_timber._fabrication.FrenchRidgeLap. - Added new
compas_timber.connections.LFrenchRidgeLapJoint. - Added new
compas_timber._fabrication.Tenonandcompas_timber._fabrication.Mortise. - Added new
compas_timber.connections.TTenonMortiseJoint. - Added
createoverride toBallNodeJoint. - Added
PlateFastenerclass. - Added
errorsdirectory and__init__.pymodule. - Added new
compas_timber._fabrication.Slot. - Added new
compas_timber._fabrication.SlotParams.
- Changed incorrect import of
compas.geometry.intersection_line_plane()tocompas_timber.utils.intersection_line_plane() - Renamed
intersection_line_planetointersection_line_plane_param. - Renamed
intersection_line_line_3Dtointersection_line_line_param. - Adjusted functions in
compas_timber._fabrication.DovetailMortiseandcompas_timber.connections.TDovetailJoint. - Added
conda-forgechannel to installation instructions. - Fixed
**kwargsinheritance in__init__for joint modules:LMiterJoint,TStepJoint,TDovetailJoint,TBirdsmouthJoint. - Fixed GUID assignment logic from
**kwargsto ensure correct fallback behavior for joint modules:LMiterJoint,TStepJoint,TDovetailJoint,TBirdsmouthJoint. - Changed
model.element_by_guid()instead of directelementsdict[]access for beam retrieval in joint modules:LMiterJoint,TStepJoint,TDovetailJoint,TBirdsmouthJoint. - Reworked the model generation pipeline.
- Reworked
complymethods forJointRules. - Fixed error with angle and inclination calculation in
compas_timber._fabrication.JackRafterCut - Changed
compas_timber.connections.TButtJointandcompas_timber.connections.LButtJointby using the new implemented BTLx Processes to define the Joints - Changed
DirectJointRuleto allow for more than 2 elements per joint. - Changed
beamobjects get added toJoint.elementsinJoint.create(). - Fixed bug in vizualization of tenon/mortise in
compas_timber._fabrication.StepJointandcompas_timber._fabrication.StepJointNotch. - Changed
model.process_joinery()so that it callsjoint.check_elements_compatibility()before adding extensions and features. - Fixed incorrect data keys for
beam_guidin the__data__property for joint modules:LMiterJoint,TStepJoint,TDovetailJoint,TBirdsmouthJoint,LFrenchRidgeLapJoint. - Fixed
JointRuleFromListGH component. - Changed
TButtJointto take an optionalPlateFastener. - Moved
FeatureApplicationError,BeamJoiningError, andFastenerApplicationErrortoerrors.__init__.py. - Fixed a bug that occured when parallel beams are joined in the BallNodeJoint.
- Fixed
L_TopoJointRule,T_TopoJointRuleandX_TopoJointRulefor cases whereJoint.SUPPORTED_TOPOLOGYis a single value or a list. - Fixed bug in
JointRule.joints_from_beams_and_rules()that caused failures when topology was not recognized. - Implemented
max_distanceparameter inJointRule.joints_from_beams_and_rules()andJointRule.complymethods. - Bux fixes from extra comma argument and
max_distancenot implemented inDirectRule.comply.
- Removed module
compas_timber.utils.compas_extra. - Removed a bunch of spaghetti from
CT_modelGH component. - Removed module
compas_timber.fabrication.joint_factories.t_butt_factory. - Removed module
compas_timber.fabrication.joint_factories.l_butt_factory. - Removed module
compas_timber.connections.butt_joint. - Removed module
compas_timber.connections.french_ridge_lap. - Removed module
compas_timber.fabrication.joint_factories.french_ridge_factory. - Removed module
compas_timber.fabrication.btlx_processes.btlx_french_ridge_lap.
- Added bake component for
Plateelements. - Added default paramteters for
Surface Modelin the GH Component
- Fixed wrong image file paths in the Documentation.
- Changed
TimberModel.beamsto return generator ofBeamelements. - Changed
TimberModel.wallsto return generator ofWallelements. - Changed
TimberModel.platesto return generator ofPlateelements. - Changed
TimberModel.jointsto return generator ofJointelements. - Fixed polyline analysis for generating
SurfaceModel - Fixed errors in debug info components.
- Implemented a workaround for #280.
- Added
SurfaceModelJointOverrideGH Component. - Added
Plateelement. - Added attribute
platestoTimberModel. - Added
SurfaceModelJointOverrideGH Component - Added
ShowSurfaceModelBeamTypeGH Component - Re-introduced attribute
keyinBeam. - Added attribute
keytoPlate. - Added generation of
plateelements to theSurfaceModel
- Updated documentation for Grasshopper components.
- Fixed missing input parameter in
SurfaceModelOptionsGH Component. - Fixed error with tolerances for
SurfaceModels modeled in meters. - Renamed
beamtoelementin different locations to make it more generic. - Fixed
AttributeErrorinSurfaceModel. - Updated example scripts.
- Calling
process_joineryinSurfaceModel. - Changed how
BeamDefinitionandPlatetypes are handled inSurfaceModel - Changed the
get_interior_segment_indicesfunction to work when there are multiple openings. - Renamed
ShowSurfaceModelBeamTypetoShowBeamsByCategory. - Changed
SurfaceModelcomponent input handling to give warnings instead of errors.
- Removed
add_beamfromTimberModel, useadd_elementinstead. - Removed
add_platefromTimberModel, useadd_elementinstead. - Removed
add_wallfromTimberModel, useadd_elementinstead.
- Added
ref_frameattribute toBeam. - Added
ref_sidesattribute toBeam. - Added
ref_edgesattribute toBeam.
- Fixed error in BakeWithBoxMap component.
- Added
add_extensionstoJointinterface. - Added
process_joinerytoTimberModel. - Features are not automatically added when creating a joint using
Joint.create(). - Features are not automatically added when de-serializing.
- Added
birdsmouthparameter tobutt_jointwhich applies abtlx_double_cutprocess to the part. - Added
BTLxDoubleCutBTLx Processing class. - Added BTLx support for
TButtJointandLButtJoint - Added
BTLxLapprocess class.
- Moved module
workflowfrom packageghpythonto new packagedesign. - Moved
compas_timber.ghpython.CategoryRuletocompas_timber.design. - Moved
compas_timber.ghpython.DirectRuletocompas_timber.design. - Moved
compas_timber.ghpython.JointRuletocompas_timber.design. - Moved
compas_timber.ghpython.TopologyRuletocompas_timber.design. - Moved
compas_timber.ghpython.JointDefinitiontocompas_timber.design. - Moved
compas_timber.ghpython.FeatureDefinitiontocompas_timber.design. - Moved
compas_timber.ghpython.DebugInfomationtocompas_timber.design.
- Fixed import errors in GH components.
- Updated GH example file.
- Added attribute
geometrytoBeam. - Added
center_of_massproperty to Assembly class. - Added
volumeproperty to Assembly class. - Added new element type
Wall.
- Reduced some boilerplate code in
Jointsubclasses. - Added argument
beamstoJoint.__init__()which expects tuple containing beams from implementing class instance. - Renamed
TimberAssemblytoTimberModel. - Renamed
compas_timber.assemblytocompas_timber.model. - Renamed
compas_timber.partstocompas_timber.elements. - Based
Beamon newcompas_model.elements.Element. - Based
TimberModelon newcompas_model.model.Model. - Based
Jointon newcompas_model.interactions.Interaction. - Removed support for Python
3.8.
- Removed
joint_typeattributes from allJointclasses. - Removed argument
cutofffromLMiterJointas it was not used anywhere. - Removed argument
gapfromTButtJointas it was not used anywhere. - Removed argument
gapfromFrenchRidgeLapas it was not used anywhere. - Removed class
JointOptionsas not used anymore. - Removed module
compas_timber.consumers. - Removed unused method
TButtJoint.get_cutting_plane().
- Added
debug_geometriesattribute toBeamJoiningError. - (Re)added
BooleanSubtractionfeature. - Added flag
modify_crosstoL-Buttjoint. - Added flag
reject_itoL-Buttjoint. - Added new
NullJoint. - Added
mill_depthargument to butt joints, with geometric representation of milled recess in cross beam. - Added
ButtJointclass with methods common toLButtJointandTButtJoint - Added new
L_TopologyJointRule,T_TopologyJointRule,X_TopologyJointRuleGH components - Added GH component param support functions in
compas_timber.ghpython.ghcomponent_helpers.py - Added
toposattribute toCategoryRuleto filter when joints get applied - Added new
SurfaceAssemblyclass - Added GH component
SurfaceAssemblywhich directly generates aTimberAssemblywith standard wall framing from a planar surface. - Added GH component
SurfaceAssemblyOptions - Added GH component
CustomBeamDimensionsforSurfaceAssembly
BeamFromCurveGH component accepts now referenced Rhino curves, referenced Rhino object IDs and internalized lines.BeamFromCurveGH component accepts now referenced Rhino curves, referenced Rhino object IDs and internalized lines.- Fixed
FeatureErrorwhen L-Butt applies the cutting plane. - Fixed T-Butt doesn't get extended to cross beam's plane.
SimpleSequenceGeneratorupdated to work withcompas.datastructures.assemblyand generates building plan acording to type.- Changed GH Categories for joint rules.
- Made
beam_side_incidentastaticmethodofJointand reworked it. - Extended
DecomposeBeamcomponent to optionally show beam frame and faces. - Changed
CategoryJointRuleandDirectJointRuleto a dynamic interface where joint type is selected with right click menu - Changed
AssemblyGH component to apply category joints if the detected topology is inCategoryRule.topos - Changed
TopologyJointsGH component toDefaultJointsComponent, which applies default joints based on topology.
- Removed component
ShowBeamFrame. - Changed GH Categories for joint rules
BrepGeometryConsumercontinues to apply features even after the first error.DrillHolecomponent calculates length from input line.DrillHolehas default diameter proportional to beam cross-section.- Removed input
LengthfromDrillHolecomponent. - Fixed broken
TrimmingFeaturecomponent. - Removed all
JointOptioncomponents. these are accessed in context menu of joint rules.
- Updated COMPAS dependency to
2.0.0!
- Added missing documentation for module
ghpython.workflow.py. - Added missing documentation for package
connections. compas_timber.__version__now returns current version.
- Added class
DebugInformationtoworkflow.py. - Added new component
ShowFeatureErrors. - Added new component
ShowJoiningErrors. - Added
FeatureApplicatorclasses which report errors during feature application. - Added
L-HalfLapJoint. - Added
T-HalfLapJoint. - Added
ShowTopologyTypesGH Component.
- Feature application now fails more gracefully (un-processed geometry is returned).
- Attempting to join beams which are already joined raises
BeamJoiningErrorinstead ofAssemblyError Joint.add_featureswhich fails to calculate anything raisesBeamJoiningError.- Changed COMPAS dependency to
compas==2.0.0beta.4. - Assembly component shows blanks when
CeateGeometryflag is set toFalse.
- Removed
JointDefGH components. - Removed
AutomaticJointGH Component. Joint rules are now input directly intoTimberAssembly.
- Added
fabricationpackage - Added
BTLxas a wrapper forTimberAssemblyto generate .btlx files for machining timber beams - Added
BTLxPartas wrapper forBeam - Added
joint_factoriesfolder and factories for existing joints exceptX-HalfLap - Added
btlx_processesfolder and processesJackCutandFrenchRidgeHalfLap - Added
BTLxGrasshopper component - Added
FrenchRidgeHalfLapjoint - Added
DrillHoleFeature. - Added
DrillHoleFeatureGrasshopper component. - added
JointOptionsGH Components for all current joint types. This allows joint parameter definition in GH - added
DirectJointRulesGH Component - added
TopologyJointRulesGH Component - added
BTLxas a wrapper forTimberAssemblyto generate .btlx files for machining timber beams - added
BTLxPartas wrapper forBeam - added
joint_factoriesfolder and factories for existing joints exceptX-HalfLap - added
btlx_processesfolder and processesJackCutandFrenchRidgeHalfLap - added
BTLxGrasshopper component - added
FrenchRidgeHalfLapjoint
- Changed
Beamdefinition to includeblank_frameandblank_lengthattributes - Replaced
Artistwith the newScene. - Changed type hint for argument
Centerlineof GH componentBeamFromCurvetoGuid. - Curve ID of beam curves are now always stored in
Beam.attributes["rhino_guid"]. - Fixed
FindBeamByGuidcomponent. - Bumped required COMPAS version to
2.0.0beta.2. - Changed docs theme to the new
sphinx_compas2_theme. - Re-worked component
BakeBoxMapto advanced mode. - Removed call to
rs.Redraw()inBakeBoxMapwhich was causing GH document to lock (cannot drag).
- Added now released COMPAS
2.0.0a1to requirements.
- Explicitly added attribute
keyto (de)serialization ofBeam.
- Added new joint type: Half-lap joint.
- Beam transformed geometry with features is available using property
geometry. - Adapted the
Datainterface ofBeamandAssemblyaccording to the changes in COMPAS core. - Beam geometry is created on demand.
- Adapted the
Datainterface ofJointand its implementations according to the changes in COMPAS core. - Explicitly choosing
Grasshoppercontext for theArtistinShowAssemblycomponent.
- Removed method
Beam.get_geometry.
- Integrated RTree search for neighboring beams using Rhino and CPython plugins.