Jump to content

The Hamma

Member
  • Posts

    264
  • Joined

  • Last visited

Everything posted by The Hamma

  1. 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'
  2. 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
  3. 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.
  4. 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);
  5. You can control the hatch in a section using data visualization. See the attached files 2021 Test File.vwx 2021 Test File.pdf
  6. 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?
  7. 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
  8. 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);
  9. 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). """"
  10. 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
  11. Ok, I can use from VPRename_A import hVP, numberStr to retrieve hVP and numberStr from VPRenumb_A Now that I have that solved It does not seem to fix my issue with the script. If I run script "VP Label (Consecutive)" from the workspace and I place "VPRenumb_A.vsm" in the workspace and call it via "vs.DoMenuTextByName('VPRenumb_A', 0)" it actually leaves my script to run the second script and this completes without giving me any messages about renumbering the drawing labels. If I run script "VP Label (Consecutive)" from the workspace and I place "VPRenumb_A.py" in the plugins folder and call it via "from VPRename_A import hVP, numberStr" it actually imports the "VPRenumb_A.py" into the first script to run and this completes giving me a warning messages about renumbering the drawing labels. Is there a way to call an external python script without running it within the first script like "vs.DoMenuTextbyName" does? Note I still need to receive or send variables to or from the second script and not all of the labels redraw correctly. I have attached the two versions. VP Label (Consecutive) (DoMenubytextName).zip VP Label (Consecutive) (import).zip
  12. OK I have another question. If I run an external python script from an internal script can I pass the variables from the external script back to the internal script when the external script completes?
  13. """ This a global script that affects all sheet layers. It classes all objects on sheet layers as follows. Viewport Drawing labels to class = Sheet-Label Viewport Annoatations to class = Sheet-Anno Viewports and sheet items = Sheet-Main Redlines remain on Notes-Redlines or A-ANNO-REDL All classes listed above are turned on on all viewports. This Python Script may be freely distributed. No warranty provided. Use at your own risk. David Hamer, 2020 revision 07-31-2020 """ # collect handles of selected VPs on active layer def GetHandle(h): if vs.GetObjectVariableInt(vs.GetLayer(h), 154) == 2: if vs.GetObjectVariableString(h, 1166) != 'Redline Object': vs.SetClass(h, 'Sheet-Main') if vs.GetTypeN(h) == 122: hVP.append(h) ACName = vs.ActiveClass() # Record name of active class ClassCount = vs.ClassNum() # determine number of classes in drawing vs.NameClass('Sheet-Main') # Creates class if it does not exist and sets properties if ClassCount + 1 == vs.ClassNum(): vs.NameClass('Sheet-Main') vs.SetClFillFore('Sheet-Main',0,0,0) vs.SetClFillBack('Sheet-Main',0,0,0) vs.SetClPenFore('Sheet-Main',65535,65535,65535) vs.SetClPenBack('Sheet-Main',65535,65535,65535) vs.SetClFPat('Sheet-Main',1) vs.SetClLSN('Sheet-Main',2) vs.SetClLW('Sheet-Main',10) vs.EnableCLDropShadow('Sheet-Main',False) vs.SetClUseGraphic('Sheet-Main',True) ClassCount = vs.ClassNum() # determine number of classes in drawing vs.NameClass('Sheet-Label') # Creates class if it does not exist and sets properties if ClassCount + 1 == vs.ClassNum(): vs.NameClass('Sheet-Label') vs.ShowClass('Sheet-Label') vs.SetClFillFore('Sheet-Label',0,0,0) vs.SetClFillBack('Sheet-Label',0,0,0) vs.SetClPenFore('Sheet-Label',65535,65535,65535) vs.SetClPenBack('Sheet-Label',65535,65535,65535) vs.SetClFPat('Sheet-Label',1) vs.SetClLSN('Sheet-Label',2) vs.SetClLW('Sheet-Label',28) vs.EnableCLDropShadow('Sheet-Label',False) vs.SetClUseGraphic('Sheet-Label',True) ClassCount = vs.ClassNum() # determine number of classes in drawing vs.NameClass('Sheet-Anno') # Creates class if it does not exist and sets properties if ClassCount + 1 == vs.ClassNum(): vs.NameClass('Sheet-Anno') vs.ShowClass('Sheet-Anno') vs.SetClFillFore('Sheet-Anno',0,0,0) vs.SetClFillBack('Sheet-Anno',0,0,0) vs.SetClPenFore('Sheet-Anno',65535,65535,65535) vs.SetClPenBack('Sheet-Anno',65535,65535,65535) vs.SetClFPat('Sheet-Anno',1) vs.SetClLSN('Sheet-Anno',2) vs.SetClLW('Sheet-Anno',10) vs.EnableCLDropShadow('Sheet-Anno',False) vs.SetClUseGraphic('Sheet-Anno',True) vs.NameClass(ACName) # Return active class hVP = [] vs.ForEachObjectInLayer(GetHandle, 0, 2, 1) # Traverse into the annotations group of selected VPs and set classes for VP in hVP: vs.SetVPClassVisibility(VP,'Sheet-Anno',0) vs.SetVPClassVisibility(VP,'Sheet-Label',0) vs.SetVPClassVisibility(VP,'Sheet-Main',0) vs.SetVPClassVisibility(VP,'Notes-Redlines',0) vs.SetVPClassVisibility(VP,'A-ANNO-REDL',0) anno = vs.GetVPGroup(VP, 2) h = vs.FInGroup(anno) objs = [h] h = vs.NextObj(h) while h != vs.Handle(0): if vs.GetObjectVariableString(h, 1166) == 'Drawing Label': vs.SetClass(h, 'Sheet-Label') vs.SetLWByClass(h) vs.SetFPatByClass(h) vs.SetLSByClass(h) vs.SetFillColorByClass(h) vs.SetOpacityByClass(h) vs.SetPenColorByClass(h) else: if vs.GetObjectVariableString(h, 1166) != 'Redline Object': vs.SetClass(h, 'Sheet-Anno') if vs.GetTypeN(h) == 11: gobj = vs.FInGroup(h) while gobj != []: vs.SetClass(gobj, 'Sheet-Anno') gobj = vs.NextObj(gobj) h = vs.NextObj(h)
  14. The script creates several classes at once and would not know which class to assign the selected object to. I will think about it and if any ideas come to mind I will script them down. On another note the script above would change the settings of previously created classes created by this script when running it a second time. I have modified the script to only create a new class if it does not exist and to give you a list of all the newly created classes when it is finished. """ 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 Revised 2020-07-31 """ ClassPrefix ='I-FNSH-' #Newly created classes prefix runtimes = 0 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) ClassCount = vs.ClassNum() # determine number of classes in drawing vs.NameClass(TextureClassName) if ClassCount + 1 == vs.ClassNum(): runtimes = runtimes + 1 if runtimes == 1: allclasses = TextureClassName else: allclasses = vs.Concat(allclasses, ', ', 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 if runtimes != 0: vs.AlrtDialog('New Classes Created: ', allclasses) else: vs.AlrtDialog('No new Classes created')
  15. I figured it out, if you run the python script as an external script that is imported via another script the "import vs" is needed, but when run directly from within vectorworks it is not.
  16. This will display each for two seconds although the watch cursor does not appear to work on windows. CrossInteger = 1307 Crossconfig = 'LgCrossC' vs.AlrtDialog('Hit ok to see ', CrossInteger , ' = ' , Crossconfig, ' for 2 seconds') vs.SetCursor(CrossInteger) vs.Wait(2) CrossInteger = 1308 Crossconfig = 'HandC' vs.AlrtDialog('Hit ok to see ', CrossInteger , ' = ' , Crossconfig, ' for 2 seconds') vs.SetCursor(CrossInteger) vs.Wait(2) CrossInteger = 1309 Crossconfig = 'ArrowC' vs.AlrtDialog('Hit ok to see ', CrossInteger , ' = ' , Crossconfig, ' for 2 seconds') vs.SetCursor(CrossInteger) vs.Wait(2) CrossInteger = 1310 Crossconfig = 'SmCross' vs.AlrtDialog('Hit ok to see ', CrossInteger , ' = ' , Crossconfig, ' for 2 seconds') vs.SetCursor(CrossInteger) vs.Wait(2) CrossInteger = 1311 Crossconfig = 'WatchC' vs.AlrtDialog('Hit ok to see ', CrossInteger , ' = ' , Crossconfig, ' for 2 seconds') vs.SetCursor(CrossInteger) vs.Wait(2) CrossInteger = 1312 Crossconfig = 'TextBarC' vs.AlrtDialog('Hit ok to see ', CrossInteger , ' = ' , Crossconfig, ' for 2 seconds') vs.SetCursor(CrossInteger) vs.Wait(2)
  17. Yes that works. Thanks for the tip. I downloaded the SDK. Seems like this info should be written down in a better format thank looking through an XML file.
  18. The python script it does not seem to accept the variable "LgCrossC" or "ArrowC" in python I tried with numbers and I did not see any change in the cursor appearance. import vs integer = 6 down =False while integer != 0: click = False #define click variable pt = 0 # define pt variable while not click: #waits for click click, pt = vs.MouseDown() #assigns coordinates to pt vs.SetCursor(integer) vs.Wait(2) vs.AlrtDialog(integer) integer = integer - 1 Also what does the "import vs" command do? I can't find any documentation. It doesn't seem necessary for the script to work.
  19. Does vs.SetCursor work in python scripts. I can't seem to make it work.
  20. Does this run the external scripts? What would be the format If i wanted to place a python script next the the .vsm and run that script from within the vectorworks python script?
  21. Ok so it appears if you run a second script from within a first script using the "vs.DoMenuTextByName('Name', 0)" command the variables from the first script are not passed to the second script called but the variables in the second script are passed to the first script. So what I did was create two scripts. The first script renumbers the viewports that were pick selected by the second script. To make this work you have to add the second script to the workspace. This works with no errors. First script named "VP Label (Consecutive)" """ Script Name: VP Label (Consecutive) This script will renumber drawing labels contained within VP annotations in order picked by mouse. This script is dependent on pytyon script 'VPRenumb_A' 'VPRenumb_A' script needs to be added to the active workspace for 'VP Label (Consecutive)' to work properly 'VPRenumb_A' passes variables 'hVP' and 'numberStr' to 'VP Label (Consecutive)' Revised for VW 2021 David Hamer, 2020 revision 09-19-2020 """ hVP = [] numberStr = '' vs.SetPref(544, 0) #turns of Auto Drawing coordination vs.DoMenuTextByName('VPRenumb_A', 0) #vs.Rpstr_RemoveValues() #import VPRenumb_A #from VPRenumb_A import hVP, numberStr for DL in hVP: #defines handle DL as object of group hVP in order. #vs.SetRField(DL,'Drawing Label','Drawing',numberStr) #VW 2020 Version sets the drawing label to the current active number in sequence vs.SetRField(DL,'Drawing Label2','Drawing',numberStr) #VW 2021 Version sets the drawing label to the current active number in sequence vpNumber = vs.Str2Num(numberStr) # convert number string to number. numberStr = vs.Num2Str(0, vpNumber + 1) #subtract number from sequence then convert number to string. vs.SetPref(544, 1) #turns on Auto Drawing coordination vs.ClrMessage() #clears the message Second script named "VPRenumb_A" """ Script Name: VPRenumb_A This is a dependent pytyon script for 'VP Label (Consecutive)' This script needs to be added to the active workspace for 'VP Label (Consecutive)' to work properly This script should not be run on its own. variables 'hVP' and 'numberStr' are required by 'VP Label (Consecutive)' David Hamer, 2020 revision 07-20-2020 """ import vs hVP = [] #defines list hVP numberStr = vs.StrDialog('Enter and INTEGER to start numbering:','1') #ask user for starting number vs.Message('Click in empty space to end Label Numbering') #displays message vs.SetCursor(1307) h = 1 #defines h as 1 so while loop will start while h != 0: #loops until h has no handle click = False #define click variable pt = 0 # define pt variable while not click: #waits for click click, pt = vs.MouseDown() #assigns coordinates to pt h = vs.PickObject(pt) #selects the viewport at the click point if vs.GetTypeN(h) == 122: #if h is a viewport anno = vs.GetVPGroup(h, 2) #creates group from annotations of selected viewport h1 = vs.FInGroup(anno) #selects the first object in the anno group while h1 != vs.Handle(0): # steps through every object in the viewport selected by the click if vs.GetObjectVariableString(h1, 1166) == 'Drawing Label': #if veiwport object is a drawing label hVP.append(h1) #if step 1 - add to hVP list h1 = vs.NextObj(h1) #get next object in viewport\
  22. I was really exited when I read this. I edited the script so it would number the drawing labels in reverse order but no luck same bug. I also tried a script version where it would run the "for DL in hVP" twice and set a dummy number the first run through and then set the specified number on the second run through but yet again same bug. It seems that it is setting them in its own order when it exits the script and if it the number is being used by another viewport when it sets the current viewport then it bugs out. #script to renumber drawing labels contained within VP annotations in order picked by mouse. vs.SetPref(544, 0) #turns of Auto Drawing coordination hVP = [] #defines list hVP numberStr = vs.StrDialog('Enter and INTEGER to start numbering:','1') #ask user for starting number vs.Message('Click in empty space to end Label Numbering') #displays message vpNumber = vs.Str2Num(numberStr) #convert number string to text. vpNumber = (vpNumber-1) #Subtract one number from the starting number as it will be added back in while command h = 1 #defines h as 1 so while command will start while h != 0: #waits for h to have no handle click = False #define click variable pt = 0 # define pt variable while not click: #waits for click click, pt = vs.MouseDown() #assigns coordinates to pt h = vs.PickObject(pt) #selects the viewport at the click point anno = vs.GetVPGroup(h, 2) #creates group from annotations of selected viewport h1 = vs.FInGroup(anno) #selects the first object in the anno group h1 = vs.NextObj(h1) #selects the next object in the anno group while h1 != vs.Handle(0): # steps through every object in the viewport selected by the click if vs.GetObjectVariableString(h1, 1166) == 'Drawing Label': #if veiwport object is a drawing label hVP.append(h1) #if step 1 - add to hVP list vpNumber = (vpNumber+1) #if step 2 - Add a number to the numbering sequence. h1 = vs.NextObj(h1) #get next object in viewport numberStr = vs.Num2Str(0, vpNumber) #converts the number sequence back to a string for DL in reversed(hVP): #defines handle DL as object of group hVP in reverse order. vs.SetRField(DL,'Drawing Label','Drawing',numberStr) #sets the drawing label to the current active number in sequence vpNumber = vs.Str2Num(numberStr) # convert number string to number. numberStr = vs.Num2Str(0, vpNumber - 1) #subtract number from sequence then convert number to string. vs.SetPref(544, 1) #turns on Auto Drawing coordination vs.ClrMessage() #clears the message
×
×
  • Create New...