Jump to content

get single block name and use a filter on the name for using inserting another block


patjeacad

Recommended Posts

hello everyone, what I would like to program in lisp is the following: in the drawing I have a block (bolt) of which I want to use the name to enter another block (nut). I test for insert 0 and test for the name of the block. Because there are many lengths of, for example, an M8 bolt, the name of the block must be filtered, otherwise the correct block (nut) will not be automatically selected and placed in the drawing. see attached lisp file, with comments.

(DEFUN c:nutinsert (/ A B D )
	(PROGN
		(SETQ A (ENTSEL "\nSelect Block: "))
		(IF  A
			(PROGN ; 
				(SETQ B (CDR (ASSOC 0 (ENTGET (CAR A)))))
				(IF  (NOT (= B "INSERT"))
					(ALERT "\nselectinset is not a Block.")
				) 
				(IF (= B "INSERT")
					(PROGN
						(SETQ D (CDR (ASSOC 2 (ENTGET (CAR A))))) ;get blockname
						;following are examples of bolt names, the list is much longer. I only need 
						(IF (OR (= D "NEN1555-M08x070E")          								;M8
							(OR	(= D "NEN1555-M06x040E"))         								;M6
							(OR (= D "NEN1555-M10x090E"))         								;M10
							(OR	(= D "NEN1555-M16x100E"))         								;M16
							(OR	(= D "NEN1568-M03x050E"))         								;M3
							(OR	(= D "NEN1568-M08x120E"))         								;M8
							(OR	(= D "NEN1568-M06x060E"))         								;M6
							    (= D "NEN1555-M12x050E"))         								;M12 
													;I need a filter only M8 OR M6 OR M10 ECT, of the blockname.
							(PROGN
								(Setvar "Cmdecho" 0)
								(SETQ OLDLAYER (GETVAR "CLAYER"))
								(SETQ LAY (IF  (NOT (TBLSEARCH "LAYER" "03_GEOMETRIE_050"))
									(COMMAND "LAYER" "M" "03_GEOMETRIE_050" "C" "7" "" "L" "CONTINUOUS" "" ""))
								)	
								(COMMAND "LAYER" "S" "03_GEOMETRIE_050" "")
								(SETQ Y (getpoint "\nGeef Invoegpunt     : "))
								(Command "-Insert" "NEN1560-M008-E";the BLOCK name is based on M8. 
																   ;it has to be flexible, M3 M4 M5 M6 M8 M10 ECT. 
								Y "" "" Pause)
								(SETVAR "CLAYER" OLDLAYER)
								(PRINC) 
							)
						)
					)
				)
			)
		)
	)
)
(PRINC)

 

Link to comment
Share on other sites

A couple of different ways find the "-" using (vl-position then look at each character after it should be a "M" Then a "0 1 2 3 4 5 6 7 8 9" then check next if its also "0 1 2 3 4 5 6 7 8 9"

 

Try this 

(setq str "NEN1555-M06x040E")

(setq pos (+ 2 (vl-string-position 45 str)))
(setq char1 (strcase (substr str pos 1)))
(if (/= char1 "M")
  (princ "\nThe text chosen does not have a M bolt ")
  (progn
    (setq char2 (substr str (+ 1 pos) 1))
     (if (or (< (ascii  char2) 58)(> (ascii  char2) 47))
      (setq str2 (strcat char1 char2))
     )
    (setq char2 (substr str (+ 2 pos) 1))
    (if (or (< (ascii char2) 58)(> (ascii char2) 47))
     (setq str2 (strcat str2 char2))
    )
  )
)
       
; "M06"

 

 

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...