Jump to content


  • Posts

  • Joined

  • Last visited

Posts posted by Hippocode

  1. On 5/24/2018 at 3:46 PM, Stuborg said:

    2. When a door is dropped into a drawing then dragged into a wall - Vectorworks thinks you are deleting the door and a database row is subsequently removed from the database - again not helpful.


    Any component that can be hosted into a wall is actually being duplicated inside while the original is removed. This sounds very unlogical but I don't know the reason behind it. That might be causing that row being removed.

  2. I don't think there is a function available that can do it, as it's default behaviour.

    I believe the only way is to force a class (or custom settings) on your subobjects. 


    My guess is that the recalculate event uses the parent class for all created content in that container.

  3. Yes our SymbolObject plug-in does exactly that. It can be very useful for indicating shafts and other components that have exact the same composition through multiple layers.

    You can choose to show the symbol on any combination of layers from a selection box.


    This is made possible by using the proxy object functionality and works best with 2D symbols only. The object duplicates it's content on all the chosen design layers. While you can select and modify this object on any of these layers, it is one unique object.


    It is also possible to count all the occurrences when using worksheets.

  4. Sadly I won't be able to come to the DS this year, but I do like the idea.


    I'd say it should be even part of the DS, but I guess our numbers are probably to small for Vectorworks to invest their valuable time of the summit. Then again my opinion is that if you have zero custom scripts/tools/addons active in your workspace, you are doing it wrong and need help :)

    • Like 2
  5. From what I understand, plug-in styles are only supported if your object matches a unique ID hardcoded into Vectorworks (by request). It is required for your object to be recognized by the functionality.

  6. 23 hours ago, Nebeor said:

    i'm using  a VWPolygon2DObj poly as pathhand: it's shaped to a closed rectangle, I suppose there is nothing wrong with that. 

            VWPolygon2DObj poly = VWPolygon2D();
            poly.AddVertex( 0, 0, false ); 
            poly.AddVertex( 0,depth, false );
            poly.AddVertex( length, depth, false );
            poly.AddVertex( length, 0, false );
            poly.SetClosed( true );

    I'm thinking it should be VWPolygon2DObj all the way.


    If you debug you should be able to see on which line the error occurs?

    Also, you don't need to define "poly" on declaration.

  7. 1 minute ago, Nebeor said:

    What do you mean with 'removing content on reset'?



    What i find most interesting is that the SDK doesn't wait to terminate the C++ code before running the first reset of the VectorScript Plugin. In Vectorscrip this is not the case.



    if object A is the parent and it creates object B inside of it (parent - child) there is no need of catching it with a unique name, as you have a handle when creating it.

    That is, unless you have your object A set not to automatically remove all it's contents on reset, on which case your interface manages it. This is used if you don't wat to recreate all the inner objects each time the object is reset.

  8. 32 minutes ago, Nebeor said:

    CreateCustomObjectPath(const TXString& name, MCObjectHandle pathHand = NULL, MCObjectHandle profileGroupHand = NULL)

    so, would you all agree that this function needs at least two arguments because the pathHand should not be null?


    also, i tried to add a closed VWPolygon2DObj as pathHand but it doesn't resolve my bug.



    It only requires one argument, unless you want to specify a path/profile.

    Your object will be created and reset. Only after this creation the path will be attached and reset again.


    In any case, your object's code should be able to handle a NULL path.

    Can you post a bit more of the last steps before the crash occurs ? Could also be a recursive reset.


  9. Yes, I assume you are not veryfing the path handle. When your parent creates the child, it could be that the first reset is called before your path is assigned. If you just assume its a correct handle and cast it to a nurbs or poly you'll run into this.


    Since you talk about parent and child, can I assume you've set your plug-in not to remove it's content on reset? If not you do not need to get the handle by using a unique name.

  10. I usually add a class parameter that overrides the object class on object recalculation. I only do this when the current class does not match the class of the parameter to avoid infinite recursion as mentioned above. Though it could be that setting a class does not reset the object anymore, something changed about it a couple versions back.

  11. 6 hours ago, Gonda said:

    Hey All,


    So, I'm in the process of developing a custom PIO that has two parts.  The first part acts as a standard object in terms of XYZ as well as movement, rotation, etc.

    The trick is that I'm also looking to have a second part to it that always displays information in the same place regardless of the XYZ of the point object.



    Your object origin is always 0,0 towards your object insertionpoint.

    Knowing that, for your object to show something at an absolute position in the drawing, all you need to do is substract the object position from the relative position of the part within the object.


    Say you want something shown absolute at A(50,50), your object is placed at B(25,25) => The inner component of your object should be placed at A-B.

    Keep in mind that this does not take in rotation, you should apply the transformationmatrix of the object instead for this to work.


  12. 9 hours ago, Samuel Derenboim said:

    Really? you have a script that can write instance record information to symbol definitions? You already have a ready script? or are you saying it's just possible ?

    I just wanted to add this request to the wish list since i too don't think this is an impossible feature. :)


    Assuming you have one instance of this symbol selected, you can use the active handle to retrieve the values, get the handle to the definition itself and overwrite them.

    From then on, any new placed instance will use the updated record information.

  13. Typically they should follow a logically order of events.


    kObjectExternalReset is called when an object reset is caused by another object.

    I assume the first reset is yours. For some reason, an additional reset by something else in the background is causing the other events. Some actions can cause multiple events because sometimes we want to do something on a specific moment when an object is changing. It could be that modifying text does that.


    I wouldn't worry to much about it unless you end up with unwanted behaviour.



  14. Hi


    I have objects that reference others by an internal index. Basically it's a list of objects A that reference any other object (any type) named B by their internal index.

    This reference is saved into a Sint32 Parameter.


    When referencing this file into an other document (e.g. layer viewport), the references are broken because they assume the indexes remain the same, which they don't.

    Is there any way to find out the new indexes relative to the other document so I can correct the internal indexes to their correct values? 

  15. I'm in need of a custom hidden group, similar to the profile/path group available in plug-ins. (I can't use those for this specific object as they are both in use already)

    Am I correct assuming the path and profile group are groups attached as aux objects with a specific data tag for them to be recognised?

    Is the content of such groups hidden by default or do I need to do something with it so it doesn't show as part of the object?


  16. This should get you started.

    Modify the <> wrappers to the exact name, recordname and value you want to modify.


    Note that you might need to native object name which can differ from the visual localised objectname.

    Procedure EditRecordFormat;
    ObjectName :String;
    RecordFormat: Handle;
    ObjectType: Integer;
    	ObjectName := '<ObjectName>';
    	RecordFormat := NIL;
    	RecordFormat := GetObject(ObjectName);
    	IF (RecordFormat <> NIL) THEN
    		ObjectType := GetTypeN(RecordFormat);
    		IF (ObjectType = 47) THEN
    			SetRField(RecordFormat, ObjectName, '<FieldName>','<FieldValue>');


  17. Normaly you can't modify any tool defaults with VS. What you can do is modify the default parametric record used in creating a new object.

    The parametric record is unique and can be retrieved with the unique name of the object. You can get the handle with GetNamedObject or some similar function taking a string.


    The normal Get/Set record field functions will work on this handle.

  18. I'm looking for some designers to test our new "Provision for voids" manager to provide feedback. You can reply here, by pm or by mail if interested.

    This video is a small teaser what it's about, there is however more to discover.


    • Create voids (clash intersections) based on predefined sets of your choice (any object, including IFC entities).
    • The idea is that once the Voids are created, they can be managed and used throughout the whole design process as a communication tool.
    • These voids will automatically manage the required holes in walls and slabs.
    • We are working on import/export functionality which enables collaboration beyond the scope of a document.




  • Create New...