Jump to content

The Hamma

Member
  • Content Count

    129
  • Joined

  • Last visited

Community Reputation

8 Neutral

About The Hamma

  • Rank
    Journeyman

Personal Information

  • Occupation
    Architect
  • Location
    United States

Recent Profile Visitors

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

  1. Where you able to write a script to accomplish this?
  2. """ This script identifies the name of a texture in the drawing and creates a new class with identified texture assigned to the newly created class. This is useful so that objects can be textured by assigning them to the appropriate class. This Python Script may be freely distributed. No warranty provided. Use at your own risk. If the name of the texture and the prefix exceeds 63 characters the class name will be shortened to 63 characters. This is a Vectorworks class name limitation. David Hamer, 2020 """ ClassPrefix ='I-FNSH-' #Newly created classes prefix TextureList, NumItems = vs.BuildResourceList(97, 0, '') while NumItems != 0: TextureName = vs.GetNameFromResourceList(TextureList, NumItems) TextureClassNameW = vs.Concat(ClassPrefix,TextureName) TextureClassName = vs.Copy(TextureClassNameW, 1, 63) vs.NameClass(TextureClassName) vs.SetClFillFore(TextureClassName,0,0,0) vs.SetClFillBack(TextureClassName,0,0,0) vs.SetClPenFore(TextureClassName,65535,65535,65535) vs.SetClPenBack(TextureClassName,65535,65535,65535) vs.SetClFPat(TextureClassName,1) vs.SetClLSN(TextureClassName,2) vs.SetClLW(TextureClassName,10) vs.EnableCLDropShadow(TextureClassName,False) vs.SetClUseGraphic(TextureClassName,True) TextureIndex = vs.Name2Index(TextureName) vs.SetClTextureC(TextureClassName, TextureIndex) vs.SetClTextureD(TextureClassName, TextureIndex) vs.SetClTextureG(TextureClassName, TextureIndex) vs.SetClTextureL(TextureClassName, TextureIndex) vs.SetClTextureR(TextureClassName, TextureIndex) vs.SetClTextureT(TextureClassName, TextureIndex) vs.SetClUseTexture(TextureClassName, True) NumItems = NumItems -1
  3. Revised 06-19-2020 I revised these scripts to only affect visibly selected items. Currently these scripts will not work in veiwport annotations Attached are scripts that I wrote to help with renovation projects. These scripts edit the classing and add a construction phase record to every item selected. PIO's that are inserted in walls can be selected with out selecting the containing wall and the script will only affect those PIO's selected. If the wall is selected it will modify the wall and the PIO's that are contained with in that wall. SCRIPT CLASS MODIFICATION CONSTRUCTION PHASE RECORD 1 Existing Object 1_Exist- (Prefix) EXISTING TO REMAIN 2 Demo Object 2_Demo- (Prefix) DEMOLISH EXISTING 3 New Object No change or return to original Class NEW CONSTRUCTION 4 NIC Object No change or return to original Class NOT IN CONTRACT 5 Remove Phase Record No change or return to original Class REMOVES RECORD FROM SELECTED OBJECTS (ADDED) With the use of the scripts and data visualization you can create viewports that show the construction phases as desired. Attached to this post is a demonstration Video, the two files used in that video, and the four scripts. I added the script to my selected object context menu so when I right click on an object I can access the scripts from there. 2020-05-16 16-42-33.mp4 Construction Phase Demo Unmodified Plan.vwx Construction Phase Demo.vwx 1 Existing Object.vsm 2 Demo Object.vsm 3 New Object.vsm 4 NIC Object.vsm 5 Remove Phase Record.vsm
  4. Is there an equivalent way to achieve this in vectoworks worksheets? I would like to just display the finish material code and not the material in the finish schedule. In excel I would create a blank column to the right column C and add this formula =LEFT(C5,FIND("]",C5)+1) See attached image
  5. Is there a vectorscript command to create new space style from current space handle?
  6. The current options in "Draw All Other Objects" are "Normally" and "Grayed". I would like "Hidden" to be added to those options so that objects not modified by Data Visualization properties would not display in the selected Data Visualization.
  7. I would like to request that a "Hidden" option is added to "Data Visualization" to the "Draw All Other Objects" Options
  8. I am looking for the files to modify for Standard Naming. For example the User 3 profile. Does anyone know where they are located or what the name of the file is?
  9. Marissa: I understand why you collected the handles of the Viewports before processing the actions but I was wondering why you collected the handles of the drawing labels before not deleting them. Would it be more efficient code to delete objects as you detect them?
  10. Does anyone know if it is possible to define a class tag using vectorscript?
  11. Below are the final results: Three scripts to assigns selected objects to class "1_Exist-(original class)", "2_Demo-(original class)" , or original class and set Construction Phase Existing, Demo, or New """ This script assigns selected objects to class "1_Exist-(original class)" and set Construction Phase to Existing. 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 """ # 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') # 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 assign(h) # Runs "def assign(h):" 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): assign(h) # Runs "def assign(h):" h1 = vs.FIn3D(h) while h1 != (): if vs.GetTypeN(h1) == 15: assign(h1) # Runs "def assign(h):" on symbol inserted if vs.GetTypeN(h1) == 86: assign(h1) # Runs "def assign(h):" on PIO inserted h1 = vs.NextObj(h1) 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) # 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) & (V) & (SEL=TRUE)))") vs.NameClass(ACName) # Return active class """ This script assigns selected objects to class "2_Demo-(original class)" and set Construction Phase to Demo. 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 """ # 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 CNameE == '1_Exist-': # Check if first 8 letters equal '1_Exist-' CName = vs.Copy(CName, 9, CLen) # if true grab root name of class if CNameD == '2_Demo-': # Check if first 7 letters equal '2_Demo-' if so retain name CNameN = CName else: CNameN = vs.Concat('2_Demo-', CName) # If not add '2_Demo-' 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', 'Demo') # 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 assign(h) # Runs "def assign(h):" 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): assign(h) # Runs "def assign(h):" h1 = vs.FIn3D(h) while h1 != (): if vs.GetTypeN(h1) == 15: assign(h1) # Runs "def assign(h):" on symbol inserted if vs.GetTypeN(h1) == 86: assign(h1) # Runs "def assign(h):" on PIO inserted h1 = vs.NextObj(h1) 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) # 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) & (V) & (SEL=TRUE)))") vs.NameClass(ACName) # Return active class """ This script assigns selected objects to class "(original class)" and set Construction Phase to New 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 """ #Modifications to any objects happen here def assign(h): CName=vs.GetClass(h) CLen=vs.Len(CName) CNameN = 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-' CNameN=vs.Copy(CName,8,CLen) # if true grab root name of class if CNameE=='1_Exist-': #Check if first 8 letters equal '1_Exist-' CNameN=vs.Copy(CName,9,CLen) # if true grab root name of class 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', 'New') #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 assign(h) # Runs "def assign(h):" 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): assign(h) # Runs "def assign(h):" h1 = vs.FIn3D(h) while h1 != (): if vs.GetTypeN(h1) == 15: assign(h1) # Runs "def assign(h):" on symbol inserted if vs.GetTypeN(h1) == 86: assign(h1) # Runs "def assign(h):" on PIO inserted h1 = vs.NextObj(h1) 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) # 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) & (V) & (SEL=TRUE)))") vs.NameClass(ACName) # Return active class DataVisualizationsInfo.vwx 1 Existing Object.vsm 2 Demo Object.vsm 3 New Object.vsm
  12. LOL or just change FSActLayer to h. I didn't even stop to think about that. I was assuming that FSActLayer was passing the handle from : def SetAttribute(h): container = 'none' #set global variable phase = 'Demo' def SetPIOAttribute(h): global container #declare global variable to be retained vs.SetRecord(h,'Construction Phase') #add record to inserted object vs.SetRField(h,'Construction Phase','Phase', phase) #modify record to inserted object itChild = vs.GetTypeN(h) #Get Child type (not necessary) hParent = vs.GetParent(h) #Get Parent handle itParent = vs.GetTypeN(hParent) #Get Parent type #If Parent type is a wall set container to state PIOinwallwasdetected if itParent == 68: container = 'PIOinwallwasdetected' #Add and change record of wall and PIO or symbols inserted in wall def SetAttribute(h): vs.SetRecord(h,'Construction Phase') vs.SetRField(h,'Construction Phase','Phase', phase) h1 = vs.FIn3D(h) while h1 != (): if vs.GetTypeN(h1) == 15: vs.SetRecord(h1,'Construction Phase') vs.SetRField(h1,'Construction Phase','Phase', phase) if vs.GetTypeN(h1) == 86: vs.SetRecord(h1,'Construction Phase') vs.SetRField(h1,'Construction Phase','Phase', phase) h1=vs.NextObj(h1) vs.ForEachObject(SetPIOAttribute, "((NOTINDLVP & NOTINREFDLVP & ((PON='Door')|(T=SYMBOL)|(PON='Window')) & (V) & (SEL=TRUE)))") #If PIO was selected and wall was not then container var PIOinwallwasdetected is true then script will end if not then wall was selected and script will continue to def SetAttribute if container != 'PIOinwallwasdetected': vs.ForEachObject(SetAttribute, "((NOTINDLVP & NOTINREFDLVP & (V) & (SEL=TRUE)))")
  13. I thought it was working perfectly but it does if I select one wall at a time. In that instance it will change the wall and all the PIO objects within but If I select several walls it does not edit all of the PIO objects, it only edits the PIO in the first item selected. container = 'none' #set global variable phase = 'Existing' def SetPIOAttribute(h): global container #declare global variable to be retained vs.SetRecord(h,'Construction Phase') #add record to inserted object vs.SetRField(h,'Construction Phase','Phase', phase) #modify record to inserted object itChild = vs.GetTypeN(h) #Get Child type (not necessary) hParent = vs.GetParent(h) #Get Parent handle itParent = vs.GetTypeN(hParent) #Get Parent type #If Parent type is a wall set container to state PIOinwallwasdetected if itParent == 68: container = 'PIOinwallwasdetected' #Add and change record of wall and inserted items (only changes wall at this time) def SetAttribute(h): vs.SetRecord(h,'Construction Phase') vs.SetRField(h,'Construction Phase','Phase', phase) h1 = vs.FIn3D(vs.FSActLayer()) while h1 != (): vs.SetRecord(h1,'Construction Phase') vs.SetRField(h1,'Construction Phase','Phase', phase) h1=vs.NextObj(h1) vs.ForEachObject(SetPIOAttribute, "((NOTINDLVP & NOTINREFDLVP & ((PON='Door')|(T=SYMBOL)|(PON='Window')) & (V) & (SEL=TRUE)))") #If PIO was selected and wall was not then container var PIOinwallwasdetected is true then script will end if not then wall was selected and script will continue to def SetAttribute if container != 'PIOinwallwasdetected': vs.ForEachObject(SetAttribute, "((NOTINDLVP & NOTINREFDLVP & (V) & (SEL=TRUE)))")
  14. Not inserting the symbol in the wall or using PIO seems to be the best course of action. The symbols visualization works fine if is not nested in a wall. If it is nested I can remove it and re-nest it and the visualization works fine. I still think this is a glitch since it just takes some sort of refresh to make it work. That being said vs.redrawall() does not work (it actually causes every item changed not to refresh). For the most part I think I can work around it but it a bit aggravating.

 

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...