Jump to content

Samuel Derenboim

Member
  • Posts

    375
  • Joined

  • Last visited

Everything posted by Samuel Derenboim

  1. As described. Working with roof drains is becoming a nightmare with the new edition of vectorworks. This is by far the buggiest, most unstable version vectorworks that has been released to date. 🤬
  2. Latest update broke roof line slopes when having graphics acceleration turned OFF. Techs have advised for previous updates, worksheets referenced via viewports disappeared with graphics acceleration turned ON. Either way , problem persists, and it is quite frustrating. Can anyone confirm they have similar problems?
  3. As shown above - revision cloud tool doesnt work from the native toolbar nor from the convert to object menu.
  4. I added another door size to Marvin patio door catalog and tried to modify Frame finish record. This consistently crashes vectorworks. This has been repeated multiple times, latest version of VW service pack 2. Are entries un-modifiable for catalog items?
  5. Hi everyone, I don't seem to be able to find a node that can create symbols. I did manage to find one that was written by domc, but it only creates a symbol in 3d space. Code is below. Is there any way i can modify the configuration so that the objects being inserted go to 2d space, not 3d? I am trying to create a marionette program that creates symbols from groups - that have certain records. There has been other ones that have been done with creating symbol by object name (including groups) but it only works on single objects, groups do not show up in the 2d annotation space, thus disappearing #DomC v001 @Marionette.NodeDefinition class Params(metaclass = Marionette.OrderedClass): By = 'DomC';import datetime; now = datetime.datetime.now(); y80f5 = now.year;m80f5 = now.month; d80f5 = now.day; h180f5 = now.hour; mi180f5 = now.minute; s180f5 = now.second; ms180f5 = now.microsecond; h280f5 = h180f5-12 if h180f5 >=13 else h180f5; VersionChange1 = str(y80f5)+' '+str(m80f5)+' '+str(d80f5); VersionChange2 = str(y80f5)+'-'+str(m80f5)+'-'+str(d80f5)+'-'+str(h280f5)+'-'+str(mi180f5); TextStatic = Marionette.OIPControl( By +' v'+VersionChange2, Marionette.WidgetType.TextStatic, "") this = Marionette.Node( "Create Symbol" ) this.SetDescription( 'Creates a new Symbol' ) h_obj = Marionette.PortIn(vs.Handle(0)) h_obj.SetDescription( "symbol content (one object) if empty, an empty 3D (3D Locus) symbol will be created" ) s_name = Marionette.PortIn('Symbol-1') s_name.SetDescription( "the symbol name" ) s_sym = Marionette.PortOut() s_sym.SetDescription( "the result symbol name" ) h_sym = Marionette.PortOut() h_sym.SetDescription( "handle to the newly created symbol" ) def RunNode(self): obj = self.Params.h_obj.value name = self.Params.s_name.value vs.BeginSym(name) vs.Locus3D(0,0,0) h = vs.LNewObj() vs.EndSym() vs.Marionette_DisposeObj(h) h_sym = vs.GetObject(name) vs.SetParent(obj, h_sym) vs.ResetObject(obj) vs.ResetObject(h_sym) self.Params.s_sym.value = name self.Params.h_sym.value = h_sym I think the problem lies with the create symbol node. See screenshots below. Seem like i just need a create symbol node with more properties, or just a 2d symbol node. 1. Design layer space 3d view space
  6. arquitextonica, there unfortunately (at least to my knowledge) isn't any whitepaper that would probably help you. Having said that, I've dealt with several very large buildings and was able to make it work. Here are a few recommendations i have done. I can also tell you what i plan to do better in the future 1. Referencing files into one master file is very important. One problem you will come across are stories - and your workflow needs to be be similar in every file. 2. Tagging wall objects/ floor objects/ window objects need to be done in the original reference file - not the master file. This is very important. 3. When working with worksheets, notes, etc... consider each portion of the set of buildings - as a separate building. Worksheets will not be able to be combined, nor will takeoffs. I still need to verify for myself whether or not worksheets can make take-offs for multiple reference files - not just the file it is in. Try this for yourself 4. Experimentation is key. If you have an idea, test it out on a test file to see if it works. You can start with the idea above. Create two different files with two different wall types, roof types etc... Then reference the two in a third "master" file and create a worksheet. Do both wall types show up in the schedule? 5. The master file should be able to have sheet layers. Be careful not to overdo it with the amount of sheet layers in the master file. If you can, split it into various sections. I for one split it into a. plans / rcps (000, 100 series), sections / elevations (200, 300 series), detail sections (400 series) and details overall (500 series) --- each with their own set of worksheets. Think about how you will create the set for each building on the block before you integrate it. This is very important if multiple people will work on the project as a whole. 6. Try to have a file that has all the wall types to be used between all the files separately - that way multiple users can access it. This will be useful when making takeoffs, needing to change wall types, floor types in different files with appropriate descriptions, UL #'s, R / U values, etc... 7. Create a master pdf set of documents in a separate directory for each sheet separately. This is important because rendering elevations and sections take a while. Doing each separately and combining them all (already pdf's) when needed will create a much quicker workflow. 8. If you have additional filing's to do like builder's pavement plans, site plans, do those in separate files as well - as a whole. They are much simpler, but with more complex mechanics when figuring out cut / fill, sidewalk elevations and slope percentages, curb cut depths, and grade / flood plane elevations. there some features that might not work in referenced files like : 1. if a file is reference with a column grid - I do not know if the column grid will show up in the section if the master file is referenced. 2. schedules / takeoffs in referenced files - still unknown. 3. do not tag wall types in reference files. It doesn't work. Its a major flaw in VW I'll add some more if i remember anything else. Hope this helps. As for your question above, classes and design layers are easily manageable in reference files. Just be consistent in the way you assign classes to wall styles, floor styles, window styles etc...If it is consistent, using the eye tool, you can eliminate or turn on elements in a drawing if you have to.
  7. That was why i used the analogy of the material type. Since it is already a "plugin" object - it should remember the custom class configurations as you saved it without having to add an additional record to the window or door. COBie is just one additional custom element. There are quite a few more - include UL designs, noise isolation class, impact rating, and / or other ANSI design categories fenestration need to comply with. Masterspec can be another for classification, perhaps closers or custom hardware for doors / windows. The list keeps going 🙂
  8. What would I think could be even more beneficial is if we can assign custom field information similar to the way material information can be called out. Those fields can be used a multitude number of ways not just limiting to cost code index. Below is an example screenshot for custom fields in a material. Would be great to have similar conditions for walls, windows, doors and floors. What do you think?
  9. Tags in vectorworks are a wonder. In 2021 release (i think ) VW gave us the ability to scale text in a tag - which is wonderful. Another feature that would be great to have is to add constraints to text if the text callout is word wrapped. This is needed because of the way tags are scaled. If the tag is scaled 2x or 3x, the constraints for wordwrap are also limited to the scale. Wordwrap would preferable by unconstrained , or at least an option inside of the tag text options (i.e. constrain some text, others unconstrained...similar to the location contraints in the tag edit configuration)
  10. I understand what you mean now. I've tried using the beam tool, but that's not easily modifiable in terms of depth. The slab tool has to be modified independently from levels in order to adjust its thickness as well. The only other thing i haven't tried would be to use geometry and tie its thickness / width / height to a tag. Not exactly the same thing, but maybe a close second? 🙂 Also, its important to note - the would only be one component in a slab tool that would be able to change in thickness, otherwise the tool would break...It wouldn't know how to distribute the thicknesses for multiple components.
  11. My understanding is that there are some components in a slab that would be relative to levels, others to be proprietary like the wall type below. Some are relative to levels, others to the slab. With a wall however, the thicknesses of components never change. Only their depth does - which isn't really called out on schedules. But what about slabs? When called out on a schedule and a component has different thicknesses, you would have the same slab type appear multiple times on a worksheet if it is to be summarized - however you cannot change any other parametric information like description, additives, etc... to it. This feature would mostly be limited to footings and step foundations, which would definitely be a time saver for sure - but there are are other tools that can do just the same without having to use the slab tool for structural elements. (of course this is an assumption on my part, is this what you would use it for?)
  12. Wouldn't that cause a problem with getting the parametric information to be consolidated for thicknesses in worksheets? otherwise a pretty nice idea
  13. Currently, when doing wall details for wall type components there are portions of a wall that need some extra graphic representation in order to differentiate all other wood stud wall types (i.e. ones with batt insulation, continuous insulation, etc..) or even a sound attenuation blanket. Sometimes the user needs to add extra information to the 'centerline' of a component. Currently, only each edge of a component can have a line type - right pen and left pen. This post is asking for a 'centerline' pen. The reason therebeing is because all other methods have severe limitations to workflow. Let me explain. Other options that are available are - Use specific hatches and / or use a tile. Granted, Tiling is a very useful function when working only with vectorworks. however, when sharing sections plans or elevations with consultants - tiles are converted to bitmaps which makes them useless in other programs. Therefore its use is unfortunately ruled out if working with consultants. There is also the use of different hatches representing different components. However, hatches are very difficult to create from scratch, and sometimes even imported hatch tiles that are complex (like batt insulation) or cumbersome. That is why the solution above comes to mind. Using a linetype is exportable, stable, and very easy to create with using a single backdrop for a core component material. Therefore, I thought of using a linetype as shown below: This however caused a problem when doing sections. If the component is 'flipped' - the right side can appear to be on the left side, and therefore it flips the linetype as shown below. The same thing can be done for slab components and roof components because the problem essentially is the same. Using linetypes in the centerline of a 'slab' component would be that much easier to represent. centerline of components even when flipped would generate a seamless linetype regardless of the side it is cut. Hence the request. Let me know what you think !
  14. It appears this function doesn't existing in VW2022? Do you think Marionette could help in this regard?
  15. Currently the select connected command can select connected objects that are not closed. What about specific 3d geometry that cannot be custom selected by texture or by hand. Can adjacent connecting objects be selected ? Here is an example image. Let's say I just wanted to select the connected geometry of the object circled in yellow. Is this possible? All geometric objects are not grouped.
  16. I am trying to summarize in a compact wall schedule the components of a wall and its respective components by the sum method. However, regardless of what I do, I cannot summarize the information. If i have close to 1000 walls of a limited number of styles, why can't the worksheet summarize the areas for those components by wall type rather than list every single component? Or Is there a way to summarize component information? Thanks in advance!
  17. Update 4 All parameters functioning properly except 1 element - How does one reset count when a condition ends? I.E. If S3 changes then N1 = 1 Procedure NumberThem; CONST Rec='!CDA-EnergyTabular'; Fld='ID_Count'; typ='Obj.Type'; dir='Orientation'; VAR H1, layhand: Handle; N1,N2: Integer; S1,S2,S3,S4,layName: String; Procedure Execute(Hd1:Handle); BEGIN layhand:= GetLayer(hd1); layName := GetLName(layHand); S2:= GetRField(Hd1,Rec,typ); S4:= GetRField(Hd1,Rec,dir); If layName='Cellar Areas' then S3:='0'; If layName='1st Fl. Areas' then S3:='1'; If layName='2nd Fl. Areas' then S3:='2'; If layName='3rd Fl. Areas' then S3:='3'; If layName='4th Fl. Areas' then S3:='4'; If layName='5th Fl. Areas' then S3:='5'; If layName='Roof Areas' then S3:='+'; If S2='Door' then S2:='D'; If S2='Window' then S2:='W'; If S2=' Wall' then S2:='P'; If S2='Cwall' then S2:='CW'; If S2='Slab' then S2:='SL'; If S2='Roof' then S2:='RF'; If S4= 'East' then S4:='E'; If S4= 'West' then S4:='W'; If S4= 'North' then S4:='N'; If S4= 'South' then S4:='S'; If S4= 'Horizontal' then S4:='H'; S1:=Concat(S4,S2,S3,N1); SetRField(Hd1, Rec, Fld, S1); N1:=N1+1; End; BEGIN N1:=1; ForEachObject(Execute, ((R IN [Rec]))); End; Run(NumberThem);
  18. Update 3 : Got Layers working. How do I add leading zeros? Procedure NumberThem; CONST Rec='Test'; Fld='ID'; typ='Type'; VAR H1, layhand: Handle; N1: Integer; S1,S2,S3,layName: String; Procedure Execute(Hd1:Handle); BEGIN layhand:= GetLayer(hd1); layName := GetLName(layHand); S2:= GetRField(Hd1,Rec,typ); If layName='cellar' then S3:='0'; If layName='1st floor' then S3:='1'; If S2='Door' then S2:='D'; If S2='Window' then S2:='W'; If S2='Wall' then S2:='P'; If S2='Curtainwall' then S2:='CW'; S1:=Concat(S2,S3,N1); SetRField(Hd1, Rec, Fld, S1); N1:=N1+1; End; BEGIN N1:=1; ForEachObject(Execute, ((R IN [Rec]))); End; Run(NumberThem);
  19. update 2: For some reason GetLName(HD1) not working - but the script compiles. My understanding is - it's supposed to get the layer name and then convert it to a string to See if it equates to S3 right? or does it need a separate handle? Procedure NumberThem; CONST Rec='Test'; Fld='ID'; typ='Type'; VAR H1: Handle; N1: Integer; S1,S2,S3: String; Procedure Execute(Hd1:Handle); BEGIN S2:= GetRField(Hd1,Rec,typ); If S2='Door' then S2:='D'; If S2='Window' then S2:='W'; If S2='Wall' then S2:='P'; If S2='Curtainwall' then S2:='CW'; If GetLName(Hd1)='cellar' then S3:='0'; If GetLName(Hd1)='1st floor' then S3:='1'; S1:=Concat(S3,S2,N1); SetRField(Hd1, Rec, Fld, S1); N1:=N1+1; End; BEGIN N1:=1; ForEachObject(Execute, ((R IN [Rec]))); End; Run(NumberThem);
  20. @Pat Stanford Awesome! Thank you for the hint. For some reason I thought the field needed to be an integer so I assigned it as such, and it kept getting an error, until i switched it to text - at which point it worked out beautifully. Regarding the Pseudocode 🙂 The property that describes the object as 'window' 'door' 'curtainwall' 'wall' is located in another field called 'type' My question: How does GetName(GetParametricRecord(hd1) know to look into the record called 'type' in order to do : If GetName(GetParametricRecord(Hd1))='Door' then S2:='D'; Do i specify an additional constant for type? ******PROGRESS BELOW*********** Procedure NumberThem; CONST Rec='Test'; Fld='ID'; typ='Type'; VAR H1: Handle; N1: Integer; S1,S2: String; Procedure Execute(Hd1:Handle); BEGIN S2:= GetRField(hd1,Rec,typ); If S2='Door' then S2:='D'; If S2='Window' then S2:='W'; If S2='Wall' then S2:='P'; If S2='Curtainwall' then S2:='CW'; S1:=Concat(S2,N1); SetRField(Hd1, Rec, Fld, S1); N1:=N1+1; End; BEGIN N1:=1; ForEachObject(Execute, ((R IN [Rec]))); End; Run(NumberThem);
  21. @Pat Stanford thank you again for your consideration ! Let me clarify some of the questions you asked about in both posts The intention was to rewrite the information in the ID's if the amount of objects increased or decreased, so it would be easier to over-write or 'clear' the original contents of the ID field. This is why I thought the first process needs to 'clear' the ID Fields that way it 're'finds the closest object to the origin, and rewrites to all objects in the document. Looking at the code, the conditional statement this would only be done if the fields were : IDcount:=1; B2:=False; While B2 = False do Begin TrackObjectN(0, CallBack, H1, X1,Y1); If H1 <> Nil then Begin SetName(ID_Handle,Num2Str(0,IDcount)); IDcount:=IDcount+1; Looked like it only did the operation if H1 was nil, so i figured by the same logic this script had to work in a similar way. If that was the case, the contents would be cleared, the conditional statement would 're' find all objects with records that have that handle set to nil and the apply the conditions of redoing the ID's for every object again. Sorry if It didn't make sense in my earlier post! Newbie here! The version that is displayed above is a combination of conditions that make each object unique. You're right in saying that these conditions vary based on 1. Direction (East, West, South, North) 2. Object Type (D=Door, W=Window, P=Partition / Wall, CW= Curtainwall 3. Every floor has a unique leading number. I.E. Cellar = 0, 1st Floor=1, 2nd Floor=2 4. Every Object ID Gets reset when it meets a different object, and object ID's have double digits for the purposes of quantity i.e. = the 1st door on the North Face on the 2nd floor could be indicated as DN101 For the purposes of the questions I wanted to start simple - with only counting the objects. Since datatags and worksheets can concatenate information, I figured I wouldn't make the script too complicated. In this case, we can just simply do the ID's = which are dual decimal numbers, that way there can be more objects than 10 on a face per floor. All i need to do is reset count as soon as a different object is engage. I.E. - Let's say I reach number 5 on walls, the count would be reset on a door which would be ND001 instead of ND006 (based on the original count). If it is too complex, we i can work with just a simple count for now. Here is a breakdown of the worksheet. Note that i wasn't consistent in my use of the object type in my worksheet cells...I used W to represent walls until I ran into Windows, after which I used P to represent walls/partitions and W to represent windows. The error here is already mine! Generally The objects are in 3d like so : But the Diagrams can be viewed in 2d and in 3d. It isn't really important how we get the Id's, so long as it starts counting from somewhere, and each ID is unique / sequential. It is for the plan examiner to cross reference the graphical drawing with the worksheet - for that particular object / condition. Leading 0 is just the level. In reality the ID is just a 2 digit number Oh wow, I didn't know ctrl activated the popup, Now that conditional statement is understandable! Just to get on the same page : If Command then N1:=IntDialog('Enter Number for this Object.', Num2Str(0,N1)); <= the command function activates the use of apple and CTRL for the keyboard, is this correct? Question 2: what is the purpose of using the TrackObjectN Function? TrackObjectN(0, CallBack, H1, X1,Y1,Z1); ***update*** - Is this function used to click on the object? (starting to get the feeling that's the click here operation) Question 3: Why did you use a boolean condition here? B1, B2: Boolean;....and why are there two booleans? only one is being called out later on. maybe I don't see it, but is B1 Boolean inherently used somewhere to represent N1 in your script? Sorry for the long winded explanation! Grateful for your insight into the matter!!!!
  22. @Pat Stanford Please don't laugh, I made a rough outline of the procedure for the franken-script. Can you please tell me if i'm off, how far i am off, and should i even bother? 😂 Procedure SetObjectID; Var IDhand: Handle; X1,Y1, X2,Y2: Real; IDcount: Integer; B1,B2: Boolean; Procedure GetIDcount(idhand:handle) Begin {ID Count Procedure} 1 delete all object id's with (this record,this field) {this resets all id's for the Record/ID so that procedure below can begin} 2 pick object closest to origin, set (this field, this record) closest to 0 @ X, Y, or Z in model space or object closest to origin x,y on screen 3 Set (Record, ID) to 1 from picked object 4 {if any objects that have id = 1 while all others do not have any information inside } then setrfield for all objects from handle IDcount with IDcount being equal to IDcount+1 (or other count formula) The conditions were extrapolated from another script that you wrote shown in the above comment 🙂 Begin IDcount:=1; B2:=False; While B2 = False do Begin TrackObjectN(0, CallBack, H1, X1,Y1); If H1 <> Nil then Begin SetName(ID_Handle,Num2Str(0,IDcount)); IDcount:=IDcount+1; End Else B2:=True; End; Begin {conditions for all objects to be revised} ForEachObject(GetIDCount, ((R IN ['Record'])) ) END; Run(SetObjectID)
  23. Hi Pat, thank you for your response! When objects are added, what would one do to auto re calculate the incrementing value? Would it be done in the sheetlayer viewport? or would it be done in the worksheet? specifically if one was to do it by 'criteria' I also noticed a script your wrote in a different thread (sorry in advance 🙂 ) Question is : 1. What parameter should i choose to change a field in a record rather than the name of the object (i see only SetName) 2. What is Hd1? is this a rectangle reference? 3. Does the application quit if and only if the object doesn't have a number? 4. For some reason when running this script I still don't get a popup or dialog asking to enter the name of the object Procedure PickAndName; Var H1: Handle; X1,Y1,Z1, X2,Y2: Real; N1: Integer; B1, B2: Boolean; Function CallBack(Hd1:Handle):Boolean; Begin If GetType(Hd1)=3 then CallBack:=True; End; Begin N1:=1; B2:=False; While B2 = False do Begin TrackObjectN(0, CallBack, H1, X1,Y1,Z1); If H1 <> Nil then Begin If Command then N1:=IntDialog('Enter Number for this Object.', Num2Str(0,N1)); SetName(H1,Num2Str(0,N1)); N1:=N1+1; End Else B2:=True; End; End; Run(PickAndName);
  24. I don't know if the title was understandable enough, however, here i will try to describe what I am looking to do In the case below I have polygons / rectangles that have a record, story, and object type. Essentially they need a unique id / number in order for a plan examiner to cross reference that id with the table below. 1. Create a worksheet script that changes ID count (as shown below) based on a few parameters and changes a field called ID in a record. (if that is possible). I know it would either be a record callout or a script callout, so i'm not really sure how to do this. 2. Technically the record count can be done without a worksheet now that i am thinking about it because of the unique parameters of each object, story, and count would be able to cover all objects. Note : the reason the ID is a separate field is because it used for the purposes of a datatag showing graphically what object that is (2nd image below) 3. The reason for this request is because using the data-tag count system does not work - it counts all tags not only in the sheet layers but also in the view ports. (unless there is a work around I am not aware of?)
  25. As the post suggests - this bug has a huge implication on construction documents that use worksheets in design layer viewports. Worksheets resize automatically when referenced in a design layer viewport, cropping them makes them disappear. Beware of transitioning to VW2022!!! This is by far the worst update in the last 4 years that i've experienced unfortunately, and its implications have been disastrously far reaching. A bug has already been submitted, but i am disappointed that it wasn't addressed in the latest service pack. I will try recreating a new file to see if there is something wrong with the file itself because it was originally upgraded from 2021. But this is pretty bad! Update 1 - Upon placing in sheet layer viewport - worksheet keeps disapearing. Is this a worksheet issue? or a rendering issue?
×
×
  • Create New...