diff options
-rw-r--r-- | mesh_tiny_cad/CCEN.py | 16 | ||||
-rw-r--r-- | mesh_tiny_cad/CFG.py | 4 | ||||
-rw-r--r-- | mesh_tiny_cad/E2F.py | 6 | ||||
-rw-r--r-- | mesh_tiny_cad/README.md | 92 | ||||
-rw-r--r-- | mesh_tiny_cad/VTX.py | 4 | ||||
-rw-r--r-- | mesh_tiny_cad/XALL.py | 2 | ||||
-rw-r--r-- | mesh_tiny_cad/__init__.py | 8 |
7 files changed, 112 insertions, 20 deletions
diff --git a/mesh_tiny_cad/CCEN.py b/mesh_tiny_cad/CCEN.py index ef2b5eae..48e484a6 100644 --- a/mesh_tiny_cad/CCEN.py +++ b/mesh_tiny_cad/CCEN.py @@ -44,7 +44,7 @@ def generate_bmesh_repr(p1, v1, axis, num_verts): for i in range(num_verts + 1): theta = gamma * i mat_rot = mathutils.Matrix.Rotation(theta, 4, axis) - local_point = (mat_rot * ((v1 - p1) * rescale)) + local_point = (mat_rot @ ((v1 - p1) * rescale)) chain.append(local_point + p1) obj = bpy.context.edit_object @@ -81,15 +81,15 @@ def generate_3PT(pts, obj, nv, mode=1): mat_rot = mathutils.Matrix.Rotation(math.radians(90.0), 4, axis) # triangle edges - v1_ = ((v1 - edge1_mid) * mat_rot) + edge1_mid - v2_ = ((v2 - edge1_mid) * mat_rot) + edge1_mid - v3_ = ((v3 - edge2_mid) * mat_rot) + edge2_mid - v4_ = ((v4 - edge2_mid) * mat_rot) + edge2_mid + v1_ = ((v1 - edge1_mid) @ mat_rot) + edge1_mid + v2_ = ((v2 - edge1_mid) @ mat_rot) + edge1_mid + v3_ = ((v3 - edge2_mid) @ mat_rot) + edge2_mid + v4_ = ((v4 - edge2_mid) @ mat_rot) + edge2_mid r = geometry.intersect_line_line(v1_, v2_, v3_, v4_) if r: p1, _ = r - cp = mw * p1 + cp = mw @ p1 bpy.context.scene.cursor_location = cp if mode == 0: @@ -133,7 +133,7 @@ class TCCallBackCCEN(bpy.types.Operator): class TCCircleCenter(bpy.types.Operator): - '''Recreate a Circle from 3 selected verts, move 3dcursor its center''' + '''Recreate a Circle from 3 selected verts, move 3dcursor to its center''' bl_idname = 'tinycad.circlecenter' bl_label = 'CCEN circle center from selected' @@ -147,7 +147,7 @@ class TCCircleCenter(bpy.types.Operator): col.prop(scn.tinycad_props, 'num_verts', text='num verts') row = col.row(align=True) row.prop(scn.tinycad_props, 'rescale', text='rescale') - row.operator('tinycad.reset_circlescale', text="", icon="LINK") + row.operator('tinycad.reset_circlescale', text="", icon="PIVOT_CURSOR") @classmethod def poll(cls, context): diff --git a/mesh_tiny_cad/CFG.py b/mesh_tiny_cad/CFG.py index 55e0ff9f..9eb02a29 100644 --- a/mesh_tiny_cad/CFG.py +++ b/mesh_tiny_cad/CFG.py @@ -28,10 +28,10 @@ icon_collection = {} class TinyCADProperties(bpy.types.PropertyGroup): - num_verts = bpy.props.IntProperty( + num_verts: bpy.props.IntProperty( min=3, max=60, default=12) - rescale = bpy.props.FloatProperty( + rescale: bpy.props.FloatProperty( default=1.0, precision=4, min=0.0001) diff --git a/mesh_tiny_cad/E2F.py b/mesh_tiny_cad/E2F.py index 70b51298..25f17e9f 100644 --- a/mesh_tiny_cad/E2F.py +++ b/mesh_tiny_cad/E2F.py @@ -29,9 +29,9 @@ def failure_message(self): def failure_message_on_plane(self): msg2 = """\ -Edge2Face expects the edge to intersect at one point on the plane of the selected face. You're -seeing this warning because mathutils.geometry.intersect_line_plane is being called on an edge/face -combination that has no clear intersection point ( both points of the edge either touch the same +Edge2Face expects the edge to intersect at one point on the plane of the selected face. You're +seeing this warning because mathutils.geometry.intersect_line_plane is being called on an edge/face +combination that has no clear intersection point ( both points of the edge either touch the same plane as the face or they lie in a plane that is offset along the face's normal )""" lines = msg2.split('\n') for line in lines: diff --git a/mesh_tiny_cad/README.md b/mesh_tiny_cad/README.md new file mode 100644 index 00000000..69fe9ab6 --- /dev/null +++ b/mesh_tiny_cad/README.md @@ -0,0 +1,92 @@ +Blender CAD utils (for Blender 2.80+) +===================================== + +A tiny subset of unmissable CAD functions for Blender 3d. +Addon [page on blender.org/wiki](http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Modeling/mesh_tinyCAD) (Which has most of the same info] + +### Installation + +The add-on is currently included in standard installations on Blender 2.78 onwards. Enable it by doing a search in `User Preferences > Add-ons > and type 'tiny' into the search field`. Enable 'Mesh: tinyCAD Mesh tools'. + +In Blender 2.80 distributions you might encounter an older version of this add-on, if it fails to load/run/enable, please install it again from this github repository. + +__________________ + + +### OK, what's this all about? + +Dedicated CAD software speeds up drafting significantly with functions like: `Extend`, `Trim`, `Intersect`, `Fillet /w radius` and `Offset /w distance`. At the moment of this writing many of these functions aren't included by default in regular distributions on Blender.org, so i've coded scripts to perform a few of the main features that I missed most. + +My scripts have shortnames: `VTX, V2X, XALL, BIX, CCEN` and are described separately in sections below. `Fillet` and `Offset` are written by zmj100 and can be found [here](http://blenderartists.org/forum/showthread.php?179375). + + +Since I started this repository: Vertex Fillet / Bevel was added to master. So no more need for a separate addon. (Ctrl+Shift+b) + +### VTX + +The VTX script has lived in contrib distributions of Blender since 2010, with relatively minor changes. The feedback from BlenderArtists has been [overwhelmingly positive](http://blenderartists.org/forum/showthread.php?204836-CAD-Addon-Edge-Tools-(blender-2-6x)). I'm not going to claim it's bug free, but finding any showstopping issues has proven difficult. It now performs V, T or X selection automatically. + +Expect full freedom of orientation, but stuff must really intersect within error margins (`1.5E-6` = tolerance). These kinds of functions are handy for drawing construction lines and fixing up geometry. + + - V : extending two edges towards their _calculated_ intersection point. + ![V](http://i.imgur.com/zBSciFf.png) + + - T : extending the path of one edge towards another edge. + ![T](http://i.imgur.com/CDH5oHm.png) + + - X : two edges intersect, their intersection gets a weld vertex. You now have 4 edges and 5 vertices. + ![X](http://i.imgur.com/kqtX9OE.png) + + +- Select two edges +- hit `Spacebar` and type `vtx` ..select `autoVTX` +- Bam. the rest is taken care of. + + +### X ALL + +Intersect all, it programatically goes through all selected edges and slices them all using any found intersections, then welds them. + + - XALL is fast! + ![Imgur](http://i.imgur.com/1I7totI.gif) + - Select as many edges as you want to intersect. + - hit `spacebar` and type `xa` ..select `XALL intersect all edges` + +### V2X (Vertex to Intersection) + +This might be a niche accessory, but sometimes all you want is a vertex positioned on the intersection of two edges. Nothing fancy. + +### BIX (generate Bisector) + +Creates a single edge which is the bisect of two edges. +![Imgur](http://i.imgur.com/uzyv1Mv.gif) + +### CCEN (Circle Centers) + +Given either + +- two adjacent edges on the circumference of an incomplete circle +- or three vertices (not required to be adjacent) + +this operator will places the 3d cursor at original center of that circle. + +![imgur](https://cloud.githubusercontent.com/assets/619340/5595657/2786f984-9279-11e4-9dff-9db5d5a52a52.gif) + +updated version may become a modal operator to generate a full set of circle vertices, with variable vertex count. + +![imgur demo](https://cloud.githubusercontent.com/assets/619340/5602194/ce613c96-933d-11e4-9879-d2cfc686cb69.gif) + +### E2F (Extend Edge to Selected Face, Edge 2 Face) + +Select a single Edge and a single Polygon (ngon, tri, quad) within the same Object. Execute `W > TinyCAD > E2F` + +![image](https://cloud.githubusercontent.com/assets/619340/12091278/2884820e-b2f6-11e5-9f1b-37ebfdf10cfc.png) + + +### Why on github? + +The issue tracker, use it. + +- Let me know if these things are broken in new releases. Why? I don't update Blender as often as some so am oblivious to the slow evolution. +- If you can make a valid argument for extra functionality and it seems like something I might use or be able to implement for fun, it's going to happen. +- I'm always open to pull requests (just don't expect instant approval of something massive, we can talk..you can use your gift of persuasion and sharp objectivism) diff --git a/mesh_tiny_cad/VTX.py b/mesh_tiny_cad/VTX.py index c06184e8..531b99b6 100644 --- a/mesh_tiny_cad/VTX.py +++ b/mesh_tiny_cad/VTX.py @@ -69,7 +69,7 @@ def add_edges(bm, pt, idxs, fdp): def remove_earmarked_edges(bm, earmarked): edges_select = [e for e in bm.edges if e.index in earmarked] - bmesh.ops.delete(bm, geom=edges_select, context=2) + bmesh.ops.delete(bm, geom=edges_select, context='EDGES') def perform_vtx(bm, pt, edges, pts, vertex_indices): @@ -122,7 +122,7 @@ def do_vtx_if_appropriate(bm, edges): if not coplanar: return {'NON_PLANAR_EDGES'} - # point must lie on an edge or the virtual extension of an edge + # point must lie on an edge or the virtual extention of an edge bm = perform_vtx(bm, point, edges, (p1, p2, p3, p4), vertex_indices) return bm diff --git a/mesh_tiny_cad/XALL.py b/mesh_tiny_cad/XALL.py index fc0ed76e..a240c56f 100644 --- a/mesh_tiny_cad/XALL.py +++ b/mesh_tiny_cad/XALL.py @@ -125,7 +125,7 @@ def update_mesh(bm, d): bm.normal_update() collect([a, b]) - bmesh.ops.delete(bm, geom=[edge for edge in bm.edges if edge.select], context=2) # 2 = edges + bmesh.ops.delete(bm, geom=[edge for edge in bm.edges if edge.select], context='EDGES') #bpy.ops.mesh.remove_doubles( # threshold=cm.CAD_prefs.VTX_DOUBLES_THRSHLD, diff --git a/mesh_tiny_cad/__init__.py b/mesh_tiny_cad/__init__.py index d614ddcd..8905baa8 100644 --- a/mesh_tiny_cad/__init__.py +++ b/mesh_tiny_cad/__init__.py @@ -22,8 +22,8 @@ bl_info = { "name": "tinyCAD Mesh tools", "author": "zeffii (aka Dealga McArdle)", - "version": (1, 3, 1), - "blender": (2, 7, 7), + "version": (1, 3, 2), + "blender": (2, 80, 0), "category": "Mesh", "location": "View3D > EditMode > (w) Specials", "wiki_url": "http://zeffii.github.io/mesh_tiny_cad/", @@ -59,7 +59,7 @@ def menu_func(self, context): self.layout.menu("VIEW3D_MT_edit_mesh_tinycad") self.layout.separator() -classes = ( +classes = [ TinyCADProperties, VIEW3D_MT_edit_mesh_tinycad, VTX.TCAutoVTX, XALL.TCIntersectAllEdges, @@ -67,7 +67,7 @@ classes = ( E2F.TCEdgeToFace, CCEN.TCCallBackCCEN, CCEN.TCCircleCenter, BIX.TCLineOnBisection -) +] def register(): register_icons() |