cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 
Developer forum

Can't get material change

WalterWhite
Participant

Hi there,

I use "ACAPI_Notify_CatchNewElement" to catch the modify of the element.

 

 

ACAPI_Notify_CatchNewElement(nullptr, ElementEventHandlerProc);
ACAPI_Notify_InstallElementObserver(ElementEventHandlerProc);

 

 

When I change the material attribute which has already been used at current surface,the observer can't get change.

figure1 shows the material current use.

figure2 shows change material.

However, When I change the material's texture, I can't get the change in "ElementEventHandlerProc".

So how should I do can get the change?

f1.png

f2.png

 

1 ACCEPTED SOLUTION

Solution
bschwb
Enthusiast

Hi!

There are two different cases I can make out from your question:
1. Detect if some material changed. (Not possible with ElementObservers)

2. Detect if the material assignment of some element is changed. (You get a APINotifyElement_Change notification for this with ElementObservers)

I think you want case 1 correct?
I came up with a technique on how this might be possible. I use it for something else so I'm not 100% sure it works for this case as well. So try with care.
Here's a rough sketch:
- Make sure "Save each step" is enabled in the Data Safety settings of the AC Work Environment

- Use the Project Notification "APINotify_TempSave"

- Now you can check on every action whether your material changed (API_Attribute stuff)
  - this now is triggered on almost any action in AC so be careful to not use to much time to decide whether to act on it!

Let me know if it works for you as well 🙂

Bernd Schwarzenbacher
Archicad Add-On Developer
Get (partially free) Add-Ons at www.bschwb.com/add-ons

View solution in original post

2 REPLIES 2

Solution
bschwb
Enthusiast

Hi!

There are two different cases I can make out from your question:
1. Detect if some material changed. (Not possible with ElementObservers)

2. Detect if the material assignment of some element is changed. (You get a APINotifyElement_Change notification for this with ElementObservers)

I think you want case 1 correct?
I came up with a technique on how this might be possible. I use it for something else so I'm not 100% sure it works for this case as well. So try with care.
Here's a rough sketch:
- Make sure "Save each step" is enabled in the Data Safety settings of the AC Work Environment

- Use the Project Notification "APINotify_TempSave"

- Now you can check on every action whether your material changed (API_Attribute stuff)
  - this now is triggered on almost any action in AC so be careful to not use to much time to decide whether to act on it!

Let me know if it works for you as well 🙂

Bernd Schwarzenbacher
Archicad Add-On Developer
Get (partially free) Add-Ons at www.bschwb.com/add-ons

Hi bschwb,

Thanks a lot!

Forgive me leaving a long time to reply you.I try the method you post and it really works.

Still looking?

Browse more topics

Back to forum

See latest solutions

Accepted solutions

Start a new discussion!