Jump to content
Forum Maintenance - Tuesday, September 18th 2019 - 5PM EST Read more... ×

Sam Jones

  • Content count

  • Joined

  • Last visited

Community Reputation

24 Great


About Sam Jones

  • Rank

Personal Information

  • Occupation
    Technical Director
  • Homepage
  • Location
    Los Angeles

Contact Info

  • Skype

Recent Profile Visitors

1,247 profile views
  1. Sam Jones

    Point load calculation

    For the true calculation on available data, Braceworks is needed. The calculation for point loads on a truss hanging on 2 points is relatively easy, straight linear algebra, and with creative input of data even loads like cable can be taken into account. I wrote a script tool for AutoPlot that did this, but you hardly ever find just a 2 point hang. Add more points and the calculations go nuts. Before Braceworks, I did a pole of riggers on the stagecraft list 90% of the responses were that they use Donovan's formulas for evenly spaced points supporting an evenly distributed load which never happens in the real world. They then throw a hefty design factor, at least 5 times the calculated load, usually more. This is probably still what is done by those without Braceworks who don't send there stuff to a structural engineer. The first caveat here is that Braceworks is very expensive, insanely expensive if you don't have VW Service Select. The second caveat is "garbage in, garbage out". The data on the drawing is often woefully incomplete and no tool can make up for that.
  2. Sam Jones

    Multi Symbol X Value is consistently off.

    Terry, It tells you where the multi relative to the start. Why do you want this? Real question, not a criticism. That value is not relative to any object or hanging position position; it only works, as you said for cables coming from screen right. What are you trying to tell the reader of the worksheet, or what are you using it for? Perhaps a command can be fashioned to do the job. Sam
  3. Sam Jones

    Has the Path changed, lengthened or shortened

    vsoStateGetExitGroup() Cool, I only need to know if the user has changed the path, not how it got changed. But, FUNCTION vsoStateGetExitGroup( hObj:HANDLE;VAR outGrpType:LONGINT) :BOOLEAN ; What is the "outGrpType", and True or False as a result of what? Thanks so much.
  4. In an event driven path object is there an event that flags that the path has changed, and whether it has lengthened or shortened? TIA Sam
  5. Sam Jones

    Chain Hoist New Function

    True, I did write the original, but VW has been continuing to both tweek it for consistency and making it work with Braceworks. This is not your 2014 Hoist Tools. Down the road, it is conceivable that, in the future, Hoists might have there function and manufacturer values dynamically loaded, based on the contents of the Chain Hoist Symbols file. I did not know how to do that in 2014. There is a cost to dynamic loading of OIP drop downs, so this feature should not be assumed to be a future feature. S
  6. Sam Jones

    Chain Hoist New Function

    A few things first. Hoists can change their look by 1. Type and Manufacturer 2. Type and Function. 3. Hoist Position When you pick a "1/2 Ton" Type and a "Video" function, the hoist looks for a symbol named 1/2 Ton Video Down It looks for a symbol whose name is "Hoist 1/2 Ton Video Down". If it does not find one it, both the Manufacturer and Function get set to "Unspecified". Unspecified manufacturer and unspecified function are considered empty strings, and the hoist PIO looks for a symbol whose name is "Hoist 1/2 Ton Down" So... If you want to add a function of "Matt G" you need to make 2 symbols for each type you care about. For the 1/2 Ton type, you need to add a symbol named "Hoist 1/2 Ton Matt G Up" and one named "Hoist 1/2 Ton Matt G Down". You need to do this for every type you foresee needing the "Matt G" function. Ok, Where to you add the symbols? I think you need to add them to the file "Chain Hoist Symbols.vwx" located in the application folder. On a Mac that would be: Hard Drive/Applications/Vectorworkds 2018/Libraries/Defaults/Hoist Tools/ Chain Hoist Symbols.vwx I have never tried to put a new symbol into a file in the User folder; might work, but probably not. Maybe Kevin can let us know. Wait you're not done. Having created the correct symbols in the correct file the function still will not show up in the "Function" drop down in the OIP. To add the new function name you need to open the plug-in manager: Click on the "Built-in Plug-ins tab. Select the "HoistVW" object Click on "Customize" Then, select the "Parameters" tab Select the "Function" parameter Click on the "Edit" button In the resulting dialog, click on the "Choices" button In the resulting dialog, add "Matt G" anywhere you want in the list. Before "Other" is might be best, but probably doesn't matter. Click "OK" and close all the dialogs. You should be good to go.
  7. Sam Jones

    Bad file name Question

    I think you need to specify a separater character. GetFolderPath() does not end in a ":" or a "\". You might try: IF Platform = 1 THEN sepChar := ':' ELSE sepChar := '/'; s1 := Concat(GetFolderPath(-1), sepChar, 'Test.txt'); I would share some code from my scripts, but they just collect file names; For example IF Platform = 1 THEN sepChar := ':' ELSE sepChar := '/'; cableCt := 0; index := 1; folderPath := CONCAT(GetFolderPath(-2), kMasterInventoryFolder, sepChar, kMultFileFolder); fileName := GetFilesInFolder(folderPath, index); WHILE (GetFilesInFolder(folderPath, index) <> '') DO BEGIN fileName := GetFilesInFolder(folderPath, index); suffix := COPY(fileName, LEN(fileName)-3, 4); IF COPY(fileName, LEN(fileName)-3, 4) = '.xml' THEN BEGIN cableCt := cableCt + 1; MultXMLList[cableCt] := fileName; END; index := index + 1; END; {WHILE (MultXMLList[index] <> '')}
  8. It seems that I am unable to get "NumCustomObjectChoices(pioName, pParamName)” to yield anything but “0” When it queries a dynamically loaded dropdown. The “AP Multicable” plug-in object has a “Break Out Type” field that is loaded from an XML. There are AP Multicables on the drawing and the Preferences OIP shows all the choices, but NumCustomObjectChoices('AP Multicable', PBreak_Out_Type) yields “0”. The function description says to use the PForm of the parameter as I do above, but I have also tried it with “ Break Out Type” with the same result. The function is used in a selection procedure and not in an object. What am I doing wrong, or am I just screwed? TIA,
  9. Sam Jones

    Hide fixture label legend by fixture type?

    Ah, I thought removing the attributes would leave a white space. This is very cool. Kind of a way for an object to have multiple class graphic attributes based on record values'
  10. Sam Jones

    Hide fixture label legend by fixture type?

    How were you able to hide anything? I thought all you could do was change fill and line attributes based on record values?
  11. Sam Jones

    Setting Z height at PIO creation

    Thanks for the thought, but I just tried it. Doesn't work
  12. Sam Jones

    Setting Z height at PIO creation

    So the question becomes when/how do I do this: set the height at 36(or some other default) upon insertion, and then let the user set the z height. BEGIN GetVersion(Major,Minor,Maintenance,Platform); GetUnits(Fraction,Display,Format,UPI,UnitName,SquareName); Result := GetCustomObjectInfo(PIOName,PIOHan,PIORec,WallHdl); vsoGetEventInfo(EventMessage, MsgData); OK := GetLocalizedPlugInName(PIOName,LocalPIOName); BarW := PBWidth * -1; BarL := PBLength; BarT := PBThick; NewBar := IsNewCustomObject('Load Bar'); CASE EventMessage OF kResetEventID: {3} BEGIN ParamChangeFlag := (vsoStateGetParamChng(PIOHan,ParamChangeWidget,ParamChangeIndex,OldParam)); IF (ParamChangeFlag=True) THEN BEGIN END; {IF (ParamChangeFlag=True) } ParamChangeTrig := FALSE; PIOChangeTrig := FALSE; Rect(0, 0, BarL, BarW); BeginXTrd(0,BarT); Rect(0, 0, BarL, BarW); EndXtrd; IF IsNewCustomObject('Load Bar') THEN Move3DObj(PIOHan, 0, 0, 36); vsoStateClear(PIOHan ); END; kObjOnAddState: {44} BEGIN GetStateChange; END; kObjOnInitXProperties: {5} BEGIN Result := SetObjPropVS (kObjXPropHasUIOverride,True); Result := SetObjPropVS(12, TRUE); {kObjXHasCustomWidgetVisibilities} SetPrefInt(590, 1 ); {kParametricEnableStateEventing} Result := SetObjPropVS (18,TRUE); {kObjXPropAcceptStates} Result := vsoInsertAllParams; Result := SetObjPropVS(kObjXPropDataNameDisabled, TRUE);{kObjXPropDataNameDisabled} SetPrefInt (590,1); {varParametricEnableStateEventing,ResetStatesEvent} END; kObjOnWidgetPrep: {41} BEGIN WidgetPrep; END; {kObjOnWidgetPrep} kObjOnObjectUIButtonHit: BEGIN CASE MsgData OF kRefreshBtnID: BEGIN END; END; END; {kObjOnObjectUIButtonHit} END; {case} SetRField(PIOHan,PIOName, 'IsNewBar', 'FALSE'); END; RUN(TruckLoadBar);
  13. Sam Jones

    Setting Z height at PIO creation

    Since the Move3DObj(PIOHan, 0, 0, 36); works just fine without the IsNew flag test, I would think that I don't need to explicitly set the object to hybrid. So, I could keep resetting the flag, but then how do allow the user to set the Z height later? S
  14. Sam Jones

    Setting Z height at PIO creation

    No. The first time the PIO is placed, even without running in developer mode, it seems that the flag is cleared. It ...seems... that the reset event is run more than once, the flag is cleared and after the final exit from the PIO code the object is drawn at z = 0 height. If I don't do an "IsNewCustomObject" test or a custom one with a custom flag, the object is drawn at the desired 36 drawing units. But, without such a flag, every time an edit is made to OIP 36 is added to the current z height, and the object climbs.
  15. Sam Jones

    Setting Z height at PIO creation

    Well, Move3DObj(PIOHan, 0, 0, 36); works if I call it right after EndXtrd, but every time I change a value in the OIP after creation 36 is added to the Z value of the PIO and it starts climbing to the moon. I tried to put an IsNew test like this Rect(0, 0, BarL, BarW);   BeginXTrd(0,BarT);   Rect(0, 0, BarL, BarW * -1);   EndXtrd; IF IsNewCustomObject('Load Bar') THEN Move3DObj(PIOHan, 0, 0, 36); But the IsNewCustomObject flag always seems to get cleared before last reset event. I tried to make my own flag as a parameter set to TRUE as a default and then cleared after drawing, but that doesn't work. I don't mind positing the whole thing; it's simple and short. I can't figure it out.