Skip to content

Conversation

@adam-urbanczyk
Copy link
Member

@adam-urbanczyk adam-urbanczyk commented Feb 21, 2019

This will resolve #48

afbeelding

@codecov
Copy link

codecov bot commented Feb 21, 2019

Codecov Report

Merging #106 into master will increase coverage by 0.04%.
The diff coverage is 100%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #106      +/-   ##
==========================================
+ Coverage   94.21%   94.26%   +0.04%     
==========================================
  Files          19       19              
  Lines        3889     3922      +33     
==========================================
+ Hits         3664     3697      +33     
  Misses        225      225
Impacted Files Coverage Δ
cadquery/cq.py 93.22% <100%> (+0.14%) ⬆️
cadquery/occ_impl/shapes.py 86.61% <100%> (+0.19%) ⬆️
tests/TestCadQuery.py 98.75% <100%> (+0.01%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 55a6a87...26a74c6. Read the comment docs.

@adam-urbanczyk
Copy link
Member Author

adam-urbanczyk commented Feb 21, 2019

@jmwright @dcowden I think it is ready to be merged. Please take a look at the API:

import cadquery as cq
result = cq.Workplane("XY" ).box(4, 4, 0.5).edges("|Z").fillet(0.125).faces('>Z')\
   .workplane().text('CQ 2.0',0.5,-.05,cut=True,font='Consolas')

afbeelding

@dcowden
Copy link
Member

dcowden commented Feb 21, 2019

@adam-urbanczyk you are on FIRE! Its great to see this actually happen.

I love the API as you have it, and id recommend merging this.

However, i have some insight to share for future work. TL;DR, you might consider implementing the output on a per-character basis, even though as the API is now, you do not have to. More about that:...

It just so happens that i developed a text plugin for onshape. As a part of that, i learned a lot about what users want from a CAD text package.

There's a list of features that are necessary to be 'perfect' at least based on the user base I was working with:

  • bold/italic
  • flip/mirror text top/bottom and left/right
  • automatically fit the text to a base curve. this coudl be a straight line, but is commonly a curve. This becomes tricker than it sounds, because you need to compute the width of the font, and adjust the height to fit. This can be hard because most fonts dont make it easy to do that.
  • justify the text relative to the top, bottom, or middle of the guide curve
  • kerning. This was a big deal. Kerning is the ability to slightly change the spacing between each letter, to account for the weirdness of the fonts, combined with following a guide curve
  • apply on curved surfaces. This gets complex because you need to offset the base surface, and then use that offset to limit to the tops of each letter. Its also necessary to extrude each letter via a separate surface normal, if the surface is curved.

I mention all this because when faced with all of those requirements, even though the user simply types in the text they want, I actually generated the output one character at a time,because you have to when you consider the above requirements.

You can see some examples here: http://store.parametricparts.com/store/p10/CURVED-TEXT-2.0.html

have a look specifically at the input dialog, which shows all the options I ended up with.

@adam-urbanczyk
Copy link
Member Author

@dcowden cool plugin! On OCC level it is possible to render on per-character basis. I'll leave the features you mentioned for another PR though. I think implementing everything would take quite some effort.

@adam-urbanczyk
Copy link
Member Author

Alright, thanks for all your feedback. Merging.

@adam-urbanczyk adam-urbanczyk merged commit 158ba41 into master Feb 22, 2019
@adam-urbanczyk adam-urbanczyk deleted the adam-urbanczyk-text-rendering branch June 15, 2019 16:53
adam-urbanczyk added a commit that referenced this pull request Apr 23, 2020
adam-urbanczyk added a commit that referenced this pull request Apr 24, 2020
* Extrude with both=True fix (#321)

Extrude with both=True will result in a single solid.

* combineWithBase fix
* Allow to self-fuse a compound
* Formatting fix
* Test if extrude with both=True fuses the solids

* Fixed version number that was missed during RC2 release.

* Prepare for the 2.0 release

* Add reference to #106

* Typo fix

* Added info about breaking changes

* Fixed a typo

Co-authored-by: Jeremy Wright <wrightjmf@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Text Generation

4 participants