I recently updated to X15 and after doing so I have had a few problems. The last one I have to fix is my macro for auto cabinet label generation.
I am by no means a programmer and I barely understood ruby when I made this macro. I have been trying to relearn but I still can't figure out what my problem is.
I have attached my macro below and this is the error I have been getting:
Evaluation Error: Ruby TypeError: no implicit conversion of nil into String
from eval:10:in `eval'
from eval:10:in `block (2 levels) in <main>'
from eval:4:in `loop'
from eval:4:in `block in <main>'
Any help is apricated. Thanks in advance!
Is there a way to write a custom command to auto-place lights?
I've used chat GTP to write code that I'd like to utilize. I have attached a word file and pdf that I need proof read and corrected. I can have that done.
Below is the code, but I'm not sure if it will format correctly:
'Ask the user to select the room size and ceiling height
Dim roomWidth As Double
Dim roomLength As Double
Dim roomHeight As Double
roomWidth = InputBox("Enter the width of the room in feet:")
roomLength = InputBox("Enter the length of the room in feet:")
roomHeight = InputBox("Enter the height of the room in feet:")
'Calculate the square footage of the room based on user input
Dim roomArea As Double
roomArea = roomWidth * roomLength
'Determine the recommended lighting level for the room based on the ceiling height and room type
Dim lightLevel As Double
Select Case roomHeight
Case Is <= 8
lightLevel = 10
Case Is <= 9
lightLevel = 20
Case Is <= 10
lightLevel = 30
Case Is <= 12
lightLevel = 40
MsgBox "Invalid ceiling height"
'Calculate the number of lights needed based on the room size and the recommended spacing
Dim lightSpacing As Double
If roomArea <= 100 Then
lightSpacing = 48
ElseIf roomArea <= 225 Then
lightSpacing = 64
ElseIf roomArea <= 400 Then
lightSpacing = 80
lightSpacing = 96
Dim lightCount As Integer
lightCount = Application.RoundUp((roomWidth + roomLength) / lightSpacing, 0)
'Determine the optimal spacing for the lights based on the room size and ceiling height
Dim xOffset As Double
Dim yOffset As Double
If roomWidth >= roomLength Then
xOffset = lightSpacing
yOffset = lightSpacing * roomLength / roomWidth
xOffset = lightSpacing * roomWidth / roomLength
yOffset = lightSpacing
'Place the lights in a rectangular or square pattern within the room
Dim lightType As String
lightType = InputBox("Enter the light diameter (4 or 6):")
Dim x As Integer
Dim y As Integer
Dim light As Object
For x = 1 To lightCount
For y = 1 To lightCount
Set light = ActiveDocument.CreateLight("Recessed Can Light", lightType & """", "General")
light.Move (x - 1) * xOffset, (y - 1) * yOffset, roomHeight - 48
'Generate a report or summary of the lighting plan for the room
Dim report As String
report = "Room Size: " & roomWidth & " ft x " & roomLength & " ft" & vbCrLf
report = report & "Ceiling Height: " & roomHeight & " ft" & vbCrLf
report = report & "Recommended Light Level: " & lightLevel & " lux" & vbCrLf
report = report & "Number of Lights: " & lightCount ^ 2 & vbCrLf
report = report & "Light Spacing: " & lightSpacing & " in" & vbCrLf
report = report & "Light Type: " & lightType & """ Recessed Can Light" & vbCrLf
Any help would be appreciated.
Sub PlaceLights.docx Sub PlaceLights.pdf
Automatically generated schedules…items that are added to a cabinet box such as a wall oven or lavatory show up in the schedule but I cannot seem to edit/control the name like I can with a free-standing item like a toilet or fridge. I have tried opening the cabinet dialogue box for that item to alter the individual component data so that the output in my schedule says what I need it to, but aside from renaming the cabinet label and assigning the cabinet as a plumbing fixture I don’t seem to be able to have the right control. Can anyone point me to a tutorial or reference a topic where this is covered? I keep chasing my tail searching for any tips and can’t find anything specific to my issue.
My Note Label symbols are scaling larger than the layer font for the note text. This causes schedules to come in much larger when dropped into Layout. Schedules are created in a CAD DETAIL page in the PLAN file then dropped onto a layout page at the same scale as the drawing view the notes are linked. Please help with this anomaly. I have included a PDF with Screen shots of a sample layout page, Schedule and Layer settings.
Thank you for anyoone who may be able to shed some light on this issue.
22-0110-CHIEF ISSUES-GDS-Schedule Note scaling in layout.pdf
I have returned to this forum once again in seek some help with ruby and macros.
I have been working on a macro to automate cabinet labels. So far I have a mostly working macro, but I feel like my hands are tied and my eyes are closed. First of all the documentation on chief implementation of ruby and its capabilities it really lacking. And second, I don't have the Ruby terminal. I think this is because I am running Interiors, but am not sure as all Chief says is that there is limited use of Ruby in this version.
Anyways, right now I would love to have a list of all callable object attributes. I honestly don't even know if that is the right name for what I am looking for. I am trying to find a list of what info I can scrape from a cabinet. So, what can I put after obj. (ie. obj.width, obj.type)? I think I could find this by running the selected.names command in the terminal, but I have no way of knowing.
This is my current macro. It is built from parts of a macro from @MarkMc and whatever I have been able to come up with from random trial and error. If you see something I could improve on, I am open to suggestions as long as they have a good explanation with them. Thanks in advance!
obj = owner
obj = referenced unless referenced.nil?
type = obj.type.to_s
nf = NumberFormatter.new
nf.unit = 'in'
nf.use_fractions = true
nf.show_unit = false
standard_size = 24.0 if type == 'base_cabinet'
standard_size = 12.0 if type == 'wall_cabinet'
standard_size = 24.0 if type == 'full_height_cabinet'
depth = nf.apply(obj.depth) if obj.depth.to_f != standard_size
standard_size_height = 36 if type == 'base_cabinet'
standard_size_height = 0.0 if type == 'full_height_cabinet'
height = nf.apply(obj.height) if obj.height.to_f != standard_size_height
width = nf.apply(obj.width)
nomen = 'B' if type == 'base_cabinet'
nomen = 'W' if type == 'wall_cabinet'
nomen = 'T' if type == 'full_height_cabinet'
hinging = owner.door_swing
label = ""
label << nomen << width.to_s << height.to_s << depth.to_s << hinging