• Login
sketchucation logo sketchucation
  • Login
ℹ️ GoFundMe | Our friend Gus Robatto needs some help in a challenging time Learn More

Using add_3d_text

Scheduled Pinned Locked Moved Developers' Forum
15 Posts 4 Posters 1.7k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    Greg
    last edited by 24 Feb 2008, 23:09

    Hello,

    I'm using the command add_3d_text to add text to objects. How do you
    change orientation of the text so that it looks like it's on the
    surface of a plane? For example, I'd like the text to display at the
    top and front of a rectangular cube.

    Here is a code snippet:


    top plane

    pt1 = Geom::Point3d.new(x,y,z+h)
    pt2 = Geom::Point3d.new(x+w,y,z+h)
    pt3 = Geom::Point3d.new(x+w,y+l,z+h)
    pt4 = Geom::Point3d.new(x,y+l,z+h)
    edges[0] = entities.add_line(pt1, pt2)
    edges[1] = entities.add_line(pt2, pt3)
    edges[2] = entities.add_line(pt3, pt4)
    edges[3] = entities.add_line(pt4, pt1)
    face = entities.add_face edges
    face.material = m

    t=Geom::Transformation.new(pt1)
    grp=entities.add_group(); grpEnts=grp.entities
    grpEnts.add_3d_text("hey mon", 1, "Arial", false, false, 4.inch,
    1.mm , 0, false, 0)
    grp.move!(t)

    front plane

    pt1 = Geom::Point3d.new(x,y,z)
    pt2 = Geom::Point3d.new(x+w,y,z)
    pt3 = Geom::Point3d.new(x+w,y,z+h)
    pt4 = Geom::Point3d.new(x,y,z+h)
    edges[0] = entities.add_line(pt1, pt2)
    edges[1] = entities.add_line(pt2, pt3)
    edges[2] = entities.add_line(pt3, pt4)
    edges[3] = entities.add_line(pt4, pt1)
    face = entities.add_face edges
    face.material = m

    t=Geom::Transformation.new(pt4)
    grp=entities.add_group(); grpEnts=grp.entities
    grpEnts.add_3d_text("hey mon", 1, "Arial", false, false, 4.inch,
    1.mm , 0, false, 0)
    grp.move!(t)


    Thank you.

    Greg

    1 Reply Last reply Reply Quote 0
    • T Offline
      todd burch
      last edited by 25 Feb 2008, 02:30

      Mods, please move this to the Ruby Forum.

      1 Reply Last reply Reply Quote 0
      • G Offline
        Greg
        last edited by 25 Feb 2008, 03:10

        Done.

        1 Reply Last reply Reply Quote 0
        • G Offline
          Gaieus
          last edited by 25 Feb 2008, 05:17

          Yeah, this is definitely ruby stuff.

          BTW welcome, Greg, but what do you mean by "done"?

          Gai...

          1 Reply Last reply Reply Quote 0
          • G Offline
            Greg
            last edited by 25 Feb 2008, 06:05

            Done means I moved the posting to this forum, Ruby Discussions, from the 'Newbie' forum. Actually, I copied this from the 'Newbie' forum to this forum, 'Ruby Discussions'. I don't know how to move a posting.

            Is there a more appropriate forum then 'Ruby Discussions'?

            1 Reply Last reply Reply Quote 0
            • G Offline
              Greg
              last edited by 25 Feb 2008, 06:25

              Just a follow-up to clarify my question: How do I set the (x,y,z) coordinates of the text to control it's orientation?

              I am programmatically assigning 3dtext as pallet labels to the front and top of pallets in a virtual warehouse created from ruby code generated from a c# application accessing inventory data from a SQL database, 2 to 3 thousand pallets.

              Right now, the text just lays flat on an x,y plane. That works for printing text on the top of pallets, but I can't orient the text upright so that it properly prints on the front of pallets.

              I hope this makes sense.

              Thank you.

              Greg

              1 Reply Last reply Reply Quote 0
              • G Offline
                Gaieus
                last edited by 25 Feb 2008, 11:37

                @greg said:

                Done means I moved the posting to this forum, Ruby Discussions, from the 'Newbie' forum. Actually, I copied this from the 'Newbie' forum to this forum, 'Ruby Discussions'. I don't know how to move a posting.

                Ok, I see. I also moved your topic nd then found that you copied it here so I merged the two.

                @unknownuser said:

                Is there a more appropriate forum then 'Ruby Discussions'?

                No, this is the finest forum for this (in the World? 😉 )

                Gai...

                1 Reply Last reply Reply Quote 0
                • TIGT Offline
                  TIG Moderator
                  last edited by 25 Feb 2008, 11:39

                  See my TextTag script that does this. The 3d-text is grouped, it appears at 0,0,0, it's then transformed to where you want it, snapping to faces etc as desired...

                  301 Moved Permanently

                  favicon

                  (www.sketchucation.com)

                  TIG

                  1 Reply Last reply Reply Quote 0
                  • G Offline
                    Greg
                    last edited by 25 Feb 2008, 19:25

                    Thanks TIG,

                    I actually used your code as a guide to get as far as you see here. But I don't see how to programmatically snap the 3dtext to the front and side of a cubed-shaped object (pallet) without user intervention. I need the application to snap the text to the pallet automatically.

                    Is this the section of your code I should reference for the 'snapto' functionality?

                    %(#FF0040)[compo.behavior.always_face_camera=true if @cfacing=="Yes" ### faces camera
                    if @asnap=="Yes"
                    compo.behavior.is2d=true
                    compo.behavior.snapto=0 ### snaps to Any surface
                    end#if

                    tag=model.place_component(compo)]

                    If so, I can't figure out the relationship between your compo (components) and my grpEnts (entities).

                    Greg

                    1 Reply Last reply Reply Quote 0
                    • TIGT Offline
                      TIG Moderator
                      last edited by 25 Feb 2008, 20:00

                      After you have auto-placed the grp containing the 3d-text you need to rotate it in Z, then so it's vertical. You need to make a "rotation transformation"...

                      transformation=Geom::Transformation.rotation(anchor_point,vector_axis,angle_radians)

                      e.g. for a right-angle about Z try -

                      rotate=Geom::Transformation.rotation(pointN.[0,0,1],90.degrees)

                      e.g. for a right-angle about Y try -

                      rotate=Geom::Transformation.rotation(pointN.[0,1,0],90.degrees)

                      etc

                      Mess around to find which you need for which group...

                      TIG

                      1 Reply Last reply Reply Quote 0
                      • G Offline
                        Greg
                        last edited by 25 Feb 2008, 20:42

                        Thanks TIG, I'll do this.

                        Greg

                        1 Reply Last reply Reply Quote 0
                        • G Offline
                          Greg
                          last edited by 27 Feb 2008, 06:33

                          TIG,

                          I have tried variations of the code but I can't get it to work.

                          %(#FF0040)[txtPt = Geom::Point3d.new(x+w,y,z+(h/2))
                          t=Geom::Transformation.new(txtPt)
                          grp=entities.add_group(); grpEnts=grp.entities
                          grpEnts.add_3d_text("hey mon", 1, "Verdana", false, false, 4.inch, 1.mm , 0, false, 0)
                          grp.move!(t)

                          grp = Geom::Transformation.rotation(txtPt,[0,0,1],90.degrees) # these are variations
                          txtPt = Geom::Transformation.rotation(txtPt,[0,0,1],90.degrees) # these are variations
                          t = Geom::Transformation.rotation(txtPt,[0,0,1],90.degrees) # these are variations
                          rotate = Geom::Transformation.rotation(grp,[0,0,1],90.degrees) # these are variations]

                          I don't understand the relationship of 'Geom::Transformation.rotation(point,vector,angle)' to grpEnts.add_3d_text.

                          What am I overlooking?

                          Thank you.

                          Greg

                          1 Reply Last reply Reply Quote 0
                          • G Offline
                            Greg
                            last edited by 27 Feb 2008, 07:04

                            TIG,

                            Thanks for your help. The following code 'status = grpEnts.transform_entities t, grpEnts.collect' rotates the 3D-Text:

                            txtPt = Geom::Point3d.new(x+w,y,z+(h/2))
                            t=Geom::Transformation.new(txtPt)
                            grp=entities.add_group(); grpEnts=grp.entities
                            grpEnts.add_3d_text("hey mon", 1, "Verdana", false, false, 4.inch, 1.mm , 0, false, 0)
                            grp.move!(t)

                            t = Geom::Transformation.rotation(txtPt,[1,0,0],90.degrees)
                            status = grpEnts.transform_entities t, grpEnts.collect

                            This was copied from ldraw.rb.

                            Greg

                            1 Reply Last reply Reply Quote 0
                            • TIGT Offline
                              TIG Moderator
                              last edited by 27 Feb 2008, 08:57

                              I'd expect this to work for the 't' rotation - note that I prefer to keep things inside parentheses () - although it will work without (usually):

                              grpEnts.transform_entities(t,grpEnts)

                              or for the group rather than it's entities

                              grp.transform!(t)

                              (it's similar to grp.move!(t) ...)

                              Now you just have to copy this group of 3d-text (grp2=grp.copy!) and move! it around the corner and rotate transform! it to suit.

                              In SketchUp Ruby here are often several ways of doing the same complex thing - like transformations -, BUT sometimes there's NOT one way of doing some simple thing !!! For example finding the active section-plane or finding if sections-cuts are currently being shown in the view (something I'm looking at currently) - even the SDK doesn't access these shortcomings in the API...

                              Glad you fixed it.

                              TIG

                              1 Reply Last reply Reply Quote 0
                              • G Offline
                                Greg
                                last edited by 27 Feb 2008, 16:50

                                Thanks TIG,

                                I'll apply your suggestions and evaluate the results.

                                Greg

                                1 Reply Last reply Reply Quote 0
                                • 1 / 1
                                1 / 1
                                • First post
                                  1/15
                                  Last post
                                Buy SketchPlus
                                Buy SUbD
                                Buy WrapR
                                Buy eBook
                                Buy Modelur
                                Buy Vertex Tools
                                Buy SketchCuisine
                                Buy FormFonts

                                Advertisement