3dwannab Posted December 9, 2022 Share Posted December 9, 2022 I was trying to see if I could hatch objects inside a block with a solid hatch. Any help would be appreciated. Here's what I have so far: (defun c:test (/ ss1 blkn cnt var_cmdecho) (prompt "\nSelect blocks to hatch with solid hatch: ") (if (setq ss1 (ssget '((0 . "INSERT")))) (progn (setq cnt 0) (setq var_cmdecho (getvar 'cmdecho)) (setvar 'cmdecho 0) (repeat (setq cnt (sslength ss1)) (setq cnt (1- cnt) blkn (cons (vla-get-effectivename (vlax-ename->vla-object (_dxf -1 (entget (ssname ss1 cnt))))) blkn) ) ) (setq blkn (_removedup blkn)) (foreach x blkn (command "-bedit" x) (initcommandversion) (sssetfirst nil (ssget "_ALL")) (command "_.bhatch" "_P" "_S" "_LA" "." "_advanced" "_associativity" "_yes" "" "_select" "_last" "" "") (command "_.bsave") (command "_.bclose") (redraw) ) (setvar 'cmdecho var_cmdecho) ) ) (princ) ) ;; removes duplicate element from the list (defun _removedup (l) (if l (cons (car l) (_removedup (vl-remove (car l) (cdr l)))) ) ) (c:test) Quote Link to comment Share on other sites More sharing options...
lido Posted December 9, 2022 Share Posted December 9, 2022 Function undefined: _dxf, initcommandversion. Quote Link to comment Share on other sites More sharing options...
3dwannab Posted December 12, 2022 Author Share Posted December 12, 2022 (edited) On 12/9/2022 at 7:15 PM, lido said: Function undefined: _dxf, initcommandversion. Rookie error, but: With (command "_.bhatch" "_P" "_S" "_LA" "." "_advanced" "_associativity" "_yes" "" "_select" "_all" "" "") ;; or (vl-cmdf "_.bhatch" "_P" "_S" "_LA" "." "_advanced" "_associativity" "_yes" "" "_select" "_all" "" "") it works when I open the same block and hatches successfully but with the code below and selecting the block it doesn't and gets stuck at the hatch dialog. (vl-load-com) ; Tharwat 18th Sept 2013 ; Modified on 2022.12.09 by 3dwannab to hatch circles and closed polylines entities in a block ; https://www.cadtutor.net/forum/topic/46782-deleting-hatch-from-blocks/?do=findComment&comment=396412 (defun c:BKHatchAll_Solid (/ ss1 blkn cnt var_cmdecho) (prompt "\nSelect blocks to hatch with solid hatch: ") (if (setq ss1 (ssget '((0 . "INSERT")))) (progn (setq cnt 0) (setq var_cmdecho (getvar 'cmdecho)) (setvar 'cmdecho 0) (repeat (setq cnt (sslength ss1)) (setq cnt (1- cnt) blkn (cons (vla-get-effectivename (vlax-ename->vla-object (_dxf -1 (entget (ssname ss1 cnt))))) blkn) ) ) (setq blkn (_removedup blkn)) (foreach x blkn (command "-bedit" x) (initcommandversion) (command "_.bhatch" "_P" "_S" "_LA" "." "_advanced" "_associativity" "_yes" "" "_select" "_all" "" "") (command "_.bsave") (command "_.bclose") (redraw) ) (setvar 'cmdecho var_cmdecho) ) ) (princ) ) ;; removes duplicate element from the list (defun _removedup (l) (if l (cons (car l) (_removedup (vl-remove (car l) (cdr l)))) ) ) ;;----------------------------------------------------------------------;; ;; _dxf ;; Finds the association pair, strips 1st element ;; args - dxfcode elist ;; Example - (_dxf -1 (entget (ssname (ssget) 0))) ;; Returns - <Entity name: xxxxxxxxxxx> (defun _dxf (code elist) (cdr (assoc code elist)) ) (c:BKHatchAll_Solid) Edited December 12, 2022 by 3dwannab Quote Link to comment Share on other sites More sharing options...
Steven P Posted December 12, 2022 Share Posted December 12, 2022 Not had a chance to look at this but what happens if you comment out the (command "_.bhatch line? Does it finish the rest of the routine? Quote Link to comment Share on other sites More sharing options...
3dwannab Posted December 12, 2022 Author Share Posted December 12, 2022 11 minutes ago, Steven P said: Not had a chance to look at this but what happens if you comment out the (command "_.bhatch line? Does it finish the rest of the routine? Yup. That hatch command is a strange one how it works on its own. 1 Quote Link to comment Share on other sites More sharing options...
pkenewell Posted December 12, 2022 Share Posted December 12, 2022 (edited) @3dwannab Try replacing "BHATCH" with "-HATCH": (command "_.-hatch" "_P" "_S" "_LA" "." "_advanced" "_associativity" "_yes" "" "_select" "_all" "" "") Tested and works for me. Edited December 12, 2022 by pkenewell Quote Link to comment Share on other sites More sharing options...
3dwannab Posted December 12, 2022 Author Share Posted December 12, 2022 Perfect @pkenewell, thanks a lot. Here's the working version. I don't know if I remember if there was a vla-get to get items that can be hatched. But for now this brute force method works. (vl-load-com) ; Tharwat 18th Sept 2013 ; Modified on 2022.12.12 by 3dwannab to hatch everything inside the block. Help over here: https://www.cadtutor.net/forum/topic/76450-hatch-objects-inside-a-block/ ;; TO DO: Only hatch entities that can be hatched. Think there may be a vla-get for this. Not sure. ; https://www.cadtutor.net/forum/topic/46782-deleting-hatch-from-blocks/?do=findComment&comment=396412 (defun c:BKHatchAll_Solid (/ *error* acDoc blkn cnt ss1 var_cmdecho var_osmode) (defun *error* (errmsg) (and acDoc (vla-EndUndoMark acDoc)) (and errmsg (not (wcmatch (strcase errmsg) "*CANCEL*,*EXIT*")) (princ (strcat "\n<< Error: " errmsg " >>\n")) ) (setvar 'cmdecho var_cmdecho) (setvar 'osmode var_osmode) ) (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (or (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc)) (setq var_cmdecho (getvar "cmdecho")) (setq var_osmode (getvar "osmode")) (setvar 'cmdecho 0) (setvar 'osmode 0) (prompt "\nSelect blocks to hatch with solid hatch: ") (if (setq ss1 (ssget '((0 . "INSERT")))) (progn (setq cnt 0) (repeat (setq cnt (sslength ss1)) (setq cnt (1- cnt) blkn (cons (vla-get-effectivename (vlax-ename->vla-object (_dxf -1 (entget (ssname ss1 cnt))))) blkn) ) ) (setq blkn (_removedup blkn)) (foreach x blkn (command "-bedit" x) (command "_.-hatch" "_P" "_S" "_LA" "." "_advanced" "_associativity" "_yes" "" "_select" "_all" "" "") (command "_.bsave") (command "_.bclose") (redraw) ) (setvar 'cmdecho var_cmdecho) ) ) (*error* nil) (princ) ) ;; removes duplicate element from the list (defun _removedup (l) (if l (cons (car l) (_removedup (vl-remove (car l) (cdr l)))) ) ) ;;----------------------------------------------------------------------;; ;; _dxf ;; Finds the association pair, strips 1st element ;; args - dxfcode elist ;; Example - (_dxf -1 (entget (ssname (ssget) 0))) ;; Returns - <Entity name: xxxxxxxxxxx> (defun _dxf (code elist) (cdr (assoc code elist)) ) ; (c:BKHatchAll_Solid) 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.