Leaderboard
Popular Content
Showing content with the highest reputation on 09/04/2025 in Posts
-
you're welcome. The 'secret' when going MDI is using vla commands only.1 point
-
Hola de nuevo, Offsetea.mp4 Dejé una tarea pendiente en este hilo que intentaré cerrar. Adjunto una nueva versión de Offsetea . A continuación, explico el comportamiento y las opciones del comando. Partimos de una lógica de trabajo basada en el enfoque del código de Evgeny Elpanov. De hecho, esta lógica es más fácil de explicar en código que con palabras: proyectar un segmento entre dos vectores guía (definidos por los extremos del segmento y el punto que precede a cada uno de ellos) que se intersecan en un punto, que se convierte en el foco de la proyección. Al proyectar segmentos rectos, el resultado solo puede ser uno. Sin embargo, en el caso de segmentos de arco, ¿qué ocurre si reemplazamos el foco de proyección? En base a esto, se me ocurrieron dos opciones adicionales: el centro y el polo del arco. También consideré la posibilidad de añadir una tercera opción que permitiera al usuario especificar la ubicación del foco en pantalla. Sinceramente, no creo que esto sea útil (espero que al menos una de las otras dos lo sea ). Así, la funcionalidad del comando es la siguiente: - Selección del segmento de polilínea a proyectar: el comando solo funcionará si la polilínea está compuesta por 2 o más segmentos. Si el segmento seleccionado es recto , los vectores guía se definirán por sus extremos y el punto anterior de cada uno (es decir, los segmentos adyacentes). Si uno de los extremos del segmento es también un extremo de la polilínea, el vector guía para ese extremo será la normal a él. Si el segmento es un arco , los vectores guía predeterminados serán los mismos que para los segmentos rectos (propuesta de Evgeny). Sin embargo, aquí es posible cambiar el enfoque del enfoque secante de Evgeny (tecla '2') al enfoque radial (tecla '1') o al enfoque tangente (tecla '3'). En cuanto a las herramientas de control del segmento a proyectar, he implementado un ajuste al estilo GLAVCVS , limitado a los casos posibles para este comando: _end, _mid, _int, _cen, _nod, _ins, _nea. Este ajuste se puede activar o desactivar con F3. La relación entre la posición del cursor y el segmento a proyectar siempre será de seguimiento de segmento en los segmentos rectos. Sin embargo, en los segmentos de arco, puede ser de seguimiento de arco o de cuerda. Para alternar entre ambos, simplemente pulse TAB. El seguimiento de arco está activo mientras el cursor permanece entre los dos vectores de proyección. De lo contrario, cambia automáticamente al seguimiento de cuerda. La diferencia entre ambos radica, por lo tanto, en el comportamiento cuando el cursor se encuentra entre los vectores guía. Estos vectores guía se muestran en pantalla como dos líneas discontinuas rojas. Junto al cursor se muestra texto informativo en tiempo real: Para segmentos rectos (de arriba a abajo): la distancia de desplazamiento desde la ubicación inicial y la longitud del segmento. Para segmentos de arco: distancia de desplazamiento desde la ubicación inicial, radio del arco, longitud del arco y longitud de la cuerda. La visibilidad de esta información se puede activar o desactivar con la tecla "i" . Por último, puedes aumentar o disminuir el tamaño de los indicadores junto al cursor presionando las teclas '+' o '-'. En cuanto al rendimiento del comando, mientras escribía el código, descubrí una mayor variedad de casos de los que inicialmente había pensado. Si el objetivo principal era lograr el seguimiento del segmento de arco según la posición del cursor, creo que este código cubrirá aproximadamente el 90 % de los casos posibles. En los casos donde no sea posible el seguimiento del arco, se realizará a nivel de la cuerda. Espero que a alguien le resulte útil. Offsetea_v2.lsp1 point
-
I really haven't tested this : ;;; setvar on allopen (defun c:soa ( / aod var val) (vlax-for doc (vla-get-documents (vlax-get-acad-object))(setq aod (cons doc aod))) (setq var "ORTHOMODE" val (vlax-make-variant 0 vlax-vbInteger))(foreach doc aod (vla-SetVariable doc var val))) ;;; or with save (defun c:soas ( / aod var val) (vlax-for doc (vla-get-documents (vlax-get-acad-object))(setq aod (cons doc aod))) (setq var "ORTHOMODE" val (vlax-make-variant 0 vlax-vbInteger)) (foreach doc aod (vla-SetVariable doc var val)(vl-catch-all-apply 'vla-saveas (list doc (vla-get-fullname doc))))) ;;; show allopen plotstyle (defun c:saps ()(vlax-for d (vla-get-documents (vlax-get-acad-object))(vlax-for l (vla-get-layouts d) (if (not (eq (vla-get-name l) "Model")) (vlax-put-property l 'ShowPlotStyles :vlax-true))))) ;;; hide allopen plotstyle (defun c:haps ()(vlax-for d (vla-get-documents (vlax-get-acad-object))(vlax-for l (vla-get-layouts d) (if (not (eq (vla-get-name l) "Model")) (vlax-put-property l 'ShowPlotStyles :vlax-false)))))1 point
-
Do you want step by step undo? I would just wrap it in the start and end of the lisp to have one undo. (defun c:foo () (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-StartUndoMark doc) ; Begin Undo Group ;code (vla-EndUndoMark doc) ;End Undo Group (princ) )1 point
-
Here's the program I have now. It requires the RunAll Utility found here: https://www.theswamp.org/index.php?topic=53912 ;; ;; ToggleDisplayColour.lsp ;; ;; Author: 3dwannab + others ;; ;; Version History: ;; v1.0 - 2024-06-11: Initial version. Updated to change the grid colours depending on if the background is black or white. ;; v1.1 - 2025.06.16: Updated to change the grid colours depending on if the background is black or white. ;; v1.2 - 2025.09.04: Updated to set the plot styles display on all open documents with the help of RunAll Utility found here: https://www.theswamp.org/index.php?topic=53912 ;; ;; What this does: ;; - Toggles the AutoCAD background colour between black and white in the current space (model or layout). ;; - If the background is white the plot styles display, if black they don't. ;; - Updates grid colours to suit the background and toggles plot style display. ;; - No effect on the block editor. Refreshes DWG to display correctly. ;; ;; NOTES: ;; - Toggling doesn't work when running the command inside the block editor. Not much I think I can do about ;; apart from perhaps implementing this https://forums.autodesk.com/t5/net-forum/change-the-block-editor-background-color-at-runtime/td-p/9831561. ;; ;; TO DO: ;; – NA ;; (vl-load-com) ;; Converts RGB values to AutoCAD decimal color value (defun rgb-to-dec (r g b) (+ r (* g 256) (* b 65536)) ) ;; Helper to extract RGB from decimal color (defun dec-to-rgb (dec / r g b) (setq r (rem dec 256)) (setq g (rem (/ dec 256) 256)) (setq b (rem (/ dec 65536) 256)) (list r g b) ) ;; Helper to compute brightness (perceived luminance) (defun color-brightness (dec / rgb) (setq rgb (dec-to-rgb dec)) (+ (* 0.299 (float (car rgb))) (* 0.587 (float (cadr rgb))) (* 0.114 (float (caddr rgb))) ) ) ;------------------------------------------------------- ; rm:displayplotstyles ; 04/03/10 ruul at ctr.co.at ; nomen est omen - toggles display of plot styles... ;------------------------------------------------------- ; Updated 110208 by Mike Sweeney ; (defun rm:displayplotstyles (bshow ball / acdoc bvshow layout layouts) (princ "\nDisplay plot styles ") (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))) (setq layouts (vla-get-layouts acdoc)) (setq bvshow (if bshow :vlax-true :vlax-false)) (princ (if bshow "ON" "OFF")) (cond (ball (vlax-for layout layouts (if (/= (vla-get-name layout) "Model") (vla-put-ShowPlotStyles layout bvshow) ) ) (princ " in all layouts\n") ) (T (setq layout (vla-get-ActiveLayout acdoc)) (vla-put-ShowPlotStyles layout bvshow) (princ " in current layout\n") ) ) (vla-regen acdoc acactiveviewport) (princ) ) ;; Returns T if the background is white (defun isWhiteBackground (/ bgColorDark bkColorLight cur inBlockEditor pref previousColLight previousColor tilemde) ;; Assign cur depending on tilemode (setq pref (vla-get-display (vla-get-Preferences (vlax-get-acad-object)))) (setq tilemde (getvar "tilemode")) (if (= tilemde 1) (setq cur (vla-get-GraphicsWinModelBackgrndColor pref)) (setq cur (vla-get-GraphicsWinLayoutBackgrndColor pref)) ) ;; Set up the dark and light colours to toggle (setq bgColorDark (rgb-to-dec 0 0 0)) (setq bkColorLight (rgb-to-dec 255 255 255)) (setq previousColLight bkColorLight) ; for compatibility with existing code ;; Get current background color (setq inBlockEditor (= (getvar "BLOCKEDITOR") 1)) (if inBlockEditor (setq previousColor (atoi (getenv "BEditBackground"))) (setq previousColor (vlax-variant-value (vlax-variant-change-type cur vlax-vblong))) ) ;; Decide if we need to switch to light or dark based on current colour (cond ((= previousColor bgColorDark) T) ; If currently dark, switch to light ((= previousColor bkColorLight) nil) ; If currently light, switch to dark (T ; Fallback: use brightness as before (> (color-brightness previousColor) (/ (+ (color-brightness bgColorDark) (color-brightness bkColorLight)) 2.0) ) ) ) ) ;; Toggles the display from black to white ;; If black the plot styles are not shown ;; If white the plot styles are shown (defun c:TG (/ bgColorDark bkColorLight doc gridcol-major gridcol-minor gridcolDarkMajor gridcolDarkMinor gridcolLightMajor gridcolLightMinor inBlockEditor pref previousColLight tilemde whiteBackground) (setq doc (vla-get-activedocument (vlax-get-acad-object))) ;; Define grid color lists (setq gridcolLightMajor (rgb-to-dec 100 200 200)) (setq gridcolLightMinor (rgb-to-dec 240 240 240)) (setq gridcolDarkMajor (rgb-to-dec 10 60 60)) (setq gridcolDarkMinor (rgb-to-dec 35 35 35)) ;; Assign cur depending on tilemode (setq pref (vla-get-display (vla-get-Preferences (vlax-get-acad-object)))) (setq tilemde (getvar "tilemode")) ;; Set up the dark and light colours to toggle (setq bgColorDark (rgb-to-dec 0 0 0)) (setq bkColorLight (rgb-to-dec 255 255 255)) ; (setq previousColLight bkColorLight) ; for compatibility with existing code ;; Get current background color (setq inBlockEditor (= (getvar "BLOCKEDITOR") 1)) (setq whiteBackground (isWhiteBackground)) ;; Set grid colors based on background (if whiteBackground ;; Was light or lighter background, so toggle to dark background (progn (setq gridcol-major gridcolLightMajor) (setq gridcol-minor gridcolLightMinor) ) ;; Was dark or darker background, so toggle to light background (progn (setq gridcol-major gridcolDarkMajor) (setq gridcol-minor gridcolDarkMinor) ) ) ;; Model space and Block Editor (if (not (zerop tilemde)) ; Model space (progn ;; Toggle background color for model space (if (not inBlockEditor) (progn (vla-put-GraphicsWinModelBackgrndColor pref (vlax-make-variant (if whiteBackground bkColorLight bgColorDark) vlax-vblong)) (setenv "2D Model grid major lines color" (itoa gridcol-major)) (setenv "2D Model grid minor lines color" (itoa gridcol-minor)) ) ) ;; Toggle Block Editor background color in registry (if inBlockEditor (progn ; (setenv "BEditBackground" (itoa (if whiteBackground bgColorDark previousColLight))) ; (setenv "BEdit grid major lines color" (itoa gridcol-major)) ; (setenv "BEdit grid minor lines color" (itoa gridcol-minor)) (alert "\nNote:\nBackground cannot be updated inside the block editor\n") ) ) ) ;; progn - Model space ;; Paper space (Layout) (progn (vla-put-GraphicsWinLayoutBackgrndColor pref (vlax-make-variant (if whiteBackground bkColorLight bgColorDark) vlax-vblong)) (setenv "Layout grid major lines color" (itoa gridcol-major)) (setenv "Layout grid minor lines color" (itoa gridcol-minor)) ) ;; progn - Paper space ) ;; Toggle plot styles in paper space (if (not inBlockEditor) (progn (if whiteBackground ;; Toggles all open docs to display correctly (_RunAll "(rm:displayplotstyles t nil)") ;; Turn on display of plot styles with external RunAll Ultity found here: https://www.theswamp.org/index.php?topic=53912 (_RunAll "(rm:displayplotstyles nil nil)") ;; Turn off display of plot styles with external RunAll Ultity found here: https://www.theswamp.org/index.php?topic=53912 ;; Old code that doesn't toggle the plot styles on all open drawings ; (rm:displayplotstyles t nil) ;; Turn on display of plot styles ; (rm:displayplotstyles nil nil) ;; Turn off display of plot styles ) ) ) (vlax-release-object pref) (princ) ) ; (c:TG) ;; Unblock for testing1 point