Quantcast
Channel: Adobe Community : Popular Discussions - After Effects SDK
Viewing all 73444 articles
Browse latest View live

Parameter Index

$
0
0

Hi guys,

I m trying to get the selected parameter index from my effect.

To fo that I have to use the

AEGP_GetNewCollectionFromCompSelection

and then the CollectionSuite to get my AEGP_StreamRefH

Until that point I m ok.

 

But now I want to get the ID of that parameter to know other parameter index I need to know too.

The only function I found related to this was:

AEGP_GetStreamIndexInParent. Which mean that in the case I have some groups and group inside group...it becomes annoying. I ll need to get the parent of stream until I get back to the effect and compute the real index inside the effect

 

If anoyne has an other idea...

Thank you in advance.


After Effects SDK Examples

$
0
0

Hi, I`m trying to develop plugins for After Effects but i can`t even open a project. I get this error :

"The project consist entirely of configurations that require support for platfroms which are not installed on this machine. The project cannot be loaded."

What can I do ? What I need to install ?

AEGP_ExecuteScript

$
0
0

Hello

 

I have a problem using script from sdk.

 

When in script editor I run this code, my project load with any problem

 

function openProject(filename) {

     if (app.project != NULL)

       app.project.close(CloseOptions.DO_NOT_SAVE_CHANGES);

     var myFile = File(filename);

     if (myFile.exists)

       app.open(myFile);

     else

       writeLn("no such file or directory!");

}

 

openProject("C:\\MonDossier\\bandeau défilant.aep");

But when my plugin call, this function, After Effect crash "an strange error with ae.blitpipe"

/* some includes here! */

#include <AEGP_SuiteHandler.h>

#include <AE_GeneralPlug.h>

 

 

#define OPEN_PROJECT "function openProject(filename) { \

if (app.project != NULL) \

          app.project.close(CloseOptions.DO_NOT_SAVE_CHANGES); \

var myFile = File(filename); \

if (myFile.exists) \

          app.open(myFile); \

else \

          writeLn(\"no such file or directory!\"); \

} \

openProject(\"%s\");"

 

 

std::string Do(SPBasicSuite* sp, AEGP_PluginID id)

{

          std::string lReturnedValue;

 

 

          try

          {

    A_Err err = A_Err_NONE;

    AEGP_SuiteHandler(sp);

    AEGP_MemHandle resultMemH = NULL, errorMemH = NULL;

    A_char *resultAC = NULL, *errorAC = NULL;

    A_char scriptAC[AEGP_MAX_MARKER_URL_SIZE] = {'\0'};

    A_bool encodingB = TRUE;          // my file to load may have non ascii char

 

 

    sprintf(scriptAC, OPEN_PROJECT, "C:\\\\MonDossier\\\\bandeau d\u00E9filant.aep");

    ERR(suites.UtilitySuite5()->AEGP_ExecuteScript(id, scriptAC, encodingB, &resultMemH, &errorMemH));

    bool lAnErrorOccured = (err == A_Err_NONE);

    ERR(suites.MemorySuite1()->AEGP_LockMemHandle(resultMemH, reinterpret_cast<void**>(&resultAC)));

    ERR(suites.MemorySuite1()->AEGP_LockMemHandle(errorMemH, reinterpret_cast<void**>(&errorAC)));

 

 

    lReturnedValue.assign(resultAC, strlen(resultAC));

    if (lAnErrorOccured)

    {

      lReturnedValue.append("ERROR: ");

      lReturnedValue.append(errorAC, strlen(errorAC));

    }

 

    ERR(suites.MemorySuite1()->AEGP_FreeMemHandle(resultMemH));

    ERR(suites.MemorySuite1()->AEGP_FreeMemHandle(errorMemH));

          }

          catch(...)

          {

    /* Do something here! */

          }

 

          return lReturnedValue;

}

 

Plug-in Window goes behind main window(CS5)

$
0
0

hi all,

     I've been working on a plug in development for After Effects(CS5)..But i'm facing a problem now. The plug in window goes behind the After effects main window..So i would like to know the reason and solution for the problem..so could anybody help me out on this?

 

Cg soft

How to get a list of selected layers in AEGP?

$
0
0

Hi! I am writinga AE commandthat requiresinformationabout the selectedlayers.
I can notfind a way todetermine thelayer is selectedor not.

AEGP_COMPSUITE9 contains the AEGP_SetSelection but not AEGP_GetSelection.

Any idea?

Non-Custom UI Drawing

$
0
0

Hi all.

 

My plugin requires certain things drawing to the comp, including circles, lines and (hopefully) text. However they are *not* part of a custom UI - in other words they can stay on-screen during a RAM preview, for example.

 

I've been looking into using Drawbot, but I'm not sure I can use it for this purpose, the reason being how do I get a drawing ref using suites.EffectCustomUISuite1()->PF_GetDrawingReference() without having a context (looks like the context is passed as part of a UI event, which I won't have)?

 

I've already written a bunch of code to draw pixels directly to the screen, which is working great so far, and I can go ahead and write functions for drawing shapes using this method; I was just wondering if I'm supposed to use Drawbot for non UI drawing, or if "rolling your own" is the way to go here.

 

Thanks,

 

Christian

Image / Logo in Parameter

$
0
0

This might be a fairly naive question, but I've fumbled through putting together my first plugin through these forums, the sdk and sheer brute force at times ... however one thing I noticed on Keylight that I can only assume is not part of the out of the box params is shown in the following screenshot.  I was wondering if anyone has looked into doing this type of thing before, and if so how you went about doing it.  I have just have been wondering about this for a while and figured I would ask as I am almost done with my plugin.

Capture.PNG

set/get Preserve RGB option

$
0
0

Hi all,

 

I've tried to find how to set/get "Preserve RGB" option from SDK but I couldn't find.

Is there any way to do handle it and other parameters in Color Management tab?

 

anyway, It's not controllable from script no?


'AEGP_ExecuteScript': identifier not found

$
0
0

Hey guys,

 

I'm trying to execute a script from withing the panelor example from  sdk6.

 

PanelatorUI_Plat.cpp

...

 

case WM_COMMAND:

if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == BtnID){

i_numClicks++;

AEGP_ExecuteScript(NULL, "alert('X');", FALSE, NULL, NULL);

InvalidateAll();

handledB = true;

}

 

It won't compile => 'AEGP_ExecuteScript': identifier not found..

 

no idea what I'm doing really

 

thanks !

Reliable Timing in Effect Render function

$
0
0

Hi,

 

we develop a tracking effect that needs to overlay information on a layer that exactly fits the frame timing of the source material.

 

is there a reliable way to get the information which SOURCE frame is used in the Effect render function? The LayerDef structure itself only provides pixel data.

 

Of course I know there are lots of timing parameters that come in the in_data structure. Currently I compute a lookup frame index as follows:

 

First, I get the frame rate of the source item. This can be either from footage or from a composition:

 

AEGP_ItemType itemType = 0; Suites()->ItemSuite8()->AEGP_GetItemType(m_sourceItemH, &itemType);

double dFPS = 1.0;

switch (itemType)

{

case AEGP_ItemType_FOOTAGE:

  {

AEGP_FootageInterp fInterp; memset(&fInterp, 0, sizeof(fInterp));

Suites()->FootageSuite5()->AEGP_GetFootageInterpretation(m_sourceItemH, false, &fInterp);

dFPS = fInterp.conform_fpsF ? fInterp.conform_fpsF : fInterp.native_fpsF;

break;

  }

case AEGP_ItemType_COMP:

  {

AEGP_CompH compH = 0; Suites()->CompSuite10()->AEGP_GetCompFromItem(m_sourceItemH, &compH);

A_FpLong fps = 0; Suites()->CompSuite10()->AEGP_GetCompFramerate(compH, &fps);

dFPS = fps;

break;

  }

}

 

Then I calculate the frame index as follows:

double dTime = (double)in_data->current_time / (double)in_data->time_scale;

double dFrame = dTime * dFPS;

int index = (int)(dFrame); // truncated integer value

or alternatively:

int index = (int)(dFrame + 0.5); // rounded integer value

 

This handles time stretched layers as well, but not time remapping.

 

Curiously, I noticed that in some cases the rounded value fits, while in other cases only the truncated is correct.This difference even occurs in the same composition between RAM preview and Render Queue rendering - sometimes a frame jumps in the final video which was correct in RAM preview and vice versa.

 

Is there a reliable formula that I can use to get 100% correct frame mapping from a layer (using in_data->current time etc.) to the source item times, or are there toher ways to ask After Effects WHICH source frame is used in the LayerDef structure???

 

Thanks in advance,

Alex

Plug-in with Composition Extra fields

$
0
0

Hi,

I would like to write a plug-in that extends the composition and layer objects and adds to them some fields.

For example: I would like to add to the AEGP_Layer class a field called Bar.

I would then like to look at this field from the composition menu that displays the list of all of the layers.

 

So in effect, I will be able to see in the compostion menu an extra column titled Bar, and there I can see the

Bar data for each of the layers in that compostion.

 

Is this possible?

Refreshing HTML5 panel quickly?

$
0
0

I'm developing an add-on using HTML5 panels, and I am seeing the dockable panel, but currently the only way I found I can refresh the panel is closing it and then going to "window > extensions > my extension" to load it back, and that's really not as quick as pushing a keyboard shortcut.

I didn't find a way I can assign a keyboard shortcut to the custom extension, and using the workspace keyboard shortcuts to switch between a workspace with this panel and without this panel has a visual bug in which the content of the panel isn't rendering.

 

Any idea how quick-refreshing of the panel's content can be achieved?

How to get the selected layers?

$
0
0

Hi, how can I use the SDK to get a list of the layers which are selected by the user when the plugin is activated?

Example of AEGP_GetNewText()?

$
0
0
Can anyone post up an example of AEGP_GetNewText.

I am basically here (everything executes properly I am just adding some snippets to frame the context):

AEGP_StreamValue val;
AEGP_StreamRefH text_streamH = NULL;
A_Time timeT = {0,1};

suites.StreamSuite2()->AEGP_GetNewLayerStream(
S_my_id,
layerH, AEGP_LayerStream_SOURCE_TEXT,
&text_streamH);

suites.LayerSuite5()->AEGP_GetLayerCurrentTime(layerH, AEGP_LTimeMode_LayerTime, &timeT);

suites.StreamSuite2()->AEGP_GetNewStreamValue(
S_my_id,
text_streamH,
AEGP_LTimeMode_LayerTime,
&timeT,
TRUE,
&val);

So that is where I sit. Now when I do this:
AEGP_MemHandle textMemory;
suites.TextDocumentSuite1()->AEGP_GetNewText(S_my_id, val.val.text_documentH, &textMemory);

I get the following Error from After Effects when I run the plugin:
After Effects error: internal verification failure, sorry! {Must clear unicodePH}
(5027 :: 0)

So clearly I am doing something wrong here.. Any Pointers?

how can I pre-compose layers via AEGP?

$
0
0
Hello,

I would like my AEGP to put some of the layers of the active composition into a pre-composition. Well, the far way I can think of would be to create a new composition, add it to the existing composition, add the footage items of all layers I want to have in my nested comp in there and copy every one of the god knows how many streams, flags and effects to the layers inside the comp.

My question: isn't there an easier way to create nested compositions or at least copy layers with all their effects and so on to another place inside my project?

Confusion between HIViewRef & WindowRef.

$
0
0

Hi All,

          I'm using Panelator plugin available in AE SDK. I'm getting HIViewRef as window handle but for the framework which I'm using I need WindowRef as handle. Is there any way to get WindowRef from HIViewRef?

 

Thanks,

Dheeraj.

Reload plugin after building...

$
0
0

Would like to enquire about "SLICK DEBUGGING TRICKS" in After Effects SDK Guide (in pdf) for AE CS5 (version 10). Perhaps somebody is successful following the steps!?

I see a few problems as follows:

 

1) AE application keeps a file lock on Filter plugins (or plug-ins)

 

even if one could overwrite an effect plugin when AE process is running...

 

2) Purge All (in menu Purge -> All or Ctrl - Alt - key '/' on the numpad) does not reload the plugin; in fact this is being called in the following order:

    PF_Cmd_FRAME_SETUP,
    PF_Cmd_RENDER,
    PF_Cmd_FRAME_SETDOWN,

no request for PF_Cmd_GLOBAL_SETUP or PF_Cmd_GLOBAL_SETDOWN is made. also this thread already mentions it: http://forums.adobe.com/click.jspa?searchID=3907456&objectType=2&objectID=1798812

 

 

3) VS does not allow Edit & Continue or x64, and CS5 seems to be x64 only - how could you make use of this functionality? or documentation does not seem to be updated completely for SDK for CS5?

 

Greetings

 

mike

Building my first AE plugin using the example checkout - layer unvisible

$
0
0

Hi,

 

I am trying to learn how to build after effects CS6 plugin using Microsoft visual studio.

I managed to make a test plug using the "checkout" example from the SDK but whenever i apply it to a layer (solid or anything)

My layer which i applied it makes the solid disappear (attached JPG)

This is the code i used to compile.

 

#include "Checkout.h"

 

 

static PF_Err

GlobalSetup (

  PF_InData *in_data,

  PF_OutData *out_data,

  PF_ParamDef *params[],

  PF_LayerDef *output )

{

  PF_Err err = PF_Err_NONE;

 

 

  DuckSuite1* dsP = NULL;

 

 

  if (AEFX_AcquireSuite( in_data,

  out_data,

  kDuckSuite1,

  kDuckSuiteVersion1,

  "Couldn't load suite.",

  (void**)&dsP)) {

  PF_STRCPY(out_data->return_msg, "plugin loaded successfully");

  } else {

  if (dsP) {

  dsP->Quack(2);

  ERR(AEFX_ReleaseSuite( in_data,

  out_data,

  kDuckSuite1,

  kDuckSuiteVersion1,

  "Couldn't release suite."));

  }

  }

 

  // We do very little here.

  out_data->my_version = PF_VERSION( MAJOR_VERSION,

  MINOR_VERSION,

  BUG_VERSION,

  STAGE_VERSION,

  BUILD_VERSION);

 

 

  out_data->out_flags = PF_OutFlag_WIDE_TIME_INPUT |

  PF_OutFlag_I_DO_DIALOG;

 

 

  out_data->out_flags |= PF_OutFlag_PIX_INDEPENDENT |

  PF_OutFlag_USE_OUTPUT_EXTENT;

 

  out_data->out_flags2 = PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG |

  PF_OutFlag2_SUPPORTS_SMART_RENDER |

  PF_OutFlag2_FLOAT_COLOR_AWARE |

  PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS;

 

  return err;

}

 

 

 

 

/*static PF_Err

PreRender(

  PF_InData *in_data,

  PF_OutData *out_data,

  PF_PreRenderExtra *extra)

{

  /*PF_Err err = PF_Err_NONE;

  PF_ParamDef channel_param;

  PF_RenderRequest req = extra->input->output_request;

  PF_CheckoutResult in_result;

 

 

  AEFX_CLR_STRUCT(channel_param);

 

  // In order to know whether we care about alpha

  // or not, we check out our channel pull-down

  // (the old-fashioned way); if it's set to alpha,

  // we care. -bbb 10/4/05.

 

  /*ERR(PF_CHECKOUT_PARAM( in_data,

  SMARTY_CHANNEL,

  in_data->current_time,

  in_data->time_step,

  in_data->time_scale,

  &channel_param));

 

 

  if (channel_param.u.pd.value == Channel_ALPHA){

  req.channel_mask |=  PF_ChannelMask_ALPHA;

  }

 

 

  req.preserve_rgb_of_zero_alpha = TRUE; // Hey, we care.

 

 

  ERR(extra->cb->checkout_layer( in_data->effect_ref,

  SMARTY_INPUT,

  SMARTY_INPUT,

  &req,

  in_data->current_time,

  in_data->time_step,

  in_data->time_scale,

  &in_result));

 

 

 

 

  UnionLRect(&in_result.result_rect, &extra->output->result_rect);

  UnionLRect(&in_result.max_result_rect, &extra->output->max_result_rect);

 

  // Notice something missing, namely the PF_CHECKIN_PARAM to balance

  // the old-fashioned PF_CHECKOUT_PARAM, above?

 

  // For SmartFX, AE automagically checks in any params checked out

  // during PF_Cmd_SMART_PRE_RENDER, new or old-fashioned.

 

  //return err;

  return 0;

}*/

 

 

 

 

static PF_Err

ParamsSetup (

  PF_InData *in_data,

  PF_OutData *out_data,

  PF_ParamDef *params[],

  PF_LayerDef *output )

{

  PF_Err err = PF_Err_NONE;

  PF_ParamDef def;

  PF_EffectUISuite1 *effect_ui_suiteP = NULL;

 

 

  AEFX_CLR_STRUCT(def);

 

  PF_ADD_SLIDER( NAME,

  CHECK_FRAME_MIN,

  CHECK_FRAME_MAX,

  CHECK_FRAME_MIN,

  CHECK_FRAME_MAX,

  CHECK_FRAME_DFLT,

  CHECK_FRAME_DISK_ID);

 

 

  AEFX_CLR_STRUCT(def);

 

 

 

  //define the add layer dropdown menu name

  PF_ADD_LAYER("Layer to checkout",

  PF_LayerDefault_MYSELF,

  CHECK_LAYER_DISK_ID);

 

 

  out_data->num_params = CHECK_NUM_PARAMS;

 

 

 

 

  // Premiere Pro/Elements does not support this suite

  if (in_data->appl_id != 'PrMr')

  {

  ERR(AEFX_AcquireSuite( in_data,

  out_data,

  kPFEffectUISuite,

  kPFEffectUISuiteVersion1,

  NULL,

  (void**)&effect_ui_suiteP));

 

  ERR(effect_ui_suiteP->PF_SetOptionsButtonName(in_data->effect_ref, "Test Button"));

 

 

  (void)AEFX_ReleaseSuite(in_data,

  out_data,

  kPFEffectUISuite,

  kPFEffectUISuiteVersion1,

  NULL);

  }

 

  return err;

}

 

 

 

 

static PF_Err

Render(

  PF_InData *in_data,

  PF_OutData *out_data,

  PF_ParamDef *params[],

  PF_LayerDef *output )

{

  PF_Err err = PF_Err_NONE,

  err2 = PF_Err_NONE;

  int32_t num_channelsL = 0;

  PF_Rect halfsies = {0,0,0,0};

  PF_ParamDef checkout;

  PF_ChannelSuite1 *csP = NULL;

  PF_ChannelDesc desc;

  PF_ChannelRef ref;

  PF_ChannelChunk chunk;

  PF_Boolean found_depthPB;

 

  AEFX_CLR_STRUCT(checkout);

 

  // Premiere Pro/Elements does not support this suite

  if (in_data->appl_id != 'PrMr')

  {

  ERR(AEFX_AcquireSuite( in_data,

  out_data,

  kPFChannelSuite1,

  kPFChannelSuiteVersion1,

  "Couldn't load suite.",

  (void**)&csP));

 

  ERR(csP->PF_GetLayerChannelCount( in_data->effect_ref,

  0,

  &num_channelsL));

  

 

 

  if(num_channelsL) {

  ERR(csP->PF_GetLayerChannelTypedRefAndDesc( in_data->effect_ref,

  0,

  PF_ChannelType_DEPTH,

  &found_depthPB,

  &ref,

  &desc));

 

 

  ERR(csP->PF_CheckoutLayerChannel( in_data->effect_ref,

  &ref,

  in_data->current_time,

  in_data->time_step,

  in_data->time_scale,

  desc.data_type,

  &chunk));

 

  // do interesting 3d stuff here;

 

  ERR(csP->PF_CheckinLayerChannel(in_data->effect_ref,

  &ref,

  &chunk));

  }

 

 

  ERR2(AEFX_ReleaseSuite( in_data,

  out_data,

  kPFChannelSuite1,

  kPFChannelSuiteVersion1,

  "Couldn't release suite."));

  }

 

 

  // set the checked-out rect to be the top half of the layer

 

  halfsies.top = halfsies.left = 0;

  halfsies.right = (short)output->width;

  halfsies.bottom = (short)(output->height / 2);

 

  ERR(PF_CHECKOUT_PARAM( in_data,

  CHECK_LAYER,

  (in_data->current_time + params[CHECK_FRAME]->u.sd.value * in_data->time_step),

  in_data->time_step,

  in_data->time_scale,

  &checkout));

 

  if (!err) {

  if (checkout.u.ld.data)  {

  ERR(PF_COPY(&checkout.u.ld,

  output,

  NULL,

  &halfsies));

  }  else  {

  // no layer? Zero-alpha black.

  ERR(PF_FILL(NULL, &halfsies, output));

  }

 

  if (!err)  {

  halfsies.top = halfsies.bottom; //reset rect, copy.

  halfsies.bottom = (short)output->height;

 

 

  ERR(PF_COPY(&params[CHECK_INPUT]->u.ld,

  output,

  NULL,

  &halfsies));

  }

  }

 

 

  ERR2(PF_CHECKIN_PARAM(in_data, &checkout)); // ALWAYS check in,

  // even if invalid param.

  return err;

}

 

 

static PF_Err

About (

  PF_InData *in_data,

  PF_OutData *out_data,

  PF_ParamDef *params[],

  PF_LayerDef *output )

{

 

 

  PF_SPRINTF(out_data->return_msg,"Name: %s, Description: %s ", NAME, DESCRIPTION);

 

 

  /*PF_SPRINTF( out_data->return_msg,

  "%s, v%d.%d\r%s",

  NAME,

  MAJOR_VERSION,

  MINOR_VERSION,

  DESCRIPTION);*/

 

  return PF_Err_NONE;

}

 

 

static PF_Err

PopDialog (

  PF_InData *in_data,

  PF_OutData *out_data,

  PF_ParamDef *params[],

  PF_LayerDef *output )

{

  PF_Err err = PF_Err_NONE;

 

 

  PF_SPRINTF( out_data->return_msg,

  "Dudy Bin Message1");

 

 

  out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE;

 

  return err;

}

 

 

DllExport

PF_Err

EntryPointFunc (

  PF_Cmd cmd,

  PF_InData *in_data,

  PF_OutData *out_data,

  PF_ParamDef *params[],

  PF_LayerDef *output,

  void *extra)

{

  PF_Err err = PF_Err_NONE;

 

 

  switch (cmd) {

  case PF_Cmd_ABOUT:

  err = About(in_data,out_data,params,output);

  break;

  case PF_Cmd_GLOBAL_SETUP:

  err = GlobalSetup(in_data,out_data,params,output);

  break;

  case PF_Cmd_PARAMS_SETUP:

  err = ParamsSetup(in_data,out_data,params,output);

  break;

  case PF_Cmd_RENDER:

  err = Render(in_data,out_data,params,output);

  break;

  case PF_Cmd_DO_DIALOG:

  err = PopDialog(in_data,out_data,params,output);

  break;

  default:

  break;

  }

  return err;

}

example.jpg

 

Thanks,

 

Dudy.

Modal dialog in Premiere Pro (using AE SDK)

$
0
0

Hello all,

 

I have a plugin that does some long, intensive processing inside a single render call. I show my own progress bar in a modal dialog while this happens.

 

This is working fine in After Effects, but it's causing a crash in Premiere Pro. I get a few messages through the WndProc but then they just stop coming. I've attached some code below. Does anyone have any idea what might be going on there?

 

many thanks for any help,

 

Hugh

 

Here's the code that creates the dialog:

 

//assume host window is foregrounded

hostWindow = GetForegroundWindow();

// also tried HWND hwnd; PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwnd);


hDlg = CreateDialog(theDLL, MAKEINTRESOURCE(IDD_PROGRESS), hostWindow, reinterpret_cast<DLGPROC>(DlgProc));

SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)this);


CenterDialog();


ShowWindow(hDlg, SW_SHOW); UpdateWindow(hDlg);

SetForegroundWindow(hDlg); BringWindowToTop(hDlg);

 

hProgress = GetDlgItem(hDlg, IDC_PROGRESS1);

SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, total));

and here's the window proc:
static LRESULT CALLBACK DlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
ProgressDialog *myOwner = (ProgressDialog*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA);

switch(Msg)
{
case WM_INITDIALOG:
        case WM_WINDOWPOSCHANGING:
return TRUE;

case WM_NCLBUTTONDOWN: //prevent user moving the dialog box
if (HTCAPTION == wParam) return TRUE;
else return FALSE;

case WM_COMMAND:
switch(wParam)
{
case IDOK:
return TRUE;
case IDCANCEL:
myOwner->cancelled=true;
return TRUE;
}
break;
}
return FALSE;
}

Text justification using AEGP

$
0
0

Is it possible to retrieve the text justification of a text layer using AEGP suites ?

 

The jsx equivalent is

var just = layer.property("ADBE Text Properties").property("ADBE Text Document").value.justification;

 

Thanks

Viewing all 73444 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>