Jump to content

The Hamma

  • Content Count

  • Joined

  • Last visited

Community Reputation

13 Good

About The Hamma

  • Rank

Personal Information

  • Occupation
  • Location
    United States

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I typically have to ungroup a roof because it is rare that I can make to roof tool work without ungrouping it. Many times I have multiple pitches that the roof tool does not join correctly.
  2. I requested the feature be added to Vectorworks but I have also created a script, record and data tag workaround. I have attached the sample vectorworks file. Only works or roof faces so you have to ungroup your roof to use this. Next you need to run the script included to assign the pitch to a record that is attached to each face. Then you can use the tag to tag the roof faces in plan. Note: this is been customized for inch pitches on a 12" run. The script would have to be modified if you want to use it for a different run dimension. Roof Pitches on Plan.vwx
  3. I am able to get the angle of a roof using a worksheet but I cannot figure out how to get a data tag to display the angle of a roof. Worksheet field is =ANGLE Data tag #ANGLE# & #=ANGLE# does not work. Anyone know what the call would be?
  4. Sarah: Any idea why when I run the Panel Array Marionette on my nurbs surface it comes out skewed but it comes out correctly on your nurbs surface?
  5. Ha! I knew I could drag them up and down but I did not realize pressing the bar at the top would sort them. Weird thing is that they are still out of order in your example. Pressing the sort button on the number column does not work but it does work when I press the Description column. Thank you so much for the insight. I did create a worksheet to display and sort my keynotes because I could not get this to work. I may still end up using the worksheet because I can filter keynotes by sheets and layers rather than going through the process of assigning keynotes to individual keynote lists. FYI the hidden value to display the text of a keynote is ='Callout'.'Text'
  6. We use a database of keynotes based on CSI spec section numbers and when we place them we don't place them in numerical order. This is an issue because the keynote legend is based on the order that the note was dropped. Does anyone have a work around to reorder the keynotes in the legend to be sorted in ascending order? I know I can edit the legend and move them up and down manually but this is more work than should be necessary. Sample file is attached. CALLOUTS AND KEYNOTES.vwx
  7. I will give that a try, thank you. I did revise it t a bit since I posted i but it cycles through the list of symbols in the resource browser and looks for the matching symbol in the drawing. When it finds it if it has the 'ITEM' record it copies the values from the symbol in the drawing and rewrites the values to the matching symbol in the resource browser. I am using this because I have a customer that reuses equipment over and over but sometimes it gets revised. I have an equipment schedule that pulls the info from the symbols in the drawing. I am writing this script because if you edit the record on the symbol or from the schedule the record attached to the symbol in the resource browser is not updated by that edit. This script will update the resource browser.
  8. The following script writes back the records to the matching symbol from a symbol that have been edited in a the drawing. The problem is that it only works on the symbols in the root of the resource browser but does not work on symbols that are in folders. How do I make this script edit every symbol in the resource browser for the current drawing? {$DEBUG} PROCEDURE ItemRecordtosymbol; VAR countObj : INTEGER; lts,it1 : INTEGER; s3,itemname,grabsymbol,rITEM,rDESCRIPTION,rMANUFACTURER,rMODEL,rFURNISHEDBY,rINSTALLEDBY,rFLAMPS,rKW,rHP,rVOLTS,rPHASE,rDIRECTPOWER,rPLUG,rFILTERED,rCOLD,rHOT,rDIRECTWASTE,rINDERECTWASTE,rSIZE,rMBTUH,rREMARKS,rITEMGROUP,rREVISION:string; h,H1:handle; PROCEDURE ExplodeSymbols(h :HANDLE); BEGIN rITEM := GetRField(h,'ITEM','ITEM'); rDESCRIPTION := GetRField(h,'ITEM','DESCRIPTION'); rMANUFACTURER := GetRField(h,'ITEM','MANUFACTURER'); rMODEL := GetRField(h,'ITEM','MODEL'); rFURNISHEDBY := GetRField(h,'ITEM','FURNISHED BY'); rINSTALLEDBY := GetRField(h,'ITEM','INSTALLED BY'); rFLAMPS := GetRField(h,'ITEM','FL-AMPS'); rKW := GetRField(h,'ITEM','KW'); rHP := GetRField(h,'ITEM','HP'); rVOLTS := GetRField(h,'ITEM','VOLTS'); rPHASE := GetRField(h,'ITEM','PHASE'); rDIRECTPOWER := GetRField(h,'ITEM','DIRECT POWER'); rPLUG := GetRField(h,'ITEM','PLUG'); rFILTERED := GetRField(h,'ITEM','FILTERED'); rCOLD := GetRField(h,'ITEM','COLD'); rHOT := GetRField(h,'ITEM','HOT'); rDIRECTWASTE := GetRField(h,'ITEM','DIRECT WASTE'); rINDERECTWASTE:= GetRField(h,'ITEM','INDIRECT WASTE'); rSIZE:= GetRField(h,'ITEM','SIZE'); rMBTUH:= GetRField(h,'ITEM','MBTUH'); rREMARKS:= GetRField(h,'ITEM','REMARKS'); rITEMGROUP:= GetRField(h,'ITEM','ITEM GROUP'); rREVISION:= GetRField(h,'ITEM','REVISION'); END; Begin H1:=FSymDef; While H1 <> Nil do Begin itemname := GetName(H1); ForEachObject(ExplodeSymbols,((INSYMBOL & INOBJECT & INVIEWPORT & (T=SYMBOL) & (S=itemname)))); SetRField(H1,'ITEM','ITEM',rITEM); SetRField(H1,'ITEM','DESCRIPTION',rDESCRIPTION); SetRField(H1,'ITEM','MANUFACTURER',rMANUFACTURER ); SetRField(H1,'ITEM','MODEL',rMODEL); SetRField(H1,'ITEM','FURNISHED BY',rFURNISHEDBY ); SetRField(H1,'ITEM','INSTALLED BY',rINSTALLEDBY ); SetRField(H1,'ITEM','FL-AMPS',rFLAMPS ); SetRField(H1,'ITEM','KW',rKW ); SetRField(H1,'ITEM','HP',rHP ); SetRField(H1,'ITEM','VOLTS',rVOLTS ); SetRField(H1,'ITEM','PHASE',rPHASE ); SetRField(H1,'ITEM','DIRECT POWER',rDIRECTPOWER ); SetRField(H1,'ITEM','PLUG',rPLUG ); SetRField(H1,'ITEM','FILTERED',rFILTERED ); SetRField(H1,'ITEM','COLD',rCOLD ); SetRField(H1,'ITEM','HOT',rHOT ); SetRField(H1,'ITEM','DIRECT WASTE',rDIRECTWASTE ); SetRField(H1,'ITEM','INDIRECT WASTE',rINDERECTWASTE); SetRField(H1,'ITEM','SIZE',rSIZE); SetRField(H1,'ITEM','MBTUH',rMBTUH); SetRField(H1,'ITEM','REMARKS',rREMARKS); SetRField(H1,'ITEM','ITEM GROUP',rITEMGROUP); SetRField(H1,'ITEM','REVISION',rREVISION); H1:=NextObj(H1); End; End; Run(ItemRecordtosymbol);
  9. You can control the hatch in a section using data visualization. See the attached files 2021 Test File.vwx 2021 Test File.pdf
  10. I have a spreadsheet with a list of equipment and each piece of equipment is identified with a unique id. I also have symbols in the drawing with a record attached and a matching field for every column in the spread sheet. I was able to create a report based on the record and I am able to copy cell by cell manually from the imported spread sheet to the record report worksheet. My question is has anyone written a script that would search a worksheet for a matching id and copy all of the following cells in the row to the other worksheet?
  11. Worked perfectly. I am still learning Python but I find it much simpler than vectorscript. Thank you. """ This script assigns Item record to symbols in resource manager and instances in drawing. It uses the name of the symbol for the value of the Item record. It was useful when using a data tag to tag equipment in an equipment plan and elevations. I was able to assign the same record to groups in the elevations and use the same data tag to mark the items in the elevation. This Python Script may be freely distributed. No warranty provided. Use at your own risk. David Hamer, 2020-08-30 """ def setrecord(h): vs.SetRecord(h, 'ITEM') # add record to symbols in drawing vs.SetRField(h, 'ITEM', 'ITEM', itemname) # modify record of the symbol in drawing h = vs.FSymDef() while h != []: global itemname itemname = vs.GetName(h) vs.SetRecord(h, 'ITEM') # add record to symbols in root folder of resource manager vs.SetRField(h, 'ITEM', 'ITEM', itemname) # modify record of symbol in root folder of resource manager vs.ForEachObject(setrecord, "(S='"+itemname +"')") #selects symbols of same name in drawing and runs setrecord h = vs.NextObj(h) #Looks for next symbol in resouce manager
  12. When using vectorscript I can use the following line with itemname being a variable. ForEachObject ( ExplodeSymbols , ( (INSYMBOL & INOBJECT & INVIEWPORT & (T=SYMBOL) & (S=itemname) ) ) ); But when using python i can use the itemname as a variable because the criteria is required to be inserted in quotes. vs.ForEachObject ( ExplodeSymbols , "( ( INSYMBOL & INOBJECT & INVIEWPORT & (T=SYMBOL) & (S=itemname) ) ) " ); Does anyone know if there is a way around this. I tried to replace everything inside the qoutes with a vs.concat created string but it kept asking for a right parenthesis. Tried to add extra parenthesis to no avail. def setrecord(h): vs.SetRecord(h, 'ITEM') # add record to inserted object vs.SetRField(h, 'ITEM', 'ITEM', itemname) # modify record to inserted object # Modifications to any objects happen here h = vs.FSymDef() while h != []: global itemname itemname = vs.GetName(h) vs.SetRecord(h, 'ITEM') # add record to inserted object vs.SetRField(h, 'ITEM', 'ITEM', itemname) # modify record to inserted object grabsymbol = vs.Concat('setrecord',',"S=',itemname,'"') vs.ForEachObject(grabsymbol) h = vs.NextObj(h) I did rewrite the script in vectorscript as follows and it worked so I am just asking for future reference. PROCEDURE ItemRecordfromsymbolname; VAR itemname:string; h,H1:handle; PROCEDURE ExplodeSymbols(h :HANDLE); BEGIN AlrtDialog('running'); SetRecord(h, 'ITEM'); SetRField(h, 'ITEM', 'ITEM', itemname); END; Begin H1:=FSymDef; While H1 <> Nil do Begin itemname := GetName(H1); SetRecord(H1, 'ITEM'); SetRField(H1, 'ITEM', 'ITEM', itemname); ForEachObject(ExplodeSymbols,((INSYMBOL & INOBJECT & INVIEWPORT & (T=SYMBOL) & (S=itemname)))); H1:=NextObj(H1); End; End; Run(ItemRecordfromsymbolname);
  13. Does anyone know if the studio drivers are better than the gaming drivers for Nvidia geforce cards? From Nvidia driver download page """" Game Ready Drivers provide the best possible gaming experience for all major games. NVIDIA's driver team exhaustively tests games from early access through release of each DLC to optimize for performance, stability, and functionality. These drivers are certified by Microsoft’s Windows Hardware Quality Labs (WHQL). Studio Drivers provide the best possible experience for key creative applications. NVIDIA does extensive testing across the top creative applications to ensure the highest levels of performance, stability, and functionality. These drivers are certified by Microsoft’s Windows Hardware Quality Labs (WHQL). """"
  14. Script has been edited to omit objects selected on layers that are visible but not editable because layer options are not set to "Show/Snap/Modify Others" """ This script assigns selected objects to class "1_Exist-(original class)" and set Construction Phase to 'EXISTING TO REMAIN'. If a in wall object is selected without selecting the wall the script will only change those in wall objects. If a wall is selected it will change the wall and all objects inserted in that wall. If New class does not exist objects original class is duplicated to retain class attributes. To take full advantage of this script use "Data Visualization" to display the "Construction Phase" record objects as desired. 1. Set "Data Visualization" to modify drawings per "Construction Phase" record 2. To make a "Construction Phase" invisible set the attributes of that phase to: Line settings to Fill "Solid White" and Line weight "0" This Python Script may be freely distributed. No warranty provided. Use at your own risk. Vectorworks bug does not show changes to symbols inserted in wall until either: Drawing is saved and reopened. Setting in Data Visualization dialog is changed. Symbol is removed from wall, can then be reinserted David Hamer, 2020 revision 08-13-2020 """ # Modifications to any objects happen here def assign(h): CName = vs.GetClass(h) CLen = vs.Len(CName) CNameE = vs.Copy(CName, 1, 8) # Grab First 8 letters of handle's class CNameD = vs.Copy(CName, 1, 7) # Grab First 7 letters of handle's class if CNameD == '2_Demo-': # Check if first 7 letters equal '2_Demo-' CName = vs.Copy(CName, 8, CLen) # if true grab root name of class # check if the class is new, if so delete new class and duplicate objects class and rename. if CNameE == '1_Exist-': CNameN = CName else: CNameN = vs.Concat('1_Exist-', CName) # If not add '1_Exist-' to name ClassCount = vs.ClassNum() # determine number of classes in drawing vs.NameClass(CNameN) # set the name of the class to be applied to handle if new class will be created if ClassCount + 1 == vs.ClassNum(): # check if the class is new and if delete new class and duplicate source vs.ReDraw() vs.DelClass(CNameN) # Delete new class CHandle = vs.GetObject(CName) # get handle to source class NDCHandle = vs.CreateDuplicateObject(CHandle, vs.GetParent(CHandle)) # duplicate source class vs.SetName(NDCHandle, CNameN) # rename duplicate class to name to be applied to handle vs.ResetObject(NDCHandle) vs.ResetObject(h) vs.SetClass(h, CNameN) # name handle's class vs.SetRecord(h, 'Construction Phase') # add record to inserted object vs.SetRField(h, 'Construction Phase', 'Phase', 'EXISTING TO REMAIN') # modify record to inserted object # Passes Handle to "def assign(h):" of PIO or Symbol selected def pio_processing(h): global container # declare global variable to be retained if vs.GetObjectVariableInt(vs.GetLayer(h), 154) == activetype: hSEL.append(h) # adds to list hParent = vs.GetParent(h) # Get Parent handle itParent = vs.GetTypeN(hParent) # Get Parent type if itParent != []: if itParent == 68: # If Parent type is a wall set container to state PIOinwallwasdetected container = 'PIOinwallwasdetected' if itParent == 89: # If Parent type is a round wall set container to state PIOinwallwasdetected container = 'PIOinwallwasdetected' # Passes Handle to "def assign(h):" of every object except PIO and Symbols outside walls selected def object_processing(h): if vs.GetObjectVariableInt(vs.GetLayer(h), 154) == activetype: hSEL.append(h) # adds to list h1 = vs.FIn3D(h) while h1 != []: if vs.GetObjectVariableInt(vs.GetLayer(h1), 154) == activetype: if vs.GetTypeN(h1) == 15: hSEL.append(h1) # adds to list if vs.GetTypeN(h1) == 86: hSEL.append(h1) # adds to list h1 = vs.NextObj(h1) def sl_processing(h): # Omit's Viewports in Sheet Layers if vs.GetTypeN(h) != 122: assign(h) hSEL = [] # defines list to contain handles to all selected objects activetype = 1 container = 'none' # Declare container var ACName = vs.ActiveClass() # Record name of active class if vs.GetObject('Construction Phase') == (): # Creates "Construction Phase" record if not present vs.NewField('Construction Phase', 'Phase', '<none>', 4, 0) if vs.GetObjectVariableInt(vs.ActLayer(), 154) == 2: activetype = 2 vs.ForEachObjectInLayer(sl_processing, 2, 0, 0) else: # Passes Handle to "def pio_processing(h):" of PIO and Symbols selected vs.ForEachObject(pio_processing, "((((T=PLUGINOBJECT)|(T=SYMBOL)) & (V) & (SEL=TRUE)))") # Passes Handle to "def object_processing(h):" of objects selected except PIO and Symbols outside walls selected # Skipped if PIO or Symbol selected was in wall if container != 'PIOinwallwasdetected': vs.ForEachObject(object_processing, "(((T<>PLUGINOBJECT)&(T<>SYMBOL)&(T<>VIEWPORT) & (V) & (VSEL=TRUE)))") for h in hSEL: if vs.GetPrefInt(506) != 5: if vs.GetLayer(h) == vs.ActLayer(): assign(h) else: assign(h) vs.NameClass(ACName) # Return active class


7150 Riverwood Drive, Columbia, Maryland 21046, USA   |   Contact Us:   410-290-5114


© 2018 Vectorworks, Inc. All Rights Reserved. Vectorworks, Inc. is part of the Nemetschek Group.

  • Create New...