Más

¿Reemplazar el script activado por la acción por uno proporcionado a través del complemento QGIS?

¿Reemplazar el script activado por la acción por uno proporcionado a través del complemento QGIS?


En ArcView 3, todos los controles (opciones de menú, botones, herramientas) tenían scripts asociados que podían cambiarse simplemente proporcionando un script con el mismo nombre a través de una extensión (complemento). De esa manera, ahorró el diseño de un nuevo control y pudo mantener sus paneles ordenados mientras mejoraba y extendía la funcionalidad del programa.

Ahora me gustaría hacer lo mismo con QGIS: p. Ej. Preferiría preseleccionar el directorio predeterminado de la acción "agregar capa ogr" por la ruta de la primera capa activa en mi mapa.
Entonces, si es posible, me gustaría reemplazar o modificar el script mActionAddOgrLayer.triggered, siempre que mi complemento esté cargado.

Otra forma de lograr esto sería modificar la respuesta del sistema integrado a un cambio de la (s) capa (s) activa (s) cambiando la variable que por defecto guarda el directorio del último archivo agregado. Estoy seguro de que hay una señalización, pero no sé si las respuestas se pueden cambiar o agregar sin agregar controles de interfaz de usuario (acciones) adicionales.


Puede establecer el directorio base del cuadro de diálogo "Agregar capa vectorial", reflejando la ruta de la última capa activa, de esta manera:

import os from PyQt4.QtCore import QSettings def setOpenDir (layer): # Compruebe si la capa existe, tiene una ruta adecuada y es de tipo vector si layer y os.path.exists (layer.source ()) y layer.type ( ) == 0: layerPath = os.path.dirname (layer.source ()) QSettings (). SetValue ("/ UI / lastVectorFileFilterDir", layerPath) print "Ruta cambiada a", QSettings (). Value ("/ UI / lastVectorFileFilterDir "," ", type = str) ltv = iface.layerTreeView () ltv.currentLayerChanged.connect (setOpenDir)

Explicación:

Debe crear una función para establecer el directorio base del cuadro de diálogo "Agregar capa vectorial". Tal función (setOpenDir) obtendrá la capa actual, verifique si es una capa (podría ser Ninguna si hace clic en una capa de grupo), verifique si tiene una ruta adecuada (por ejemplo, las capas WFS no la tienen) y verifique si es una capa vectorial. Luego, establece la ruta de origen de la capa en la configuración adecuada de QGIS (/ UI / lastVectorFileFilterDir).

Finalmente, debe establecer una conexión para ejecutar la función cada vez que el usuario cambia la capa activa.

Usé QGIS 2.8 para probar el código en la consola QGIS Python. Por supuesto, puede incluirlo en su complemento (con pequeños ajustes) y desconectar la función una vez que se descargue el complemento.

Espero eso ayude.


Jquery-idle-timeout-plugin navegación de múltiples pestañas

He estado intentando integrar jquery-idle-timeout-plugin para mostrar la advertencia emergente de tiempo de espera de sesión cuando el usuario está inactivo durante un período de tiempo.

Todo funciona correctamente a excepción de la nueva pestaña del navegador. cuando me muevo a una nueva pestaña u otra pestaña en ese momento o tengo alguna publicación en ese momento, la sesión se activa y restablece el temporizador para esa pestaña en particular, pero no restablece el temporizador para otras pestañas o páginas.

por favor eche un vistazo al siguiente código

por favor avíseme de cómo hacer funcional el problema para otras pestañas (sincronizar el temporizador para todas las páginas)


3 respuestas 3

Primero, notaré que str.charAt (n) .charCodeAt (0) se escribe mejor como str.charCodeAt (n).

Las cadenas son inmutables, por lo que es mejor trabajar con elementos de matriz que construirlos mediante concatenación carácter por carácter.

Editar nota: Mi respuesta original tenía el bucle for escrito como para (var i en s) <. >. Como lo señaló @EliasVanOotegem, eso es más adecuado para iterar sobre las propiedades del objeto que sobre los elementos de la matriz. Como lo sugirió @plalx y lo confirmó con jsperf, cambiándolo a for (var i = 0 i & lt s.length i ++) <. > lo hace mucho más rápido. Por lo tanto, he modificado mi respuesta, cambiando de (var i in s) a for (var i = 0 i & lt s.length i ++).

Tenga en cuenta que su solución y la solución anterior incrementan ciegamente todos los caracteres excepto los espacios. Si desea incrementar solo letras, entonces una operación de reemplazo sería más apropiada:

Puede hacer trampa en el cifrado César, mapeando tanto z como Z a una A mayúscula, ya que sabe que las vocales deberán estar en mayúsculas.


3 respuestas 3

La do_action está en el lugar equivocado. Se está llamando a sí mismo.

El patrón de creación de ganchos que está utilizando.

algunos donde haces algo como:

. es algo que recuerdo haber hecho hace algún tiempo, y muchos o la mayoría de los tutoriales en línea lo sugieren. Sin embargo, si grep el código fuente de un gancho que no tiene una función correspondiente (conocida) como the_content, que es un gancho y una etiqueta de plantilla.

. y luego grep nuevamente para una función asociada.

. no lo encontrará por muchos ganchos. El Core no usa ese patrón de función pública hook_name () en todos los casos, y no parece que se use para crear realmente el gancho. Parece que do_action o apply_filters hace todo el trabajo. El ejemplo de la página del Codex para do_action lo confirma. Ese ejemplo usa un gancho llamado i_am_hook pero no hay función de ese nombre, solo do_action ('i_am_hook', $ a, $ b). Puede probar esto haciendo algo muy simple como:

Hay un par de tutoriales más recientes que encontré, aunque estoy seguro de que hay más que demuestran lo mismo:

No necesita crear esas funciones en absoluto y no necesita disparar ese gancho 'vacío'. Solo necesita usar do_action o apply_filters donde necesita ejecutar el gancho.

Solo necesita crear esas funciones hook_name () si y solo si desea ejecutar el gancho llamándolo por su nombre de la manera que lo hace el Core con los ganchos wp_head y wp_footer.

Por lo tanto, no creo que deba hacer esto en absoluto para la mayoría de los ganchos y para los que desee llamar por su nombre, no está creando las funciones que le permitirían hacer eso. La única forma que he podido hacer ese trabajo, y no me gusta, es con eval - prueba de concepto muy aproximada:

Creo que esa es la única forma de hacerlo, pero tiene algunas penalizaciones de velocidad y probablemente tendrá problemas de alcance, especialmente dado que lo está ejecutando dentro de una clase (pero no lo he probado). Ver: https://stackoverflow.com/questions/7337883/php-define-functions-with-variable-names

Con suerte, eso le dará suficiente información para evaluar lo que necesita hacer y lo que no necesita hacer, y lo que puede hacer, para que esto funcione para sus propósitos.


2 respuestas 2

Puede usar AJAX si no desea volver a cargar la página actual & mdash, es decir, al hacer clic en el botón "Aceptar", realice una solicitud AJAX para actualizar los metadatos del usuario, todo sin salir de la página actual.

Sin embargo, la solución que propongo es no usando AJAX en su lugar, simplemente enviamos el formulario (establecemos su valor de atributo de acción) a la página de inicio y luego usamos el gancho template_redirect para actualizar los metadatos (y redirigir a la página anterior o de referencia).


4 respuestas 4

El procedimiento correcto para ejecutar un script (yo uso un script de shell) al recibir un mensaje de correo es el siguiente. Implica modificar sufijoarchivo de configuración de master.cf (que, en mi Debian, se encuentra en / etc / postfix) agregando la siguiente línea:

que instruye sufijo para ejecutar el script (necesita hacerlo ejecutable) cuando ocurre algún evento.

Para especificar cuándo ejecutar el script, haga lo siguiente: suponga que desea que se ejecute cuando [email protected] recibe un mensaje. Coloque la siguiente línea

dentro del archivo /etc/postfix/address.txt necesitará crear una base de datos adecuada para sufijo para utilizar este archivo, lo que se logra mediante

que produce como salida un archivo llamado /etc/postfix/address.db. Ahora vuelve al /etc/postfix/main.cf archivo y agregue la siguiente línea:

y deberías estar listo para empezar.

Puedo ver dos soluciones obvias.

Si esta usando procmail como el MDA en su servidor, o está dispuesto a convertirlo para usarlo, entonces puede ejecutar cualquier script arbitrario en cualquier correo electrónico arbitrario a través de procmail | Acción de receta (tubería). Es de esperar que no se inicie como root, pero debería ser fácil crear un script que realice la magia necesaria y que un usuario relevante pueda invocar sin contraseña como root. La salida del script incluso podría retroalimentarse lo mismo correo electrónico y el correo electrónico entregado posteriormente haciendo de la receta una acción de filtrado.


find buscará archivos con un espacio en el nombre. Los nombres de archivo se imprimirán con un byte nulo (-print0) como delimitador para hacer frente también a nombres de archivo especiales. Luego, la lectura incorporada lee los nombres de archivo delimitados por el byte nulo y finalmente mv reemplaza los espacios con un guión bajo.

EDITAR: Si también desea eliminar los espacios en los directorios, es un poco más complicado. Los directorios se renombran y luego ya no se puede acceder a ellos con el nombre find find. Prueba esto:

El sort -rz invierte el orden de los archivos, de modo que los archivos más profundos en una carpeta son los primeros en moverse y la carpeta en sí será la última. Por lo tanto, nunca se cambia el nombre de las carpetas antes de que se cambie el nombre de todos los archivos y carpetas dentro de ellas. El comando mv en el bucle también ha cambiado un poco. En el nombre de destino, solo eliminamos los espacios en el nombre base del archivo; de lo contrario, no sería accesible.


¿Reemplazar el script activado por la acción por uno proporcionado a través del complemento QGIS? - Sistemas de Información Geográfica

Cualquier artista 3D ha realizado deformaciones de malla, incluso si no está familiarizado con el término.

Es donde tiene alguna geometría existente, seleccione algunos o todos los puntos que componen el modelo y muévalos usando las herramientas proporcionadas.

La deformación de la malla no crea ni destruye la geometría, y no cambiará los datos del triángulo que conectan los vértices, por lo que no se admite el desgarro, etc., pero es un conjunto de herramientas flexible para manipular la geometría.

Este complemento, Mesh Deformation Toolkit (MDT para abreviar) le permite realizar este tipo de manipulación de geometría dentro de Unreal Engine a través de Blueprint.

Esto se hace proporcionando un componente UE4 llamado Componente de deformación de malla que le permite almacenar y deformar la geometría de la malla, utilizando los nodos de selección y transformación proporcionados, y luego enviarla a su nivel UE4. Todo dentro de Unreal Engine y disponible dentro del editor o en tiempo de ejecución.

Si te gusta SplineMeshComponent, te encantará MeshDeformationComponent.

El flujo de trabajo de este complemento se basa en el que usaría un artista 3D con sus herramientas.

En un paquete 3d, esto sería utilizar las herramientas proporcionadas para crear una malla base o cargar una.

En el complemento, este es el lugar donde los nodos "Cargar" extraen la geometría de origen en el sistema.

Paso 2: selecciona los vértices para modificar

En su paquete 3d, aquí es donde arrastra el mouse sobre los vértices y elige los que desea mover.

En el complemento, estos son los distintos nodos "Seleccionar", cada uno de los cuales permite un tipo diferente de selección, como los vértices cerca de una posición proporcionada o cerca de una ruta de spline proporcionada. Al igual que en muchos paquetes 3d, esta selección no es una selección de todo o nada, algunos puntos se pueden "seleccionar parcialmente", lo que facilita la obtención de resultados más suaves.

También hay modificadores de selección que le permiten invertir selecciones, aplicar funciones de aceleración para hacer las selecciones más suaves o combinar selecciones sumando, restando, mezclando o más.

Paso 3: Transforma los vértices

Hay muchas herramientas para esto en un paquete 3d, algunas que permiten operaciones básicas como Mover, Escalar, Rotar y otras más extrañas como Inflar, que mueve puntos a lo largo de sus normales, o Spherize, que combina una malla hacia una forma esférica.

Este complemento proporciona un conjunto de nodos de transformación basados ​​en las herramientas que proporcionan los paquetes 3d, cada uno de los cuales también puede tomar una selección para controlar su influencia en los vértices.

También se puede usar una selección para impulsar múltiples transformaciones, por lo que si desea mover los puntos seleccionados hacia arriba y luego rotarlos, está bien.

Es raro que obtenga exactamente la forma que desea con una sola transformación, querrá seguir seleccionando y moviendo diferentes partes de la malla.

Esto se puede hacer simplemente encadenando selecciones / transformaciones.

En un paquete 3d, aquí es donde guarda sus resultados en el disco listos para renderizar, o para importarlos a otra herramienta como UE4.

En el complemento, estos son los nodos "Guardar". Nuevamente, en la actualidad solo hay uno de estos, "Actualizar componente de malla de procedimiento" (NÓTESE BIEN: Esto cambiará el nombre a Guardar en componente de malla de procedimiento) que toma la geometría transformada y la escribe en uno de los componentes de malla de procedimiento de Unreal que luego se pueden agregar a la escena.

Cuando el complemento llegue a la versión beta pública, lanzaré complementos compilados para Windows y Mac, y posiblemente también para otras plataformas.

Por ahora, aunque para que funcione, necesitará el Complementos / MeshDeformationToolkit directorio de este repositorio y cópielo en la misma ruta en su propio proyecto, luego, cuando ejecute UE4, debería poder habilitar / compilar el complemento (esto necesitará un compilador C ++).

Aquí hay una lista de todos los nodos que proporciona el sistema, desglosados ​​en seis categorías, cinco de las cuales corresponden aproximadamente a los pasos enumerados en la introducción y 'Utilidad', que es una bolsa de sorpresas de todo lo demás:

  1. Cargando datos de geometría. Antes de hacer cualquier otra cosa, necesitamos algunos datos de geometría para operar.
  2. Seleccionar vértices. Si bien podemos hacer algunas operaciones útiles en cada vértice que compone la malla, la capacidad de cambiar solo partes de la malla es mucho más poderosa, y para eso necesitamos seleccionar los vértices para controlar la operación. Estas selecciones no se limitan a un simple sí / no, es posible tener vértices que se seleccionan parcialmente para permitir que una operación se aplique con diferentes intensidades en diferentes partes de la malla.
  3. Modificar y combinar selecciones. Para un control aún mayor sobre qué partes de la malla estamos afectando, es posible hacer selecciones y luego modificarlas para obtener el control exacto necesario.
  4. Transformando vértices. Las deformaciones reales, ya sea que estemos moviendo y girando puntos o algo más extraño, aquí es donde ocurre el trabajo real de cambiar la geometría.
  5. Guardar datos. No tiene sentido cambiar la geometría si luego no hacemos algo con ella y estos nodos son donde sucede eso.
  6. Utilidad. Esto es todo lo demás, incluidas las herramientas que le permiten crear su propia selección y transformar herramientas.

Todos estos nodos se proporcionan en el Componente de deformación de malla, y muchos de ellos también se pueden llamar directamente en MeshGeometry.

  • Carga desde el componente de deformación de malla: Cargue la geometría de otro MDC, reemplazando cualquier cosa almacenada actualmente.
  • Carga desde geometría de malla: Cargue la geometría almacenada en un objeto MeshGeometry, reemplazando todo lo que esté almacenado actualmente.
  • Carga desde malla estática: Carga geometría desde StaticMesh, reemplazando cualquier cosa almacenada actualmente.

Cada una de estas funciones devuelve una Selección que luego puede modificarse más o pasarse a cualquiera de los nodos para transformar los vértices y controlar su comportamiento.

Muchos de estos se pueden llamar en un MeshDeformationComponent o directamente en MeshGeometry que contiene el MDC.

  • Seleccionar todo: Selecciona todos los vértices con toda su fuerza.
  • Seleccionar por ruido: Seleccione vértices según una función de ruido configurable, útil para el terreno o para agregar aleatoriedad controlada a un modelo. Esto puede devolver valores fuera del rango estándar de cero a uno. Si esto causa problemas, use un nodo 'Reasignar por rango' para reasignar entre cero y uno.
  • Seleccionar por Normal: Seleccione vértices con una orientación normal determinada.
  • Seleccionar por sección: Seleccione todos los vértices en una de las Secciones que forman una malla.
  • Seleccionar por textura: Seleccione vértices basados ​​en un canal de una textura.
  • Seleccionar por rango de vértice: Seleccione vértices según su índice en la malla. Esto es más útil cuando se ha creado una malla para tener sus vértices en un orden conocido.
  • Seleccionar en volumen: Seleccione vértices basados ​​en un canal de una textura
  • Seleccionar lineal: Seleccione vértices con fuerza combinada linealmente entre dos puntos.
  • Seleccione Cerca: Seleccione los vértices cerca de un punto en el espacio.
  • Seleccione Near Line: Seleccione vértices cerca de una línea con los puntos de inicio / finalización proporcionados.
  • Seleccione Near Spline: Seleccione todos los vértices cerca de un componente de spline.

Modificar y combinar selecciones

En realidad, estos no están en el Componente de deformación de malla y, en su lugar, se proporcionan en una Biblioteca de funciones Blueprint.

Todos estos devuelven una nueva selección y no modifican las que se les proporcionan. Las descripciones breves a continuación suelen estar redactadas como si lo hicieran, pero esto se debe a que escribir "Devolver una selección que es la selección proporcionada" en cada una de ellas haría que fueran mucho más difíciles de leer.

  • SelectionSet + Float: Agrega un Float constante a todos los valores de un SelectionSet.
  • SelectionSet + SelectionSet: Agregue dos SelectionSets juntos.
  • Abrazadera (SelectionSet): Fije todos los valores en un SelectionSet al mínimo y al máximo proporcionado.
  • Float / SelectionSet: Divide un flotante por todos los valores de un SelectionSet.
  • SeletionSet / Float: Divide los valores en un SelectionSet por un flotante.
  • SelectionSet / SelectionSet: Divide los pesos de un SelectionSet por otro.
  • Facilidad (SelectionSet): Facilite un SelectionSet utilizando una función de aceleración proporcionada por el usuario. Esto es útil para eliminar la caída lineal de una selección y convertirla en algo más suave y de aspecto más natural.
  • Lerp (SelectionSet, Float): Mezcla un SelectionSet con un flotante.
  • Lerp (SelectionSet, SelectionSet) con Float: Combina dos SelectionSets juntos usando un alfa dado.
  • Lerp (SelectionSet, SelectionSet) con SelectionSet: Combine dos SelectionSets junto con alfas tomadas de un tercer SelectionSet.
  • Max (SelectionSet, Float): Devuelve el máximo de un SelectionSet y un float.
  • Max (SelectionSet, SelectionSet): Devuelve los valores máximos de dos SelectionSets.
  • Min (SelectionSet, Float): Devuelve el mínimo de un SelectionSet y un float.
  • Mín (SelectionSet, SelectionSet): Devuelve los valores mínimos de dos SelectionSets.
  • SelectionSet * Float: Multiplica los valores de un SelectionSet por un flotante.
  • SelectionSet * SelectionSet: Multiplica los valores de dos SelectionSets.
  • OneMinus (conjunto de selección): Devuelve 1-SelectionSet. Si el SelectionSet está en el rango 0-1, esto lo revertirá.
  • Potencia (SelectionSet, Float): Devuelve un SelectionSet elevado a la potencia Exp-th.
  • Aleatorizar (SelectionSet): Aleatoriza los valores de un SelectionSet entre dos límites.
  • RemapToCure (SelectionSet, Float Curve): Reasigna los valores de un SelectionSet a una curva flotante.
  • RemapToRange (SelectionSet): Reasigna un SelectionSet al mínimo / máximo proporcionado.
  • RemapRipple (SelectionSet): Remapee un SelectionSet 'riplicándolo', agregando repeticiones y, opcionalmente, convirtiéndolo en un patrón 'arriba-abajo'.
  • Establecer (SelectionSet): Establece todos los valores de un SelectionSet en el valor proporcionado.
  • SelectionSet - Float: Reste un flotante de todos los valores en un SelectionSet.
  • Flotar - SelectionSet: Reste los valores en un SelectionSet de un Float, proporcionando una simple reversión y reasignación.
  • SelectionSet - SelectionSet: Resta los valores de un SelectionSet de otro SelectionSet.

Todas estas operaciones de transformación se pueden controlar proporcionando una Selección opcional. Si bien el uso real de la Selección puede variar en los nodos de método, se pretende que cada uno lo use de la manera más obvia y flexible para el propósito de ese nodo.

  • Ajustarse: Ajusta la malla contra la geometría de colisión proyectando a lo largo de un vector especificado. Es un nodo difícil de entender, pero es muy útil para crear carreteras que sigan el terreno subyacente y efectos similares.
  • Conforme hacia abajo: Ajusta la malla contra la geometría de colisión proyectando hacia abajo (-Z). Es un nodo difícil de entender, pero es muy útil para crear carreteras que sigan el terreno subyacente y efectos similares.
  • Ajustar a spline: Doble la malla para seguir un componente de spline, con controles para el perfil de la geometría para efectos más útiles. Esto es más poderoso que el propio componente de malla Spline de UE4, ya que sigue una curva completa en lugar de solo tener los dos puntos de control en los extremos, junto con controles adicionales.
  • Voltear normales: Voltea las normales de la superficie. Como es imposible 'voltear parcialmente' una normal, el SelectionSet se usa como un filtro simple aquí con un cambio que solo ocurre con la ponderación & gt = 0.5.
  • Voltear textura UV: Voltea el canal del mapa de textura en U (horizontal), V (vertical), ambos o ninguno.
  • Inflar: Mueve los vértices un desplazamiento especificado a lo largo de sus propias normales.
  • Estar nervioso: Agrega jitter aleatorio a la posición de los vértices. Este es un enfoque bastante burdo y, a menudo, obtendrá mejores resultados utilizando SelectByNoise.
  • Lerp: Una interpolación lineal contra la geometría almacenada en otro componente MeshDeformationComponent.
  • Vector de Lerp: Combina los vértices hacia la posición proporcionada.
  • Moverse hacia: Mueve los vértices a una distancia especificada hacia / lejos de un punto especificado.
  • Girar: Gire los vértices alrededor de un centro especificado utilizando un rotor UE4 estándar.
  • Girar alrededor del eje: Rotar vértices alrededor de un eje arbitrario. Esto es más difícil de usar que Girar pero es más flexible en lo que es posible.
  • Escala: Escale la malla usando la escala XYZ normal alrededor de un centro especificado.
  • Escalar a lo largo del eje: Escala a lo largo de un eje arbitrario.
  • Esferizar: Transforma la geometría en una esfera moviendo puntos a lo largo de sus normales.
  • Transformar: Aplica Escalar / Rotar / Trasladar como una sola operación usando una Transformación.
  • Transformar UV: Aplique una transformación al mapeo UV, cambiando la forma en que se mapearán las texturas
  • Traducir: Mueve todos los vértices según el vector proporcionado.

Estos nodos toman la geometría deformada que se construye y los guardan en otra parte de UE4.

  • Guardar en componente de malla de procedimiento: Guarde la geometría actual en un componente de malla de procedimiento, reemplazando cualquier geometría existente.
  • Guardar en malla estática: Guarde la geometría actual en StaticMesh, reemplazando cualquier contenido existente. Esto permite "hornear" las deformaciones a una forma que no depende del complemento MDT. Este nodo solo funcionará dentro del Editor, ya que se basa en sistemas que no están presentes en un proyecto compilado.
  • Clon [Solo MeshGeometry]: devuelve una copia independiente de un objeto MeshGeometry.
  • Geometría de malla de clonación [MDC]: Devuelve una copia independiente de MeshGeometry dentro de este componente. Llamadas Clon pero tiene un nombre diferente, ya que aquí solo estamos copiando un elemento dentro del componente en lugar de todo el componente.
  • Tiene geometría [Solo MDC]: compruebe si tenemos la geometría cargada
  • Obtener cuadro delimitador: Obtenga el cuadro delimitador de la malla como un cuadro.
  • Obtener radio [Solo MeshGeometry]: Devuelve el radio de la malla (Distancia desde el origen hasta el vértice más lejano, radio de la esfera delimitadora segura). Esto no está disponible en MeshDeformationComponent ya que confundiría las cosas en cuanto a si incluye alguna escala.
  • Obtener resumen: Obtenga una breve descripción de texto de la malla, por ejemplo. '4 secciones, 1000 vértices, 500 triángulos'.
  • Obtener el recuento total de triángulos: Devuelve el número de triángulos de la malla.
  • Obtener el recuento total de vértices: Devuelve el número de vértices de la malla.
  • Reconstruir normales: Calcula las tangentes y las normales de la malla en función de la geometría deformada.
  • Tamaño [Llamado en SelectionSet]: devuelve el número de pesos en este SelectionSet

Cuando todo esté funcionando y terminado, me tomaré el tiempo para documentar cómo funciona exactamente este complemento, incluido cómo puede extenderlo usted mismo escribiendo nuevos nodos de selección / transformación, ya sea en C ++ o Blueprint.

Por ahora, aunque solo puedo señalarle un tutorial que escribí que comenzó todo esto, que tiene el enfoque básico para deformar la geometría (¡también en Blueprint puro!), Y agregue las siguientes notas rápidas.

  • La geometría se almacena básicamente en el formato que utiliza ProceduralMeshComponent, por lo que una malla contiene una lista de secciones, cada una de las cuales tiene su propia lista de vértices. Es esta lista de vértices la que manipula el complemento.
  • Todo lo que hace cualquier nodo Select es iterar sobre todos los vértices en una malla y calcular la ponderación para ellos antes de almacenar la ponderación en una matriz en SelectionSet. La matriz se ordena de la misma manera que los vértices de la malla para evitar que se necesiten otros metadatos.
  • Los nodos de modificación de selección simplemente toman uno (o más) SelectionSets y devuelven otro SelectionSet con los pesos ajustados según sea necesario.
  • Cada nodo de transformación se implementa actualmente como un método en la geometría de la malla que itera sobre los vértices de la malla y aplica la transformación a cada uno de ellos en orden. Las selecciones se manejan básicamente actuando como una combinación entre la posición original y la posición completamente transformada, aunque la naturaleza del lerp puede variar entre métodos (Translate tiene una combinación espacial sencilla, pero Rotate realmente combina el ángulo de rotación para obtener mejores resultados). La mayoría de estos se implementan en una clase de biblioteca de planos, ya que son funciones de utilidad en lugar de ser llamadas en una clase.
  • El componente MeshDeformationComponent en sí solo contiene un conjunto de geometría de malla y ofrece nodos de transformación y selección llamables por BP que simplemente delegan la llamada a la malla.

Este complemento se puede usar en el editor, en tiempo de ejecución e incluso de forma dinámica para hacer que los objetos se deformen dinámicamente durante el juego. Sin embargo, recuerde que algunas operaciones de deformación como 'Reconstruir normales' pueden llevar algo de tiempo, así que tenga cuidado, ya que podría causar problemas importantes en la velocidad de fotogramas. Hay menos requisitos para volver a activarse con modificaciones durante Begin Play, ya que solo se ejecutará una vez y, en general, puede ocultarlo con una pantalla de carga de nivel, y con las cosas llamadas en el script de construcción, puede hacer mucho trabajo como todo lo que tiene. pagar es el costo de almacenamiento de la malla.

Cada vértice de la malla tiene una normal asociada que indica la dirección en la que apunta la superficie en ese punto, y que es utilizada por el sistema de iluminación para obtener el sombreado correcto. Cuando se deforma una malla y se cambia la forma, esto también debería afectar a las normales, pero esta es una operación costosa y no se realiza de forma predeterminada. Para solucionar esto, hay un nodo 'Reconstruir normales' que volverá a calcular las normales de la superficie en función de la posición actual de los vértices para que el sombreado vuelva a verse bien.

tldr ¿El sombreado se ve extraño después de una operación de deformación? Utilice 'Reconstruir normales'.

Documentación y calidad del código

La documentación de la API para este complemento está disponible en http://mdtapi.normalvector.com y se creó a partir de comentarios procesados ​​con Doxygen junto con mi filtro de fuente Doxygen para eliminar las macros UE4 y estará disponible como documentos API en línea en algún momento.

La mayoría de los contenidos de la demostración se han organizado para que coincidan con la guía de estilo Gamemakin UE4 de Allar utilizando la herramienta Linter disponible en UE4 Marketplace. El Linter no es necesario para usar el kit de herramientas de deformación de malla, sin embargo, solo lo uso yo mismo para encontrar problemas potenciales. El resto del contenido se agregará una vez que el complemento, o su reemplazo, esté disponible.

    por su espléndida biblioteca FastNoise C ++, que se utiliza para toda la generación de ruido en el complemento. para el mapa de altura utilizado en la demostración "Small World", y en general es demasiado ingenioso para las palabras.

La lista de tareas pendientes para este proyecto está en Trello.

Esto también funciona como un registro de cambios con la lista 'Listo'.

Derechos de autor 2017 Paul Golds.

Por la presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión , publicar, distribuir, sublicenciar y / o vender copias del Software, y permitir que las personas a las que se les proporcione el Software lo hagan, sujeto a las siguientes condiciones:

El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.

EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE CUALQUIER RECLAMO, DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRO MODO, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIACIONES EN EL SOFTWARE.


CORREGIR y REEMPLAZAR Tenga relaciones sexuales protegidas y ayude a salvar vidas con lo nuevo (Durex ™) ROJO Condón

Celebridades codiciadas se unen a Durex y (RED), incluida la cantante sueca Zara Larsson, la actriz ganadora del premio Emmy Thandie Newton, la estrella de Broadway Javier Mu & ntildeoz, el comediante, cantante y actor Phoebe Robinson, el influencer y activista Tyler Oakley, el cantante, rapero y actor Jacob Latimore , y el actor Christian Navarro, en un cortometraje provocativo, que anima a los espectadores a mostrar su apoyo compartiendo en línea usando #HaveSexSaveLives.

Celebridades codiciadas se unen a Durex y (RED), incluida la cantante sueca Zara Larsson, la actriz ganadora del premio Emmy Thandie Newton, la estrella de Broadway Javier Mu & ntildeoz, el comediante, cantante y actor Phoebe Robinson, el influencer y activista Tyler Oakley, el cantante, rapero y actor Jacob Latimore , y el actor Christian Navarro, en un cortometraje provocativo, que anima a los espectadores a mostrar su apoyo compartiendo en línea usando #HaveSexSaveLives.

PARSIPPANY, N.J .-- (BUSINESS WIRE) - El séptimo párrafo, la primera y la segunda oraciones deben leer: Los condones RED Extra Sensitive ™ de edición especial (Durex ™) están lubricados para aumentar la sensibilidad. Los condones (Durex ™) RED Extra Sensitive ™, 100% probados electrónicamente para verificar su confiabilidad, están disponibles en paquetes de 12 y 42 paquetes. (Con referencia a (Durex ™) RED en lugar de (Durex®) RED).

La versión corregida dice:

HAYA PROTEGIDO EL SEXO Y AYUDE A SALVAR VIDAS CON EL NUEVO (DUREX ™) ROJO CONDÓN

Brand se compromete a donar $ 5 millones de dólares para ayudar a combatir el VIH y el SIDA

Durex, la marca de condones número uno del mundo, ha unido fuerzas con (RED) ®, una organización sin fines de lucro que recauda fondos a través de asociaciones de marcas icónicas para combatir el VIH y el SIDA en África. Esta nueva asociación global incluye un condón RED de edición especial (DUREX), el primer producto (RED) ® que ayuda a proteger contra el VIH y otras ITS, así como una donación de $ 5 millones del fabricante de condones.

A partir de hoy, los consumidores en los EE. UU. Pueden comprar un condón (DUREX) RED en línea a través de Amazon o en minoristas selectos, incluido Target, con .84 centavos de cada paquete de 42 unidades y .35 centavos de cada paquete de 12 unidades donados directamente a un programa en Sudáfrica, donde 7,2 millones de personas viven actualmente con el VIH. 1 El programa Mantener a las niñas en la escuela tiene como objetivo reducir las nuevas infecciones por el VIH y los embarazos entre las mujeres jóvenes alentando a las niñas a permanecer en los programas educativos y mejorando el acceso a los servicios de salud sexual y reproductiva.

"Esta asociación significativa entre Durex y (RED) ® representa la responsabilidad que todos tenemos, como individuos y organizaciones, de unirnos a la lucha contra el VIH y el SIDA en todo el mundo", dijo Nadja Körner, directora de marketing para el bienestar sexual de RB, la fabricantes de Durex. "Queremos que nuestros consumidores se sientan capacitados para tomar medidas y, literalmente, 'tener relaciones sexuales y salvar vidas' mediante la compra del nuevo condón (DUREX) RED".

Celebridades codiciadas se están uniendo al movimiento, incluida la cantante sueca. Zara Larsson, Actor ganador del premio Emmy Thandie Newton, Estrella de Broadway Javier Muñoz, comediante, cantante y actor Phoebe Robinson, influencer y activista Tyler Oakley, cantante, rapero y actor Jacob Latimore, y actor Christian Navarro, en un cortometraje provocativo, que anima a los espectadores a mostrar su apoyo compartiendo en línea usando #HaveSexSaveLives.

“Es emocionante para (RED) asociarse con una marca global como Durex de una manera tan provocativa, inspiradora y creativa. In addition to millions of dollars to the Global Fund, there is brilliance and beauty in a (RED) partner product that saves lives in more ways than one,” said Deborah Dugan, CEO of (RED). “Thank you to all at Durex for bringing this important campaign to people and places all around the world.”

Buying a (DUREX) RED condom not only helps protect you and your partner from HIV and other STIs, but it also helps raise vital funds to help fight HIV and AIDS, allowing people to have sex and save lives for the very first time. Leading up to World AIDS Day on December 1, consumers are encouraged to show their support by making a purchase and sharing their commitment on social using #HaveSexSaveLives.

The special edition (Durex™) RED Extra Sensitive™ Condoms are lubricated for heightened sensitivity. 100% electronically tested for reliability, (Durex™) RED Extra Sensitive™ Condoms are available in 12 and 42 packs. The 12-count pack and 42-count tin retail pricing is $5.99 and $14.99, respectively. Use as directed. Visit www.DurexUSA.com for more information.

(DUREX) ROJO Camaradería

RB, the global leader in consumer health and hygiene, is joining forces with (RED) and The Global Fund through its condom brand, Durex, and has pledged a minimum of $5 million commitment to The Global Fund. The Bill and Melinda Gates Foundation will match RB’s commitment, taking the total to the Global Fund to $10 million.

The funds donated through the (DUREX) RED partnership will go directly to a program in South Africa, The Keeping Girls in School Program, The program aims to reduce new HIV infections and pregnancies among young women, improve access to sexual and reproductive health services and comprehensive sexuality education in schools, and encourage more girls to stay in education.

DUREX® is the #1 sexual well-being brand worldwide 2 . The brand not only produces condoms which exceeds global testing standards, but also offers pleasure gels, lubricants and personal massagers. With over 80 years of experience in the bedroom, DUREX is dedicated to inspiring lovers to love sex safely. That is why DUREX will never stop innovating with new products that enhance the sexual experience, helping couples get closer and go further together. For more information, go to www.DurexUSA.com.

RB is a global leading consumer health, hygiene and home company. Driven by a purpose to build healthier lives and happier homes, RB has operations in over 60 countries. From the foundations of wellness and infant nutrition, to the fundamentals of a hygienic home, our global brands help people live healthier, happier lives. RB has world leading Powerbrands which include household names such as Enfamil, Nutramigen, Nurofen, Strepsils, Gaviscon, Mucinex, Durex, Scholl, Clearasil, Lysol, Dettol, Veet, Harpic, Cillit Bang, Mortein, Finish, Vanish, Calgon, Woolite and Air Wick. RB’s unique culture is at the heart of its success. Its drive to achieve, passion to outperform and commitment to quality and scientific excellence are manifested in the work of over 40,000 RB employees worldwide.

(RED) was founded in 2006 to engage businesses and people in the fight against AIDS. (RED) partners with the world’s most iconic brands that contribute proceeds from (RED)-branded goods and services to the Global Fund. (RED) Proud Partners include: Amazon, Apple, Bank of America, Beats by Dr. Dre, Belvedere, Claro, The Coca-Cola Company, Durex, MCM, Salesforce, SAP, Starbucks and Telcel. (RED) Special Edition partners include: aden+anais, Alessi, ALEX AND ANI, Andaz, Baxter of California, Bombas, Fatboy USA, Girl Skateboards, Mophie, S’well, Wanderlust and Vespa.

To date, (RED) has generated more than $500 million for the Global Fund to fight AIDS, Tuberculosis and Malaria, to support HIV/AIDS grants in Ghana, Kenya, Lesotho, Rwanda, South Africa, Swaziland, Tanzania and Zambia. 100 percent of that money goes to work on the ground – no overhead is taken. Global Fund grants that (RED) supports have impacted nearly 110 million people with prevention, treatment, counseling, HIV testing and care services.

About The Global Fund

The Global Fund is a 21st-century partnership organization designed to accelerate the end of AIDS, tuberculosis and malaria as epidemics. Founded in 2002, the Global Fund is a partnership between governments, civil society, the private sector and people affected by the diseases. The Global Fund raises and invests nearly US$4 billion a year to support programs run by local experts in countries and communities most in need. Working together, we have saved millions of lives and provided prevention, treatment and care services to hundreds of millions of people, helping to revitalize entire communities, strengthen local health systems and improve economies.

1 Source, UNAIDS 2018: Number of people living with HIV/Map http://aidsinfo.unaids.org

2 Claim based on information aggregated and reported in part from data supplied by Nielsen through its Retail Measurement Services and in part from data inputs from other suppliers for the Condom category (RB defined) for the 12-month period ending September 2017, for the defined RB geographic focus.


2 respuestas 2

The example configuration should block the use of the HEAD verb, assuming that the server which has this configuration is receiving the verb at all (e.g. if you have a weird proxy setup which fakes HEAD requests by making a GET call, then dropping the body, it won't have any effect).

No, other headers will still be present - the server doesn't know that the other headers are treated as verbs by the application. If you want to prevent the use of other methods passed in this way, the best option is probably to remove the headers which the application can interpret as HTTP verbs. Depending on the application, this may break some functionality - I've seen applications which use this method of passing verbs for delete functions, or to allow modifications to records.

From your description, it sounds like the problem lies not in the use of HTTP verbs, but in how the application allows the actions they relate to to be performed, possibly with inappropriate permissions. It's hard to say without further knowledge about your application, but blocking a specific method of performing an action is likely to be less effective than blocking the action itself, within the application, unless appropriate authorisation is supplied.


Ver el vídeo: Cómo instalar plugins y trabajar con el Administrador de Complementos de QGIS