Alaskan_Son

Members
  • Posts

    11962
  • Joined

Everything posted by Alaskan_Son

  1. @Chrisb222 already pointed out the main issues, but to clarify a bit: First thing to understand as that when you check Trusses (no Birdsmouth), 2 important things happen: 1). Chief changes the Structure Thickness to match your Default Truss Top Chord Depth. 2). Chief automatically places the Baseline height of the roof so that the bottom of the Truss Top Cord sits right on top of your wall at the Baseline. The above is true for BOTH automatically generated roofs and for manually drawn roofs (assuming you change the setting before manually drawing your roof). You can find all this information and more if you get into the habit of clicking the Help button. In this case, open the Build Roof dialog, click the little Help button down in the corner, and read up on the Trusses (no Birdsmouth) setting. Follow any related links if you don't find what you need in that particular article.
  2. This is true, but upon creation of a new elevation that uses those variables, the user is almost certainly going to be copying other stuff anyway, Might as well just group select that item as well. Regardless, it only takes a matter of seconds. Depending on the approach taken, the macro(s) could even be placed in a default label or default text box thereby alleviating the need to copy anything. Your suggested approach (using a Global hash with a unique key set by the user for each new plan) will work as well, but in large part, you're just kicking the can further down the road. Not only does each user have to remember to change that key with each and every new plan and for each and every new plan iteration, but they may even need to change it for each and every user. PLUS, the global hash would never even get populated until the CAD Detail were opened up. That means for every single session for every single plan, a person would have to first open that CAD Detail if they wanted to see the appropriate values. The bottom line is that if you're going to be using Global variables, you'll get the most stable, consistent, and predictable results if the macros that define the variables can be placed in the views that are using the variables. This isn't always possible, but when it is, I would highly recommend doing it. All other approaches rely on shutting down and restarting Chief, shutting down and restarting plans, opening specific dialogs during various operations or during each session, opening or scrolling through specific views in each plan or session, and/or maintaining some other complex routine to ensure accuracy.
  3. Here’s one method that doesn’t require any macros:
  4. By the way, you can also skip the use of Globals altogether and simply use a hash: Example Hash: name: test value: {:a => 1, :b => 2, :c => "apples"} Example Usage: %macros.test[:a]+macros.test[:b]% %macros.test[:c]% #=> "3 apples"
  5. Just so you know, there are plenty of other solutions that haven't even been discussed. For example, why not place all these variable assignments into a single Parent macro? Set that macro to include nothing as its last line ("" or nil) and then wherever you want to use one of the variables you simply place both the Parent and the Child. Example: "parent" macro definition: $a = 1 $b = 2 $c = "apples" "" Placed into your desired label, note, callout, or text box: %parent%%$a+$b% %$c% #=> "3 apples" or one of several other optional formats; %macros.parent; "#{$a+$b} #{$c}"% All your assignments are made in a single place and because the parent macro is always placed with any child macros, the results are always accurate. You could also define Classes and Methods like so: "parent" macro definition: class MyClass def a 1 end def b 2 end def c "apples" end end MyClass.new Placed into your desired label, note, callout, or text box: %macros.parent.a+macros.parent.b% %macros.parent.c% #=> "3 apples" Again, all your assignments are made in a single place, and even though Classes and Methods are global by nature as well, they will always be accurate per the current plan because you're referencing the defining macro in every location that its being used.
  6. No, not at all. Read my post again. Specifically this part... You place the required macro(s) into the required views in your template plan. Once and done. From that point forward, all you do is change the CAD Block or macro definition in a single place and any/all views that use any associated global variables will be updated as well. Because the defining macros live in the views where the variables are being used, the variables will always be accurate.
  7. You've highlighted the key issue and that is this. A global variable must be properly defined before you can use the desired value in any given view. In my opinion, the best way to ensure this happens is to include the variable defining macros in any view that they are being used in. They can be placed off to the side, they can be made invisible, they can be made super small, they can be hidden...any number of things, but if the macros that set the desired value are placed in the same views where you are using the desired value then you'll always have the most current value as it pertains to that particular plan. In the specific scenario mentioned by the OP, that whole setup can potentially just be part of a CAD Block. That CAD Block can simply be dropped into any view where the macros are used. Update the CAD Block, and all views that contain the CAD Block will be updated as well. Yes, there are various other methods of dynamically naming or organizing variable values so that the value is linked to the specific plan. You can use the actual plan name, you can make a habit of incrementing a unique plan number with each new plan, you can simply copy and paste your macro definitions from a spreadsheet that assigns unique names to your variables, you can use macros that reference an external file (that again uses unique variable names for each plan), and so on. I personally don't think however that its worth jumping through all the hoops when you can just make sure your global defining macro(s) are present in the views where the values are being used.
  8. They don't actually jump from one plan to another. The issue is simply that there's only one global memory to go along with any given instance of Chief. So, for all intents and purposes, any global variable can only have one value at any given time.
  9. As some of the others have already pointed out, what you're talking about is actually a global variable, not a global macro. It would help if you were to communicate in the approrpiate terms. Chief does have some of what they call global macros, but those are a different thing entirely.
  10. …or your “Walls, Attic” Layer is turned off.
  11. It did at first, but the more I thought about it, the more I realized that it wouldn't actually change my current workflow hardly at all. The offset would vary based on foundation type, sub-floor thickness, and joist depth at a minimum meaning I would almost certainly end up having to manually change that number for every plan anyway...which in turn means that I might as well just manually change like we already have to now. If you're always working with a flat lot and always use the same foundation/garage slab, joist, and subfloor specs, then you might as well just change that Subfloor Height above Terrain setting in your template plan. Again, just like we already can. If you're dealing with a sloping lot or dealing with multiple garage slab heights than there's no way around it, you would need to set differently for each individual scenario. Bottom line, I can't think of any situation where I wouldn't still be going through the same number of steps with or without a manual offset setting.
  12. You bet. I’m suspecting you just didn’t click on the link. The title doesn’t make it very clear that it’s going to describe what you were looking for.
  13. Click the Help button while you're in that dialog and then follow the link. You'll find this: "The program automatically positions Floor 1 a set distance above the terrain. To do this, it first calculates the average elevation of the building footprint's perimeter and then assigns that average elevation to the center point of the building footprint. Finally, it adds the thickness of the floor platform to this value . If a foundation is present, it also adds the thickness of any sill plates plus either 6” (150 mm) or 8” (200 mm) depending on the foundation type. The resulting value, referred to as the automatic Subfloor Height Above Terrain, is how far the default height of Floor 1 is above sea level in the current plan. See Foundations and the Terrain."
  14. I'm all but certain that the OP simply converted to the wrong symbol type based on the last sentence in the post... If I were a betting man, I'd bet that Robert already pointed out the most likely culprit...
  15. A few notes: Here's what you typed up... %automatic_label.Slice!(%automatic_label.index("-")+2..60% This would have actually worked just fine except that you had a number of small mistakes. What you should have typed was.... %automatic_label.slice!((automatic_label.index("-")+2)..60)% With corrections marked... %automatic_label.slice!((%automatic_label.index("-")+2)..60)% Having said that, and although it will work, I would suggest a few other things about this approach... Using slice! instead of simply slice isn't really necessary in this situation. It's not hurting anything, but it serves no purpose in the context in which you're using it. To take it one step further though... You don't even need to use slice at all. The string[index] method will actually do the same thing. Using an extra large index (60) to make sure you grab all possible characters is a sloppy way of doing so. You should really use -1 which represents the last character in the string. So a cleaned up version of your same general approach with changes would be... %automatic_label[(automatic_label.index("-")+2)..-1]% Anyway, as Eric pointed out, there are MANY ways of getting what you want, but I would suggest something I find to be a bit more succinct and explicit. That is, using partition(separator)... %automatic_label.partition(" - ")[2]% This method very deliberately breaks your string into an array containing 3 parts: a prefix, your defined separator, and a suffix. You then simply specify inside brackets which of the 3 elements you want.
  16. There are a few keystroke sequences that will do the trick but what I normally use is Control+A (Select All) followed by Delete.
  17. I don't feel like this would actually solve much of anything. This isn't much different from manually doing a Save As or going back to the Backup Archives. Any changes to a common feature would still require changing in all forked version of the plan.
  18. You don't. Chief simply isn't set up for that. There are all sorts of workarounds that allow for you to place multiple items in the same locations but they aren't worth the hassle in my opinion. Until Chief creates something else, multiple plan files is the way to go. Having said that, IF all you really need to do is show floor plan changes, that IS possible in a single file and can be achieved using any number of methods. One of the easiest however is to just use multiple floors all using the same Reference Floor as the basis. Each floor is a different design iteration and its easy to Copy/Paste Hold Position between floors whenever you want. You can also use 3D Reference Display capabilities but then you're right back to using multiple plan files so the benefits are pretty minimal.
  19. By the way, if you do decide that the entire symbol needs curving, there are a few methods you can use such as: Converting your symbol to a window symbol, placing that window symbol into a curved wall, and then converting that curved window to a fixture symbol. This method is the one I've historically used the most because it allows for pretty easy resizing of the symbol. It is however extremely nuanced and requires setting various things (wall thickness, symbol offsets, wall radius, etc.) just right and using some less than intuitive parameters that you wouldn't normally think of in order to get the desired results. Using the Window treatment method mentioned by @DBCooper. I won't get into this one as its not one I've used very much. Converting your symbol to a cabinet door symbol and then using a Bow Front cabinet to get your desired size and shape. This seems to actually be the most intuitive and easiest to control. Its pretty easy to get accurate results and only requires modifying one symbol setting (which isn't even totally necessary). I have a special "tool" set up specifically for this purpose. Here's what you do. Download the attached object. Its really just a Bow Front Cabinet set to a Filler and with every element turned off except for a single Door Front. Select the object(s) you would like to curve, and click the Convert Selected to Symbol tool. Choose Symbol Category>Cabinet Door/Drawer, check Add to Library, and check Show Advanced Options. Click Okay. When the Symbol Specification dialog opens up, change the Y Position Origin Offset to 1/16" (this will cause the door symbol to hug the cabinet front with no gap between the door and the cabinet) Drop the previously downloaded "Symbol Arching Tool" cabinet into your plan Select your previously created Door/Drawer and hover over your "Symbol Arching Tool" cabinet. You should see the Replace From Library indicator. Click to replace. Change the width and height of the cabinet to adjust the overall width and height of the newly curved object and change the Bow Front Depth to adjust the radius of the curve. NOTE: It really helps visualize things a bit better if you at least temporarily turn on Show Closed Doors/Drawers in Plan View in your General Cabinet Defaults. When you get the shape you want, simply select the cabinet, Convert Selected to Symbol, and select Symbol Category>Fixture Symbol Arching Tool.calibz
  20. There are a couple ways to activate the Library. The most effective I've found though (at least for Windows machines) is the following keystroke sequence: Alt (activates the file menu) Menu key (has the effect of right clicking up in the menu) Down arrow (selects the Library Browser) Enter (closes the Library Browser down) Alt (activates the file menu again) Menu key (has the effect of right clicking up in the menu again) Down arrow (selects the Library Browser again) Enter (opens the Library Browser this time) When the Library Browser is opened using this sequence, the search bar in the Library Browser is activated.
  21. I think the first step in these situations is to make sure you fully understand the geometry of the object(s) you intend to curve. Does the entire object actually curve or it it possible its only a couple specific surfaces that curve? Or perhaps its a combination of elements... ...and the more elements you have, the more complicated it can become. Once you decide exactly what needs to curve, then you can decide the best method of modeling it. Can you verify what exactly needs to curve? And what all elements are involved?
  22. This is not what I was intending to communicate at all. On the contrary, I almost never have to clean anything up. I just wanted to stop shy of saying never.
  23. Wait, what? That's cheating? Oh man, I have a lot soul searching to do.
  24. I doubt you'll be able to. My guess is that its either a crappy texture where the top and bottom of the image don't align and therefor don't properly tile, or that the problem is with the model itself and that what you think is a single surface is actually multiple surfaces that aren't on the same plane.