Jump to content


  • Posts

  • Joined

  • Last visited

Everything posted by DomC

  1. Can't reproduce that with the information you delivered. 1. Maybe your stamp just loss connection to the rooms, Room ID changed etc. Does your spaces have the value Room ID as Example "W.1.1" like in my example? Changing scale, rotating or moving maybe just update your stamp and it shows the truth (stamp has no link to rooms) 3. Does my example work? If yes, what you made different? 4. Maybe you created a hybrid symbol and symbol text is 3D or something like this? 5. Maybe there is an issue with your document units show or hide or did you created a custom area unit? The record field is a number if you feed this number with a string (5 qm instead of 5.0) it will maybe fail. Try to make a Text field in the record format could fix if this was the issue. 6. Line Spacing The tool works like a symbol with text, linked to record. So you can test that with a simple symbol. Your appartment area stamp will look like your symbol. If it looks wrong, your symbol also looks wrong. Maybe unfix textfield width in your symbols. 7. Upload your Example ... it's hard to help without that.
  2. Version 1.0.0


    A Rectangle Line Pattern with a random option. Also the files show, hot how to project on a NURBS Surface. This 3D Projection contains two additional custom nodes. 1. GetZatXY (Also used in many other examples on the community board) 2. GetZamong Pt. Not so easy to understand. This nodes calculates the z value of a 2D Point between two 3D Points without trigonometry (faster). Movie Link (2nd Part of Movie) https://youtu.be/GcFwW-k5Lms?list=PL8s_WkTvFQ2YdFlMfU7Teuh5QrmsO03gW
  3. Version 1.0.1


    This example is based on a custom node. which returns a line pattern. This pattern is based on several while and random loops. I have not found a proper way to run a while loop over a marionette network so this is better to create in a custom node. It is easier to play with the example, than explaining exactly how it works. Have fun with it. This is my base study to find a workflow to project any pattern on a NURBS Surface which would be a real scope of usage. Movie Link (first Part of Movie) https://youtu.be/GcFwW-k5Lms?list=PL8s_WkTvFQ2YdFlMfU7Teuh5QrmsO03gW Growing Lines 1.0.0.mp4
  4. Version 1.0.0


    A nice, small Marionette for creating bar diagrams. This is much more simpler and more flexible than a spread sheet bar diagram. Options: 1. ColNames 2. Col Values -> mandatory 3. RefValue -> A bar with this value, has the height of the BArHeigtRefValue field 4. BarWidth 5. BarHeigtRefValue 6. Invert -> A bigvalues results in small bar There is a 2 minute movie (without audio) Bar Diagram.mp4
  5. Beside that. We took a look at other CAD applications in the same market segment. They do not really take more advantage from multi-core CPUs than Vectorworks. They all need seperate threads for more or less the same actions. Also the gaming industry are trying to use advantage of more cores. People thinking it would be easy to just split every action on 32 cores and make it 32times faster. I think this is something where VW Inc. team makes a great job, thanks.
  6. Hi We tested NVIDIA and AMD in comparison in a small frame on Windows. So far there were some little surprises by the result: 1. Zoom/pan differences are as expectably the same as the etablished open GL benchmarks. So NVIDIA 1080ti is fastest by zooming paning big models than 580 and would be a little faster than vega I guess. So far no surprice. AMD consumer cards have better price value than NVIDIA. NVIDIA wins the High End scope by he consumer cards with 1080ti 2. Quadro Based Graphic Cards have similar hardware and so I expected nearly same performance. But as far as I could test, the Quadro drivers performs better with Wireframe and Planar Objects. This is hard to measure but M2000 wins agains a GTX 1060 which have a much higher Hardware performance. As I told this is hard to measure ... 3. If I have a specific drawing with much of png pictures on it and I switch to this layer the first time in the session I can wait with an invidia card about 20 seconds till all ojects are visible on the screen. With an amd it takes about 5 seconds. Seems that processing the drawing to the graphic driver could be faster in some specific cases with AMD cards. A normal 2D 3D Plan have no measurable difference between amd nvidia or between High End Graphic or cheap graphic for navigation between layers/layout/classes/saved views. It seems mainly be related to the cpu single thread performance.
  7. http://blog.vectorworks.net/moveart-wins-european-product-design-award Well done Norbert, this is also a great application of a Marionette based workflow.
  8. Got it Your Autohybrid content has it's own origin you have to compensate this. My first script works but the autohybrid is already wrecked. by use parent node wrong. So be careful what object you put in what other object. Worst case you put them somewhere you can't delete them anymore. Autohybrid2.vwx
  9. Hi You have to browse the container-nesting of the object to find out, how they are nested. Sometings the Content node works, sometings you need commands like vs.GetCustomObjectProfileGroup(objectHand) etc. As you can see, the autohybrid from an extrude is pretty good nested. Try first to replace the object (delete and set new object to it's parent). Maybe you have to reset object after that manipulation. Or maybe you will crash if you delete the content and do not attach a new contend (maybe start with add an additional object to the exitsting). Not tested any of this, but that's the way I would try to crack the riddle. Autohybrid.vwx
  10. Version 1.2.9


    About this File This tool is available in english ("Apartment Tag") and german ("Wohnungsstempel"). The contents are nearly the same just translated. This Marionette Tool summarize all Space-Areas, which are part of the same Appartement Number and shows the result in a symbol based Marionette stamp. Alternatively we can pull out sum of apartment area with a worksheet. But this Marionette is also a nice method to do this. Instructions: 1. The Marionette Objects access to the field "11_Room ID" of the space object. Every other field can be used if necessary by editing script. 2. With the Marionette PIOs field "ApartmentID" you can tell the stamp, which apartment should be displayed 3. With the Checkbox "Layer from Apartment Tag". You can make the Tag collecting spaces of the tag's layer. Otherwise it will collect areas from the layer of the layer popup 4. You can exclude Spaces with specified keywords. Delimiter for Keywords is "$" 5. To use the Marionette PIO on the Target Document, copy/paste the PIO and then import the Symbol definitions from the Folder "ApartmentStamps" on the Target Document. Über diese Datei Dieses Werkzeug ist auf Deutsch ("Wohnungsstempel") und auf Englisch ("Apartment Tag") verfügbar. Die Inhalte sind bis auf die übersetzten Bezeichnungen nahezu gleich. Der Marionette Wohnungsstempel fasst Wohnungsflächen zusammen und zeigt diese in einem Symbolbasierten Marionette-Stempel an. Raumflächen können auch mittels Tabellen ausgezogen werden. Der Wohungsstempel ist eine komfortable alternative. Anleitung: 1. Räume welche zur gleichen Wohung gehören, werden mit dem Standardfeld "Raum ID" identifiziert. Auch andere Kriterien für die Wohungszugehörigkeit können festgelegt werden, dazu muss das Script geändert werden. 2. Im Feld "WohnungsID" wird eingestellt, welche Wohung angezeigt werden soll. 3. Mit der Checkbox "Ebene von Wohungsstempel" lassen sich explizit die Räume auf die Ebene des Wohungsstempels eingrenzen. Ist die Checkbox deaktiviert, gilt die Einstellung "Räume von Ebene:" 4. Räume mit bestimmten Namen, können hier ausgeschlossen werden. Trennung der Namen erfolgt mit "$" 5. Um den Wohnungsstempel auf einem anderen Projekt zu verwenden, zuerst das PlugIn mit copy/paste übertragen, dann die Symbolressourcen im Ordner "Wohnungsstempel" auf das Zieldokument importieren.
  11. 1. The Input Wrapper automatically will detect the new row and read it out. So create your additional row Maybe disconnect from space creation to get faster testing. Use pass node and "bug" method to see, what data flowing through the wires. Also goot hint is to place some valve nodes to divide the network and to not execute parts of it. 2. The "Unnest List" Node will return the additional row at e3 3. To Attach that values to the space, use the "Set Record Field". Record Name is 'Space' Field Name you can find out with a Worksheet from one of your space object. I think you want to have '11_Occupant' 4. Maybe try first to input ONE Space with the Name input and set the record field to see, if that works. Maybe you have to reset the space first. It's a popup field so this could maybe fail first try.
  12. Version 1.0.0


    If you need Worksheet-like Numbering like A, B, C .... AA, AB ..... AAA .... This node offers you an easy solution. There are two nodes for both directions. Limitations: 1. Input from special characters etc. will result in wrong values or errors.
  13. The Script resets a ComputerWorks Multi-Stamp SDK PIO. For just PDF export I never would create a script. The main part is updating all stamp symbols. The real script does the following: 1. Importing (updating PIO graphic) symbols 2. Create a time and date value (thanks to python) 3. Update PIOs (The pio is linked to a record format which is importing data from an external source by another script) I love vectorscript and marionette. But I am always sceptical if a script is really is necessary. This is a border case for sure. #28.03.2018 #Alte Planköpfe mit neuen ersetzen vs.DSelectAll() listID, numItems = vs.BuildResourceListN(16, 'S:\\Vorlagen\\VectorWorks\\18_Offerte\\Vorgabe_Offerte_2018.vwx') sym_names = [] def callback(): pass for i in range(numItems): res_name = vs.GetNameFromResourceList(listID, i) sym_names.append(res_name) if res_name == 'SSSPK Küche A4': vs.ImportResToCurFileN(listID, i, callback) if res_name == 'SSSPK Küche A4q': vs.ImportResToCurFileN(listID, i, callback) if res_name == 'SSSPK Küche A4h': vs.ImportResToCurFileN(listID, i, callback) if res_name == 'SSSPK Küche Installation A4': vs.ImportResToCurFileN(listID, i, callback) if res_name == 'SSSPK Küche Installation A3': vs.ImportResToCurFileN(listID, i, callback) #Datum und Zeit vor PDF aktualiesiern Ja/Nein import datetime now = datetime.datetime.now() jahr = now.year; monat = '%02i' % now.month; tag = '%02i' % now.day; stunde = '%02i' % now.hour; minute = '%02i' % now.minute Datum = str(tag)+'.'+str(monat)+'.'+str(jahr) Zeit = str(stunde)+':'+str(minute) #Datum = 'DatumTest' #Zeit = 'ZeitTest' objs = [] def AktualisiereDat(): plankopf="INSYMBOL & INOBJECT & INVIEWPORT & (R IN ['Daten_ERP'])" def PlankopfFelder(h): vs.SetRField (h, 'Daten_ERP','114_Datum', Datum) vs.SetRField (h, 'Daten_ERP','115_Zeit', Zeit) objs.append(h) vs.SetObjectVariableBoolean(h,1167,True) vs.ResetObject(h) vs.SetObjectVariableBoolean(h,1167,False) vs.ForEachObject(PlankopfFelder, plankopf) auswahl = vs.YNDialog('Zeit, Datum aktualisieren?') if auswahl: AktualisiereDat() vs.DoMenuTextByName('Export PDF',0)
  14. Hi Mullin thanks for comment Yes thats the pragmatically solution which is running at the Moment -two separate scrips. Just tested Miguel's hint, and it works. Really Great! criteria="L = 'Lay-1'" objs = [] def BuildObjList(h): vs.SetFillBack(h, (4567,4123,78694)) vs.SetObjectVariableBoolean(h,1167,True) objs.append(h) vs.ForEachObject(BuildObjList, criteria) for h in objs: vs.ResetObject(h) vs.SetObjectVariableBoolean(h,1167,False) vs.DoMenuTextByName('Export PDF',0) Or even shorter and simpler: criteria="L = 'Lay-1'" def DoIt(h): vs.SetFillBack(h, (4567,4123,78694)) vs.SetObjectVariableBoolean(h,1167,True) vs.ResetObject(h) vs.SetObjectVariableBoolean(h,1167,False) vs.DoMenuTextByName('Export PDF',0)
  15. @Miguel Barrera I am not sure if I understand and I am think you mean playing with ObjectVariableBoolean 1167 I will try soon if I have time. Thank you for the hint! 
  16. Hi I have issues to reset a PIO before I export PDF. I tried: 1. Using vs.AcquireExportPDFSettingsAndLocation(True) and vs.OpenPDFDocument(bfbfab68-bd4e-11e6-a4a6-cec0c932ce01) and vs.ExportPDFPages('bfbfab68-bd4e-11e6-a4a6-cec0c932ce01') 2. Force PIO Regeneration by insert an Object in the PIO and delete that object 3. Creating a Reset Command and call this with DoMenuText and the call PDF Export I think PDF Export by script is supressing any reset of pios. So the Idea was, to search a function by force reset the objects. I think an attempt could by Any Ideas? criteria="L = 'Lay-1'" objs = [] def BuildObjList(h): vs.SetFillBack(h, (4567,4123,78694)) vs.ResetObject(h) vs.ForEachObject(BuildObjList, criteria) vs.DoMenuTextByName('Export PDF',0) Dialog Script.vwx
  17. The method to do this seems to first create the wanted structure with new folders (nesting begin and end folder). Then move the existing content to the new folders and delete the old folders. After that rename the new folders to the original names. An example, how to create a nested folder structure with a depth of 2 (parent folder, subfolder). It is based on 2 input lists from the same length which build the folder path. Example Input: fnames1 = ['Folder1','Folder1','Folder2','Folder2','Folder1'] fnames2 = ['SubFolder1','SubFolder1','SubFolder3','SubFolder2','SubFolder1'] The build a list of pathes: Folder1/SubFolder1 Folder1/Subfolder1 Folder2/SubFolder3 Folder2/Subfolder2 Folder1/Subfolder1 The Pathes can be duplicated in the List. The Script will fail if a Subfolder with the same name hat two different parent folders. fnames1 = ['Folder1','Folder1','Folder2','Folder2','Folder1'] fnames2 = ['SubFolder1','SubFolder1','SubFolder3','SubFolder2','SubFolder1'] created_folders = [] for i in range(len(fnames1)): fname1 = fnames1[i] if fname1 not in created_folders: #Folder does not exist vs.NameObject(fname1) vs.BeginFolderN(16) for n in range(len(fnames2)): fname2 = fnames2[n] parent = fnames1[n] if parent == fname1: #the parent folder of the processed subfolder matches if fname2 not in created_folders: vs.NameObject(fname2) vs.BeginFolderN(16) vs.EndFolder() created_folders.append(fname2) vs.EndFolder() created_folders.append(fname1)
  18. Solved it for a specific situation this way. Not very elegant but it works. The Error will happen, if one of the folders exists but in this case it was not necessary. sname = 'Symbol-2' fname1 = 'Folder-1' fname2 = 'Folder-2' sh = vs.GetObject(sname) #Symbol Name fh1 = vs.GetObject(fname1) #Folder Name Parent fh2 = vs.GetObject(fname2) #Subfolder Name if fh1 != vs.Handle(0) or fh2 != vs.Handle(0): #Name1 or Name2 in use if fh1 != vs.Handle(0): t = vs.GetType(fh1) if t != 92: # Object exists but is not a Symbol Folder fname1 = fname1+str(uuid.uuid4())[:8] vs.Message(fname1+' '+str(t)+' Achtung Name des Ordners existiert schon') if fh2 != vs.Handle(0): #Object altready exists t = vs.GetType(fh2) if t != 92: # Object exists but is not a Symbol Folder fname2 = fname1+str(uuid.uuid4())[:8] vs.Message(fname2+' '+str(t)+' Achtung Name des Ordners existiert schon') else: #Object do not exists vs.NameObject(fname1) vs.BeginFolderN(16) vs.NameObject(fname2) vs.BeginFolderN(16) vs.EndFolder() vs.EndFolder() fh1 = vs.GetObject(fname1) #New to the Objects, which are now Sym Folder for sure fh2 = vs.GetObject(fname2) vs.InsertSymbolInFolder(fh2, sh)
  19. Hi Someone knows how to move a symbol folder inside another symbol folder? The folder would be an empty folder Seems, that vs.GetParent(folder-2), returns folder-1. But if folder-2 is not inside folder-1 vs.SetParent(folder-2, folder-1) does not move the folder. Also tried vs.InsertSymbolInFolder(folder-1, folder-2). Maybe to try with nested BefinFolder, but this could be tricky with existing folders and symbols.
  20. It is possible But you have to code the Custom Dialoge. Attached an example with two popup and a sort node. Somehow by accident it goes in your usecase direction Custom Dialog.vwx
  21. Hi This is a very old thread I know. But it was the best I found in Forum. Anyone have an Idea, how to create section viewport?
  22. Version 1.0.0


    Some Ressource Types (such as dimension standard or text styles) are handled by an index number. This node helps to find the index of those resources.
  23. Version 1.0.0


    This node creates optional a rectangle and returns the corner points of that rectangle. Often there is a need of a rectangle and the corner points. If the rectangle is rotated, it can be a cramp to calculate the corner points. I hope this node can help to simplify marionette workflows.
  24. Version 1.0.0


    This Node creates a new layer and keep the active layer the active one. It has a popup witch allows to choose sheet or design layer. It returns a handle to the new layer or a handle to an existing layer with the same name. Like ever .. with not warranty try first in an empty file and be careful creating thousands of layers or layers with the same name as other objects in the drawing.
  • Create New...