In een vorige blog zijn User Defined Properties toegepast op Parcels in Civil 3D. Nu is het tijd om te kijken of Property Sets net zo goed werken, of misschien beter. Het is een modernere techniek dan User Defined Properties, dus het kan vast niet slechter. Toch?

Property Sets

Het aanmaken van Property Sets is niet heel moeilijk. Je maakt een paar Manual Property Definitions aan. Als je het filterknopje bovenin uitschakelt, dan kun je ook keuzelijsten en uitvoerformaten samenstellen. Deze keuzelijsten en uitvoerformaten kun je dan gebruiken in de Property Definitions.

Een keuzelijst kun je vullen met een lijst aan waarden. Vergeet niet om deze toe te laten passen op de Manual Property Definition in het tabblad Applies to. Daarna kun je deze selecteren in de kolom Type en Source in de Property Definition ‘Status’ van de Property Set ‘Parcels’.

Een uitvoerformaat is ook snel gemaakt en kan daarna ook worden toegepast op de kolom Format van de Property Definition ‘PrijsPerM2’.

Wil je bijvoorbeeld ook het oppervlak van de Parcel, dan zou je verwachten dat je die vindt als Automatic Property Definition, maar helaas is deze niet beschikbaar.

De Property Set ‘Parcels’ die je hebt aangemaakt, moet vervolgens nog worden gekoppeld aan de percelen. Dit kan handmatig via de Palette, of automatisch als je de variabele AECPSDAUTOATTACH op ‘On’ zet. Via de Palette kun je nu heel eenvoudig de waarden aanpassen van de Property Definitions.

Dit werkt in ieder geval al eenvoudiger dan met User Defined Properties, die altijd via een dialoogvenster aangepast moeten worden.

Labels met Property Sets

Net als User Defined Properties kun je ook Property Sets toepassen op Labels. Bij het wijzigen van een Label Style vind je een apart tabblad voor Property Sets die je toe kunt voegen aan het Label component.

Helaas kun je uit de verschillende opties niet kiezen voor een List Property Definition, dus de status kun je zo niet in een Label plaatsen. Maar wel met een klein trucje.

Je kunt in de Label component ook gewoon typen en daarmee verwijzen naar een Property Definition, ook al staat deze niet bij de beschikbare opties. Het formaat is:

<[PS:Parcels:Status(CP)]>

PS betekent Property Sets, Parcels is de naam van de Set en Status is de naam van de Definition. CP tussen haakjes betekent dat de tekst niet wordt omgezet naar hoofdletters of kleine letters. Civil 3D accepteert dit gelukkig gewoon waardoor de status nu wel in de label wordt getoond.

Tabel

In tabellen is het ook mogelijk om te verwijzen naar Property Definitions.

Bij het wijzigen van de velddata kun je hier helaas niet kiezen uit Property Sets keuzelijstjes maar je kunt net als in de Label component de verwijzing zelf intypen.

De kavelprijs verwijst hier naar een Expression waarbij een berekening plaats vindt tussen de prijs per vierkante meter en het oppervlak van de Parcel. Helaas zijn Property Sets niet toe te passen op Expressions. Dit is heel jammer. Je kunt wel zo’n berekening doen in de Property Sets zelf, maar omdat daar het oppervlak niet automatisch is op te vragen, moet je een stukje programmeerwerk doen.

VB Script in Property Sets

Met een stukje VB Script kun je de eigenschap Area wel opvragen. Je hebt hiervoor aanvullend wel een Automatic Property Definition ‘Object ID’ nodig en daarna kun je hiernaar verwijzen in de code. Voeg een Formula Property Definition toe en geef de volgende code:

De code zelf:

RESULT="--"
On Error Resume Next
Set oApp=GetObject(, "AutoCAD.Application")
Set oCivilApp=oApp.GetInterfaceObject("AeccXUiLand.AeccApplication.13.5")
Set obj=oCivilApp.ActiveDocument.ObjectIDToObject([ObjectID])
RESULT=obj.Statistics.Area * [PrijsPerM2]

Voor deze Property Definition kun je ook weer een Format maken zodat de prijs keurig wordt getoond met het euro-teken en twee decimalen. Nu kun je er wel naar verwijzen in de Table, maar ook in de Label.

En in de Properties Palette kun je deze waarde nu ook zien.

Conclusie

Met Property Sets kun je evenveel en waarschijnlijk meer dan met User Defined Properties. Maar het is absoluut niet eenvoudiger, vooral niet als je formules wilt toepassen. Het scripten in VB Script is niet intuïtief en bovendien versie-afhankelijk. Bij een volgende versie van Civil 3D moet je de code weer aanpassen. Daarnaast is het wat rommelig dat je Property Sets wel in Labels kunt plaatsen maar voornamelijk handmatig moet intypen. User Defined Properties zijn in dit geval toch sneller in te richten en toe te passen. Maar die werken helaas weer alleen op Parcels en Cogo Points.

Misschien toch maar eens kijken of het met Dynamo niet flexibeler kan…