New answers tagged

-1

There is no security, at least not built in.


2

Texture context when adding a panel to the properties area we set the context as signified by the icon on LHS. This is set with bl_context. To get a panel in the questions "Red Area" bl_context = "texture" all the examples given in question are in object context. Press the Object tab. (cube) How to enable or disable panels with the ...


0

A simple way is to just use Clear and Keep Transformation (Alt P) on the child to visualize the final rotation (global/world). As soon as you check the value, just press Ctrl Z to UNDO the Clear Parent. The numbers of Top (child object) do not change because they exhibit rotation without the influence of the parent. To update the values, make sure the child ...


0

You can set this data inside custom properties: https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html If you do it the python way as described below, it's just adding some property to the object. If it's something blender is not familiar with, the Ui will display it a custom property to you.


1

Using the add vert operator from add mesh extras. In addition to @brockmann's excellent answer, can use the existing add vert operator that comes with Add Mesh Extras. The new vert is added at the scene cursor location. Putting three things together, Enable Add Mesh Extras addon if it is not already. Disable if enabled by addon (possibly requires better ...


2

Have a look into the Operator Mesh Add template that comes with Blender. First of all, you would have to figure out how to create a mesh which is nicely explained in create mesh then add vertices to it in python, then declare an Operator ideally along with a FloatVectorProperty for the actual location and add that code from before to its execute method. The ...


2

You can use bpy.ops.wm.context_toggle(data_path) This will toggle N or 'T' panel of whatever area operator was called. import bpy class SimpleOperator(bpy.types.Operator): """Tooltip""" bl_idname = "object.simple_operator" bl_label = "Simple Object Operator" @classmethod def poll(cls, ...


3

When installing an add-on as a .py file, Blender automatically looks for and executes the register method if there is one. Also, when disabling the add-on, it will automatically execute the unregister method. But since you are already calling register in the body of the file, it is executed once when parsing the .py file, and once again by Blender when ...


1

I had to go through several other issues to pin this down, including another question on stack Overflow, where I was not getting much help. I'll include what I can here. That'll be more than most people want to read, but if you have this problem, skim it because you might find helpful stuff in here. The bottom line is that I was setting PYTHONPATH in ....


3

Update method on pointer property Not sure if this is a bit of an XY Problem In as much as agree that invoking the filebrowser is a way to select the filepath before executing the operator it is generally displaying other options (often for import export) while it runs modally. To simply select a filepath before running could achieve same with def foo(self,...


1

Easily checked. The type of region available to each of the area types is probably in the docs somewhere, however it is easily checked using the python console. With a 3d view area as the variable area (C.screens.areas[3] in this example) >>> area bpy.data.screens['Scripting.001']...Area >>> area.type 'VIEW_3D' >>> for region in ...


3

From the camera view frame. bpy: How do you find the corners of a camera frustum? A camera points in the -Z direction. For a perspective camera can find the vectors of the origin to the frustum and if and where they intersect with the XY plane. Test script. Have kept it simple. Uses the scene camera, finds the frustum, adds a cube on XY plane given image (0,...


4

Bmesh script. With a single boundary edge selected in edit mode, the LHS of question images can be achieved calling bpy.ops.mesh.loop_multi_select() directly from the python console. >>> bpy.ops.mesh.loop_multi_select( loop_multi_select() bpy.ops.mesh.loop_multi_select(ring=False) Select a loop of connected edges by connection type >>> bpy....


0

I found a solution for myself. However, it regrettably does use bpy.ops. If anyone has a solution which does not use bpy.ops I'd gladly take a look at that answer. Here is the blend file for anyone who wants to take a look.


1

Numpy Version with aspect ratio This question came up wrt How to rotate UV and preserve the correct aspect ratio? Thought I would also post here. Using numpy and foreach_get and foreach_set will be noticably quicker for large meshes. It is quite likely numpy didn't ship with blender when question was asked / answered. Deals with aspect ratio. Code. import ...


2

Some alternatives. I am not sure what you ask is possible without some serious dicking around. If these are bundled addons can simply enable and disable them as required in your code https://blender.stackexchange.com/a/58208/15543 In that you can enable an addon when required eg https://blender.stackexchange.com/a/189435/15543 Use a different Preferences ...


0

Im not entirely sure on what youre trying to do but I'm assuming you want to import a 3d file and move it to a specific location and rotate it? I think your problem may be: MeshObject = ob_for_convert.to_mesh() What I usually use is: block = bpy.context.selected_objects[0] Then we can move the location and rotation: block.location = (1,1,1) block....


3

Here is perhaps a solution, using the closest_point_on_mesh operation. I just enhanced to test the extreme vertices (bound_box) on the object being placed to be sure that it is placed completely within the floor bounds. I tested with on odd shaped floor (not just a rectangle plane). Note that this solution assumes that the floor has many vertices (...


0

Maybe for objects in door.children since you're parenting them? Yeah it could be cool to use magic method looping over children


2

My suggestion is don't use it. Can see reason for confusion, have personally never used the scale value in the operator, (fortunately because yeah it's bloody confusing) Speculate there could be some legacy nature about it. Crunch any operator into the python console auto complete Tab will show defaults of an operator >>> bpy.ops.mesh.pri<Tab&...


2

Look at the mesh coordinates. The unmodified dimensions of the mesh can be obtained from the mesh. import bpy import numpy as np ob = bpy.context.object me = ob.data coords = np.empty(3 * len(me.vertices)) me.vertices.foreach_get("co", coords) x, y, z = coords.reshape((-1, 3)).T mesh_dim = ( x.max() - x.min(), y.max() - y.min(), ...


4

Bmesh script. Here is but one of may ways could approach this. Rib n Bridge Make growth_segments cirlcles all with segments segments. Each has a radius in range (min_radius, max_radius) and the the next is in the range of (min_growth, max_growth) above. A translation matrix, using the accumulative height is used to place each successive circle. Each ...


0

I now understand I've been overthinking this while the solution is simply to set spacebar for panning both in 2D view and 3D view. For some reason I thought in the 3D view/pan view window I needed to set mouse movement, then spacebar as a modifier and then in the view3D Move Modal section in the bottom also set confirm: spacebar: release to make it work the ...


0

I solved it by using: obj.modifiers['Fluid'].effector_settings.keyframe_insert(data_path="use_effector",frame=5)


5

Via mathutils.Matrix.Rotation constructor. Given an axis angle rotation provides just that, can make a matrix from the components. Matrix.Rotation(angle, size, axis) >>> q Quaternion((0.44383183121681213, -0.3263395428657532, 0.8345092535018921, 0.010497181676328182)) >>> axis, angle = q.to_axis_angle() >>> R = Matrix.Rotation(...


0

I managed to solve the issue and get a (usually) reliable effect. I ended up moving the parts of the driver that handled assigning previous locations and calculating acceleration into a frame change handler, similar to how this answer does. I'll attach the example blend file to the end of this answer. The following script is the main component of this effect:...


1

´┐╝Shamelessly modified from: Automatically change the properties of multiple materials import bpy for mat in bpy.data.materials: if not mat.use_nodes: mat.metallic = 1 continue for n in mat.node_tree.nodes: if n.type == 'BSDF_PRINCIPLED': n.inputs["Metallic"].default_value = 1


2

Look for Links. Requested clarification, am making same assumption that you're after adding your group node between BSDF and Material Output. Similarly to Look for Links method from this answer. The concept is to look for a certain link in all materials and, if it exists poke a group node inbetween. Edit To reflect your Node Group Name of Node Group (...


1

Assuming you want to add your node group between Material Output node and Principled BSDF node, here's the script. Also if you want to learn more about nodes with python look here : https://blender.stackexchange.com/a/23446/115433 import bpy #group = bpy.data.node_groups['your_node_group_name'] group = bpy.data.node_groups['1CameraBasedTransparency'] #get ...


1

Ditch global lists and use selection After calling the import operator any newly imported objects are selected and make up the context.selected_objects list. I don't have any multi-object stl files to test theory against, but will go thru the motions with a single object file. With no current selection. >>> C.selected_objects [] Import stl >>&...


3

Is it as simple as it could be?. A TL;DR comment turned into answer: Doesn't crash for me... but does throw errors. Some of the issues as I see them. Sure it's a simple little addon, but.. appears to be some added and IMO unnecessary complexity added too. (bling). Is there really any need to type hint the usual suspects and familiar arguments of self, ...


2

Select your object, in a shader editor window create an image texture node, create a new UV grid image, mantaine the node unconnected and selected. In the 3d window you can now select the solid viewport shading, in texture mode, to show your UV Grid. By selecting the material texture nodes you can display the UV grid or the material images.


2

At firts, thanks for the detailed answer, but the problem wasn't there. The scipt I've provided only creates 1 handler and it's fine. In my original script I've created a reset function too, that clears the app handlers if it's restarted or if it's already added. But I found the problem! --->IT WAS THE MOTION BLUR. The script was called multiple times as ...


3

Clean the handlers. with no handlers appended at all, running question script will print the frame once. There is only one function assigned >>> for f in bpy.app.handlers.frame_change_pre: ... f.__name__, f.__module__ ... ('tester', '__main__') running question script three more times >>> for f in bpy.app.handlers.frame_change_pre:...


2

With V2.92 and the new Attribute node, you can achieve it with a single driver in the material. First, you need to add a custom property to all your objects. Then, compare it with the current frame. Choose a different offset for each object to make them appear in sequence. Here's the code : import bpy new_mat = bpy.data.materials.get('Fade In Material') if ...


2

Return a status set from invoke. AFAICT the issue here is as simple runtime error, not returning a valid status set from an operators invoke method. No return, returns None. Pretty obvious from error message printed to system console on testing a keypress. evt type RIGHT_ARROW Python: RuntimeError: class KITFOX_OT_grid_rescale, function invoke: ...


3

It's a panels poll method The panels are defined and sitting there polling away, waiting to "show". The poll classmethod of a panel returns true only when the required context (or otherwise related) conditions are met Poll method for custom panel Hide Panel With Python ("A Duality Duplicate") In example displayed in question : (...


0

For some reason using cd to blender's python bin folder and then executed command was not working, but ... path to blender's bin folder with python3.7m + command executed at once worked just fine. Do I have a "pip"? I don't know if 2.80 was distributed without a pip (as mentioned above), but 2.79 and also 2.83 Mac build containes a pip ... ...


-1

You don't actually need any code to make the edges curved or smooth. Go to edit mode and select all the edges of the cube. Then select bevel, which is this option And then you will see a yellow line with a circle on top of it. Pull it to the extent you want. You may see it becoming flat. But there's an easy solution. At the bottom left, there would be a ...


3

Bmesh.from_object Doh, @scurest Answered while I was putting the bins out, may as well post import bpy import bmesh context = bpy.context ob = context.object dg = context.evaluated_depsgraph_get() bm = bmesh.new() bm.from_object(ob, dg) print("Evaluated bmesh object", ob.name, "mesh:", ob.data.name) tris = bm.calc_loop_triangles() print(...


4

Each loop (= corner of a poly) has its own vertex color. You can print the vertex color for each corner with # Get the first Vertex Color layer; can also use its name (eg. "Col") layer = bm.loops.layers.color[0] for face in bm.faces: for loop in face.loops: color = loop[layer] # gives a Vector((R, G, B, A)) print(color) Btw, ...


1

Adding bpy.context.scene.render.engine = 'CYCLES' Fixed this issue


1

Bmesh from object. See How do I get a mesh data-block with modifiers and shape keys applied in Blender 2.8? Can use the evaluated mesh and look at loop_triangles or with a bmesh and call the bmesh triangulate operator. In both cases no new data need be added to file. The two answers show how to get the evaluated mesh as either a bmesh or an evauated mesh. ...


2

Rotation Difference. Believe what you are looking for is rotation_difference ie the minimum rotation required to rotate from one quaternion to another Python console code Define a couple of angles using Eulers, >>> r1 = Euler((radians(30), radians(60), radians(45))) >>> r2 = Euler((radians(0), radians(60), radians(45))) As quaternions >&...


4

What i really need is bpy.Types.event, unfortunately, it is only accessible from an Operator invoke() or modal() so here's the trick _event = None class SCATTER5_OT_get_event(bpy.types.Operator): bl_idname = "scatter5.get_event" bl_label = "" def invoke(self, context, event): global _event _event = event ...


2

On the active index. _Clicking on an item updates the index and calls splash which calls bpy.ops.wm.show_panel(...) to display the newly active item. Hovering over the "Hello World" throws up a panel popover which uses context pointer set in the draw_item method. I'm looking for a way to display a popup window when user click on one of the items ...


1

Some tweaks. Took out the remove all objects, not a fan. Use object references. After using an operator to add the cube cube = context.object after creating the curve obj it is known by reference as obj, no need to look it up as "Path". When parenting via the operator, the selected objects are parented to the active. Have set the curve as active ...


1

Figured it out. This seems to work: def modal(self, context, event): for area in bpy.context.screen.areas: # iterate through areas in current screen if area.type == 'VIEW_3D': area.tag_redraw()


0

I haven't tested your code, but if everything else works, you will be fine after replacing location = obj.location with location = obj.location @ obj.matrix_world


2

TypeError: hsv_to_rgb() takes 3 positional arguments but 4 were given This error means the function expects 3 values, but you're giving it 4, so it throws an error. ValueError: bpy_struct: item.attr = val: sequences of dimension 0 should contain 4 items, not 3. This error tells you that the property expects a sequence of 4 items assigned to it, not 3. This ...


Top 50 recent answers are included