Adding line-art shading to line-art object

I'm hoping that someone can give me an idea of how to do something a little easier than I have been doing. It's a little hard to describe but without an image upload function on this forum I'm going to have to try with words alone.
I am drawing simple line art (entirely vector) objects with solid colors that need a 3d look to them. For instance, a simple balloon where the right side is in the shadow, so it needs to be darker. If I were doing it with a pencil I'd just shade the right side of the balloon in a crescent shape. In illustrator though I need to create another vector object to be the shading.
The outside of the balloon needs to be a solid black line. The object that becomes the shading needs to have no outline because it's just a darker color of the balloon (e.g. dark red to the balloon's bright red color). Making the outline its own object can't be done because it will either not reach the line of the balloon or its own color will partially cover up the black outline (because it is in front).
I've been successful at making these by implementing the shading as a large object that intersects the balloon, creating a live object out of the two, then setting the various line segments and areas with the live paint tool until it looks right. However this is time consuming and I wind up with an object that is conspicuously larger than it looks because of the invisible parts of the live paint object sticking out. Also, if things get just a little more complex with additional live paint objects then there are a bunch of line segments and live paint areas that I have to take care of. Maintenance of the object is difficult.
Can anyone suggest a better way to do this that doesn't involve live objects, patterns/gradients (everything needs to be a solid color) and doesn't take a lot of work to create?
Thanks!

One way is the old fashion way:
1. Draw balloon object with highlight color, no stroke.
2. Copy balloon object, paste in front, reshape copy into crescent by dragging individual points from left edge toward right; recolor this copy as shadow tint.
3. Paste in front a second time, assign no fill, black stroke to this copy.

Similar Messages

  • Get notified when art object is deleted or added

    Hi, anyone know how to get notified when user added or deleted an art object?
    I searched the SDK in and out and found nothing.
    Thanks,
    Don

    If you have art you wish to keep track of, the way to do it is using ArtUIDRefs (AIUID.h). You can ask art for a unique identifier and later on ask for the handle that belongs to that UID. Its not too hard at that point to determine if it still exists or not. Note that you will probably need to use AIArtSuite::ValidArt() if you get a handle back. This tells you if the handle is actually on the canvas or not; handles persist even when deleted becuase the delete could be undone.
    So if you're tracking a small number of particular handles, its quite easy to know whent hey're deleted. If you're trying to watch a huge number of art handles though, you're going to pay a heavy price. While I wish they had better ways to deal with this, the truth is the SDK isn't designed for that kind of plugin. You can make it work, but you're kind of out on the edge of what they'd planned.

  • How to properly create path art object, please help

    Hello there,
    I have a vector of AIRealPoint , each point is actual X, Y coordinate of the stroke. I need to create path art object out of this vector.
    I'm  somehow confused how to correctly construct segments array form the given AIRealPoints, my goal is to have single path object where count of segments is equal to count of AIrealPoints first and last points are anchors. SDK documenation is not really helping here...
    Please, take a look at the code snippet, it seems I'm doing something wrong with in and out params of segment , in any case I fail to create simple path object ....
    ASErr CretaeVectorPathTest2(vector<AIRealPoint>& stroke)
    AIArtHandle artHandle;
    ASErr result = kNoErr;
    try {
      AIRealPoint start;
      long lngStrokeLength = stroke.size()-1;
      AIArtHandle lineHandle = NULL;
      AIErr error = sAIArt->NewArt( kPathArt, kPlaceAboveAll, NULL, &lineHandle );
      if ( error ) throw( error );
      error = sAIPath->SetPathSegmentCount( lineHandle, lngStrokeLength );
      if ( error ) throw( error );
      AIPathSegment *segment = new AIPathSegment[lngStrokeLength];
      // This is a first point of the path
      segment[0].p.h = stroke[0].h;
      segment[0].p.v = stroke[0].v;
      segment[0].in = segment[0].out = segment[0].p;
      segment[0].corner = true;
      for(inti=1 ;i< lngStrokeLength-1;i++)
       segment[i].p.h = stroke[i].h ;
       segment[i].p.v = stroke[i].h ;
       // NOT GOOD!!!
       segment[i].in.h  = stroke[i-1].h ;
       segment[i].in.v  = stroke[i-1].v ;
       segment[i].out.h  = stroke[i+1].h;
       segment[i].out.v  = stroke[i+1].v;
       segment[i].corner = false;
    // NOT GOOD!!!
      // This is a last point of the path
      segment[lngStrokeLength].p.h = stroke[lngStrokeLength].h;
      segment[lngStrokeLength].p.v = stroke[lngStrokeLength].v;
      segment[lngStrokeLength].in = segment[lngStrokeLength].out = segment[lngStrokeLength].p;
      segment[lngStrokeLength].corner = true;
      error = sAIPath->SetPathSegments( lineHandle, 0, lngStrokeLength, segment );
      if ( error ) throw( error );
      error = sAIPath->SetPathClosed( lineHandle, false );
      if ( error ) throw( error );
    // apply color width etc.
      AIPathStyle style;
      error = sAIPathStyle->GetPathStyle( lineHandle, &style );
      if ( error ) throw( error );
      style.strokePaint = true;
      style.stroke.color.kind = kFourColor;
      style.stroke.color.c.f.cyan = 0;
      style.stroke.color.c.f.magenta = 0;
      style.stroke.color.c.f.yellow = 0;
      style.stroke.color.c.f.black = 100;
      style.stroke.width = 0.75;
      style.stroke.dash.length = 0;
      delete[] segment;
      error = sAIPathStyle->SetPathStyle( lineHandle, &style );
      if ( error ) throw( error );
    catch (ai::Error& ex) {
      result = ex;
    return result;
    Thanks,
    David

    As for beziers, Illustrator uses cubic beziers which are fairly straight forward (thank goodness!). Here's a lift from Wikipedia's Bezier entry:
    This image is pretty good at demonstrating how AI's bezier segments work. In the animation, the moving point has two lines sticking off it, ending with two points. If P3 was an AISegment, the left-hand blue point would be in and the right-hand point would be out. If we were to translate the state of the animation in its last frame into AI code, you'd basically have something like this:
    AISegment segment1, segment2;
    segment1.p = p0;
    segment1.in = p0;
    segment1.out = p1;
    segment2.in = p2;
    segment2.p = p3;
    segment.out = p3;
    Note that this would imply any line that continues beyond either end point isn't a smooth beizer curve (i.e. the curve is limited to between these points). That effectively makes them corner points (I think). Also, the line formed by linking in & p or out & p is the tangent to the curve at p, which I think you can make out from from the animation.
    Another way to get a feel for this is to use the pen tool to draw a line with a few segments. If you then pick the sub-select tool (white selection arrow, not black selection arrow) and select individual points on the curve, you'll see when you do that two 'anchors' jut out from each point. Those are the in & out for that point on the curve.
    Its all a little confusing because technically, a bezier segment between p & q would be p, p.out, q.in & q. (four vertices). To avoid repeating information, and keep it simple for non-beziers, AI's segments are still the vertices. So if you wanted to make the nth segment a beizer, you'd need n & n+1 from AI's path, and you'd modify two-thirds of each AISegment (p, out from n & in, p from n+1).
    I hope that helps, but if you have any further questions, feel free to ask! If you need to do anything fancy with beziers, there are some helpful utilites in AIRealBezier.h.

  • Adding Album Art to iTunes Local Folder?

    I have a setup on iTunes on my Dell Dimension Desktop Machine. Basically I have uploaded ALL my CD collection to HDD in WAV format to retain sound quality.
    My problem is with getting all the Album Art to work.
    About one third of my collection iTunes does not have the Album Art? so I have scanned it all manually and placed an Folder.jpg in each Album/Track Folder.
    I appreciate that WAV music files don't have a means of adding extra data to them like MP3 files, therefore, iTunes saves its own downloaded Album Art in a folder called "Download", there is also another Folder called "Local" which is where your manually added Album Art should go?
    These are stored as .itc files
    However then I try to manually try to add my own album art to the album, by selecting all tracks, Get info, Add album art to the white square and pressing OK nothing happens?
    In the Artwork display box it say in large text "Artwork Not Modifiable"? for some reason?
    Any ideas??

    Hi Andrew. As far as plug&play, I have not found anything. My best bet was to use a proper utility to grab album art on a go forward basis for all new tracks, and then for the old tracks that have the incorrect metadata, I slowly go through, open up a browser with amazon.com loaded, and then search for the albums/related art that I need. Once I find it I click on the album art in the main browser, which spawns a child window with just the jpeg of the album art in it, and then drag and drop it from that browser into the album art pane. Far from plug and play, but it gets the job done.

  • Adding line item prior to ACC_DOCUMENT03 Posting

    Due to our legacy currency alignment on some systems being incongruent with our SAP ECC 6.0 environment, some upstream inbound IDocs will post with 2 decimals for HUF when 6.0 environment has 0 decimals for HUF.  The inbound documents are coming in as ACC_DOCUMENT03 IDocs.
    There will be rounding involved.  iN certain cases, the rounding will mean that the line items are no longer in balance.
    Rather than alter the value of the inbound line items, preference is to add line item prior to posting that contains the balance difference and posts to the "rounding difference" account.
    Has anyone expereinced this situation before? How was it resolved?
    Considered adding line item via "BAPI_ACC_DOCUMENT_POST" or, if possible, within "'BAPI_INCOMING_INVOICE_CREATE'".
    Has anyone faced this or a simlar issue before?  How was it resolved?  Was it resolved internally?

    Hello Weng,
    I also looked on SAP notes. 
    There is a note with much information about Tax Postings with accounting BAPIs and it's a consulting note.  The note number is 626235.
    Regards,
    Rae Ellen Woytowiez
    Edited by: Rae Ellen Woytowiez on Dec 21, 2010 10:11 PM

  • How to set the focus on the new added line in ALV list (OO)

    Dear Friends,
    I have an ALV list based on OO(using alv_grid->set_table_for_first_display), when I click the 'new' button to add a new line, the mouse arrow is always pointing to the first line - not the new created line for user to input!!.
    So how to set the focus (mouse arrow) on the new added line in ALV list for user to input it friendly?
    Thanks a lot!!

    Hello,
    To get the selected line row first we have get all the rows in the internal table.
    When u click on the button when it is creating the new line we have to pass the row number to the call method
    CALL METHOD <ref.var. to CL_GUI_ALV_GRID > ->get_selected_rows
       IMPORTING
          ET_INDEX_ROWS  =   <internal table of type LVC_T_ROW > (obsolete)
          ET_ROW_NO      =   <internal table of type LVC_T_ROID > .
    CALL METHOD<ref.var. to CL_GUI_ALV_GRID>->set_selected_rows
       EXPORTING
          IT_ROW_NO  =  <internal table of type LVC_T_ROID>
       or alternatively
       IT_INDEX_ROWS  =  <internal table of type LVC_T_ROW>
          IS_KEEP_OTHER_SELECTIONS  =  <type CHAR01>.
    http://help.sap.com/saphelp_erp2004/helpdata/EN/22/a3f5ecd2fe11d2b467006094192fe3/content.htm

  • Scripting Error: Line 25 Object doesnot support this property or method

    Hi,
    Environment :
    BS Version: 11i(11.5.9)
    Component: Web ADI
    Descripiton: When trying to upload journals through Web ADI we are getting the below error.
    "Scripting Error: Line 25 Object doesnot support this property or method"
    Please help on this issue.
    Thanks,
    Arun Babu R

    Hi hsawwan,
    Thanks for your reply.Actually after working on it we found that is the browser issue. The issue was resolved.
    ThanQ,
    Arun Babu R

  • Mouse drag event available for art objects?

    I want to receive event as user drag an art object so I can continuously monitor its position on the artboard.
    Anyone know how to do this? Thanks so much.

    You can take a look at the multiarrowtool in adobes sample code. That should give you the code required. These two functions allow for you to get the mouse postion.
    ASErr MultiArrowToolPlugin::AddAnnotator(SPInterfaceMessage *message)
    ASErr result = kNoErr;
     try
    result = sAIAnnotator->AddAnnotator(message->d.self,"MultiArrowTool Annotator", &fAnnotatorHandle);aisdk::check_ai_error(result);
    result = sAIAnnotator->SetAnnotatorActive(fAnnotatorHandle,
    false);aisdk::check_ai_error(result);
    catch (ai::Error& ex){
    result = ex;
    catch(...){
    result = kCantHappenErr;
    return result;}
    */ASErr MultiArrowToolPlugin::DrawAnnotator(AIAnnotatorMessage* message)
    ASErr result = kNoErr;
     try
     // Invalid previous annotator.
    result = sAIAnnotator->InvalAnnotationRect(NULL, &oldAnnotatorRect);
     // Get the string to display in annotator.
    ai::UnicodeString pointStr;
     //result = this->GetPointString(fEndPoint, pointStr);
    result =this->GetPointString(fStartingPoint, pointStr);aisdk::check_ai_error(result);
    AIPoint annotatorPoint;
    result = sAIDocumentView->ArtworkPointToViewPoint(NULL, &fEndPoint, &annotatorPoint);
    // Move 5 points right and 5 points up.
    annotatorPoint.h += 5;
    annotatorPoint.v -= 5;
     // Find cursor bound rect.
    AIRect annotatorRect;
    result = sAIAnnotatorDrawer->GetTextBounds(message->drawer, pointStr, &annotatorPoint, annotatorRect);
    aisdk::check_ai_error(result);
     //Draw a filled rectangle, the following R, G and B values combined makes light yellow.
     unsigned short red = 65000; 
    unsigned short green = 65000; 
    unsigned short blue = 40000;ADMRGBColor yellowFill = {red, green, blue};
    sAIAnnotatorDrawer->SetColor(message->drawer, yellowFill);
    result = sAIAnnotatorDrawer->DrawRect(message->drawer, annotatorRect,
    true);aisdk::check_ai_error(result);
    //Draw black outline, 0 for R, G and B makes black.
     unsigned short black = 0;ADMRGBColor blackFill = {black, black, black};
    sAIAnnotatorDrawer->SetColor(message->drawer, blackFill);
    sAIAnnotatorDrawer->SetLineWidth(message->drawer, 0.5);
    result = sAIAnnotatorDrawer->DrawRect(message->drawer, annotatorRect,
    false);aisdk::check_ai_error(result);
    // Draw cursor text.
    result = sAIAnnotatorDrawer->SetFontPreset(message->drawer, kAIAFSmall);
    aisdk::check_ai_error(result);
    result = sAIAnnotatorDrawer->DrawTextAligned(message->drawer, pointStr, kAICenter, kAIMiddle, annotatorRect);
    aisdk::check_ai_error(result);
     // Save old rect
    oldAnnotatorRect = annotatorRect;
     catch (ai::Error& ex){
    result = ex;
    return result;}
    */ASErr MultiArrowToolPlugin::GetPointString(const AIRealPoint& point, ai::UnicodeString& pointStr){
    ASErr result = kNoErr;
    try
    ASInt32 precision = 2;
    ai::UnicodeString horiz, vert;
    ai::NumberFormat numFormat;
    horiz = numFormat.toString((float) point.h, precision, horiz);vert = numFormat.toString((
    float) -point.v, precision, vert);pointStr.append(ai::UnicodeString(
    "h: ").append(horiz)
    .append(ai::UnicodeString(
    ", v: ").append(vert)));
    catch (ai::Error& ex){
    result = ex;
    return result;}

  • Post ios5 update -- videos for ipad2 wont start after adding album art using get info

    this never happened w ios4. before, i could manually add posters on my movies using get info. but now, everytime i add posters the movie wont start. i wanna enjoy my movie playlist complete with movie posters/ cover art. do you experience the same prob?

    Just added new art to two albums in iTunes v7. One the old way (Google Images then a drag and drop) and the other asking iTunes to get it for me. Only the art that was added manually has moved over to the iPod, which is 5th Generation 30GB.
    It's not the worst thing in the world seems as I never had that art before anyways. I'm sure an update will be out soon it is a .0 release and I imagine they is lots of things under the hoot getting us ready for OS X 10.5.
    iMac 2GHz Intel Core Duo, 1.5 GB RAM.
    iBook G4 1.5 GB RAM.   Mac OS X (10.4.7)   5G iPod 30GB
    http://web.mac.com/vyvyenne/

  • Get selected art object

    I am trying to get the user selected art object properties, I tried written the code below and realised this get all the objects in the layer and store all of them in the AIArtHandle instead of what I selected. I only want to print out the one user selected, how??? any help???
    AIMatchingArtSuite *aiArtMatch;
    sBasic->AcquireSuite( kAIMatchingArtSuite, kAIMatchingArtSuiteVersion, (const void**)&aiArtMatch );
    AIArtHandle **artStore = NULL;
    long artCount = 0;
    aiArtMatch->GetSelectedArt(&artStore, &artCount);
    AIArtHandle my_artHandle = (*artStore)[0];

    I believe the problem you're having is that selection 'climbs upwards'. That is, if you select some art you also select it's parent, and its parent's parent, etc.
    So even if you just select a single path, you're also selecting the group that represents the layer. As such, you might be able to just ask the art if it's a layer group using AIArtSuite::IsArtLayerGroup() and ignore it if it is. I believe the rest will be an accurate depiction of what's selected, be it on art or many.
    Oh, and if the art you've selected is a compound path, that call will also include all the sub-component paths. If you don't want them, you can also ask each art in your set if it's part of a compound path by using AIArtSuite::GetArtUserAttr() with kArtPartOfCompound; I believe you can ignore anything that has that, though I'm not sure how it responds when you pass it the container kCompoundPathArt.
    Hope that helps!

  • Motion videos from captivate to .swf create visual noise - added lines

    There are a lot of added lines, field box outlines, etc. added to all my video portions on the .swf output.
    It's almost as if they are from a previous frame and just don't go away.  They're a little like a 'trail' mark from a previous frame in the video.
    Is there any setting I can change to get this to stop or how can I clean these up?

    Yes!  That did it - file size doesn't matter for me so this works.  Thank You

  • Added Lines not Totaling

    I have a Parts Estimate flowed form with a button to add more lines if needed. All the lines total correctly and total in the Total Estimate at the bottom on the page. But the added lines will not total on their own line, it just tabs over it.
    Everything else works fine but the subform added lines.
    I've looked the scripts over but not sure where I'm going wrong.
      Tks...
                HHud

    Hi HHud,  Are you using FormCalc or JavaScript?  You will need to cause the calculate event to fire again, either explicitly with execCalculate or referencing something in the changes like the instance managers count property.  You don't have to do anything with it, just referencing it will setup a dependency.  Bruce

  • [svn] 1433: adding 'console' security constraint to MBeanServerGateway remote object for MBean tests and ds-console , used when running on Websphere with administrative security enabled.

    Revision: 1433
    Author: [email protected]
    Date: 2008-04-28 13:13:12 -0700 (Mon, 28 Apr 2008)
    Log Message:
    adding 'console' security constraint to MBeanServerGateway remote object for MBean tests and ds-console, used when running on Websphere with administrative security enabled. Should call setCredentials("bob","bob1") to use this RO.
    Modified Paths:
    blazeds/branches/3.0.x/qa/apps/qa-regress/WEB-INF/flex/remoting-config.mods.xml
    blazeds/branches/3.0.x/qa/apps/qa-regress/WEB-INF/flex/services-config.mods.xml

    Hi,
    It seems that you were using Hyper-V Remote Management Configuration Utility from the link
    http://code.msdn.microsoft.com/HVRemote, if so, you can refer to the following link.
    Configure Hyper-V Remote Management in seconds
    http://blogs.technet.com/jhoward/archive/2008/11/14/configure-hyper-v-remote-management-in-seconds.aspx
    By the way, if you want to perform the further research about Hyper-V Remote Management Configuration Utility, it is recommend that you to get further
    support in the corresponding community so that you can get the most qualified pool of respondents. Thanks for your understanding.
    For your convenience, I have list the related link as followed.
    Discussions for Hyper-V Remote Management Configuration Utility
    http://code.msdn.microsoft.com/HVRemote/Thread/List.aspx
    Best Regards,
    Vincent Hu

  • How do I copy an art object from one document to another using illustrator API(C  )

    Hi, I'm trying to copy text and graphic elements from one document into another, does anybody has an idea how to do it using Illustrator SDK(C++)?
    Thanks in advance.

    If you call AIArtSuite::ReorderArt() giving the layer group handle from the target document and using art from the source document, it will move art between documents. That said, there are all sorts of caveats that come along with that -- some things move over automatically (graphic styles, symbols) while others cause problems. E.g. copying art that contains a swatch can cause a crash when you shut down the source document because it may keep the style reference to the swatch in the source document -- which goes away when the document is closed. Gradients in particular are a problem I believe. Straight up colours are (I think) fine. I've had to write a lot of workarounds for various headaches caused by moving art between documents.
    Bottom line: its very doable, but there are a lot of edge cases. This was clearly not an intended use of the SDK, though it is possible.

  • Adding Lines to a Sales Order

    Hello !
    I'm using the following code (pretty much) to add items to existing sales orders :
    Dim oOrder As SAPbobsCOM.Documents
    oOrder = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oOrders)
    oOrder.GetByKey(id)
    oOrder.Lines.Add()
    oOrder.Lines.ItemCode = newItemCode
    oOrder.Lines.Quantity = newQuantity
    oOrder.Lines.UserFields.Fields.Item("U_S_Desc").Value = newItemDesc
    lretcode = oOrder.Update
    This works fine for most nearly all of the orders that are processed, however for some of the orders I get the error : No matching Records Found (ODBC -2028).
    I know the record I'm looking for exists, and if Open up the order and add the data manually it works, but something just seems to be stopping the code from doing it.
    I think it might be something to do with the Order's date, but exactly what I don't know.
    I was wondering if anyone's come across something like this before, of if there's an obvious reason why it wouldn't write ?

    Hi,
    Just some suggestions, if you haven't already considered:
    - Before adding new data you should check if the order really exists, like
    if (oOrder.GetByKey(id)) then
    oOrder.Update
    end if
    - The id you search have to be the DocEntry, not the DocNum.
    - The order can't be closed, otherwise yoy can't update.
    Hope this helps,
    Ian

Maybe you are looking for