|
성심 성의껏 질문을 작성하여 주세요, 대충하시면 답변도 대충작성합니다.^^
① CAD 종류 : AUTO CAD
② VERSION : 2014
③ 운영 체제 : 64bt
사칙연산 리습 입니다.
+,-,*,/ 기능이 있는데 +를 제외한 -,*,/는 연속실행이 가능하나 +는 연속실행이 되지 않습니다.
한 번 실행후 엔터키 또는 스페이스바를 이용해 재실행을 하려고 할때 알 수 없는 명령이라고 뜹니다.
+기능도 연속실행이 되도록 수정 가능하신 분 있으실까요?
⑤ 파일첨부 (LISP/DWG) - DWG 첨부시 보다 정확한 답변을 얻을수 있습니다.
; 결과값을 문자를 선택해서 바꿔줌.
;;program name : 캐드내 사칙연산프로그램 ver 1.1
(defun exe()
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq cl (getvar "clayer"))
(setq e1 (entsel "\n>>첫번째숫자선택:"))
(setq a (car e1);;----------엔티티의 이름값
b (entget a);;--------엔티티의 리스트값
txt1 (assoc 1 b);;----엔티티중 해당 문자열 리스트
tt1 (cdr txt1);;------엔티티 문자열의 리스트중 뒤의값="문자열"
sum1 (atof tt1);;-----엔티티의 문자열을 정수로 변환=100
txth1 (assoc 40 b);;--엔티티 리스트중 텍스트 높이의 리스트값(40,100)
thh (cdr txth1);;-----엔티티의 텍스트높이의 리스트중 뒤의값=100
)
(setq e2 (entsel "\n>>두번째숫자선택:"))
(setq aa (car e2)
bb (entget aa)
txt2 (assoc 1 bb)
tt2 (cdr txt2)
sum2 (atof tt2)
)
(setq tl (assoc 8 b)
txtst (cdr tl)
)
)
(defun exe+()
(setq sum (+ sum1 sum2))
(setq summ (rtos sum 2 3))
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
)
(defun exe-()
(setq sum (- sum1 sum2))
(setq summ (rtos sum 2 3))
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
)
(defun exe*()
(setq sum (* sum1 sum2))
(setq summ (rtos sum 2 3))
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
)
(defun exe/()
(setq sum (/ sum1 sum2))
(setq summ (rtos sum 2 3))
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
)
(defun exe%()
(setq sum (* (/ sum1 sum2) 100))
(setq summ (rtos sum 2 3))
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
)
(defun c:++( / cl e1 a b txt1 tt1 sum1 txth1 thh e2 aa bb txt2 tt2 sum2 tl txtst sum summ p1)
(exe)
(exe+)
(princ)
)
(defun c:-( / cl e1 a b txt1 tt1 sum1 txth1 thh e2 aa bb txt2 tt2 sum2 tl txtst sum summ p1)
(exe)
(exe-)
(princ)
)
(defun c:/( / cl e1 a b txt1 tt1 sum1 txth1 thh e2 aa bb txt2 tt2 sum2 tl txtst sum summ p1)
(exe)
(exe/)
(princ)
)
(defun c:%( / cl e1 a b txt1 tt1 sum1 txth1 thh e2 aa bb txt2 tt2 sum2 tl txtst sum summ p1)
(exe)
(exe%)
(princ)
)
(defun c:+( / cl sum_m ss ok e ent sum_ p1 txth1 thh summ ent ent1 ent2)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq cl (getvar "clayer"))
(setq sum_m 0)
(setq SS (ssget))
(setq ok 0)
(while
(setq e (ssname ss ok))
(setq ent (entget e))
(setq sum_ (assoc 1 ent))
(setq sum_ (cdr sum_))
(setq sum_ (atof sum_))
(setq sum_m (+ sum_m sum_))
(setq ok (1+ ok))
)
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
(setq txth1 (assoc 40 ent))
(setq thh (cdr txth1))
(setq summ (rtos sum_m 2 3))
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
(princ)
)
(defun c:*( / cl sum_m ss ok e ent sum_ p1 txth1 thh summ ent ent1 ent2)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq cl (getvar "clayer"))
(setq sum_m 1)
(setq SS (ssget))
(setq ok 0)
(while
(setq e (ssname ss ok))
(setq ent (entget e))
(setq sum_ (assoc 1 ent))
(setq sum_ (cdr sum_))
(setq sum_ (atof sum_))
(setq sum_m (* sum_m sum_))
(setq ok (1+ ok))
)
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
(setq txth1 (assoc 40 ent))
(setq thh (cdr txth1))
(setq summ (rtos sum_m 2 3))
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
(princ)
)
(defun c:**( / cl sum_m ss ok e ent sum_ p1 txth1 thh summ ent ent1 ent2)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq cl (getvar "clayer"))
(setq sum_m 1)
(setq SS (ssget))
(setq ok 0)
(while
(setq e (ssname ss ok))
(setq ent (entget e))
(setq sum_ (assoc 1 ent))
(setq sum_ (cdr sum_))
(setq sum_ (atof sum_))
(setq sum_m (* sum_m sum_))
(setq ok (1+ ok))
)
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
(setq txth1 (assoc 40 ent))
(setq thh (cdr txth1))
(setq summ (rtos (* sum_m 0.001) 2 3))
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
(princ)
)
(defun c:***( / cl sum_m ss ok e ent sum_ p1 txth1 thh summ ent ent1 ent2)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq cl (getvar "clayer"))
(setq sum_m 1)
(setq SS (ssget))
(setq ok 0)
(while
(setq e (ssname ss ok))
(setq ent (entget e))
(setq sum_ (assoc 1 ent))
(setq sum_ (cdr sum_))
(setq sum_ (atof sum_))
(setq sum_m (* sum_m sum_))
(setq ok (1+ ok))
)
;(setq p1 (getpoint "\n>>표시할 포인트찍기:"))
;; (command "layer" "s" "tex" "" "");;---------------->> 사용자 선택레이어조정란!!
(setq txth1 (assoc 40 ent))
(setq thh (cdr txth1))
(setq summ (rtos (* sum_m 0.000001) 2 3))
;(command "text" p1 thh 0 summ)
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(command "layer" "s" cl "")
(princ)
)
(defun c:-- (/ numsel numss result val summ ent ent1 ent2)
(if
(and
(setq numsel (entsel "\n연속 숫자 선택 : "))
(setq result (distof (cdr (assoc 1 (entget (car numsel))))))
)
(progn
(while (setq numss (ssget "_+.:S" '((0 . "*TEXT"))))
(if (setq val (distof (cdr (assoc 1 (entget (ssname numss 0))))))
(setq result (- result val))
)
)
)
)
(setq summ (rtos result 2 3))
(setq ent (entsel "\n>>> 값이 찍힐 자리의 숫자를 선택해 주세요 : "))
(setq ent1 (entget (car ent)))
(setq ent2 (assoc 1 ent1))
(entmod (subst (cons 1 summ) ent2 ent1))
(princ)
); defun
(princ "\n>>사칙연산 프로그램 로딩완료 command : +,-,*,/,%,py,++,--,**")
(princ)
※ 유의사항
- ①말머리 : 말머리를 달아야 구분이 쉽겠죠^^(필수 선택)
- ②Screenshot : 이해를 돕기위해 삽입요망.
- ③파일 첨부 : 상위버전에서 테스트할 파일이 아니면 가급적 하위버전으로 저장후 첨부.
해당리습/해당파일(DWG) 도 같이 첨부하여 주세요.
- ④제 목 : 질문 내용 반영(개략적인 내용), 예) 해치를 만들고 싶어요, pline을 연결할려면?
금지어(만들어주세요? 해주세요? 안되는데 이렇게 변경해주세요? 등등)
- ⑤질문글 삭제금지 : 질문후 댓글이 달린글은 삭제금지.
여러 리플러들이 소중한 시간을 내어서 고민한후 댓글을 작성한 이상 "강력조치" 토록 하겠음.
※ 정답만이 댓글은 아닙니다. 그 답이 맞던 틀리던 그건 그 댓글로서 존중되어야 합니다.
회원님들이 글을 읽었다는것과 댓글을 달았다는건 그만큼 관심을 가지고 있고 또 그 답을 해주기 위해
검색도 해보고 도움말도 보고 고민도 하는 일련의 과정을 거치면서 나오기 때문이죠.
이에 대한 고마움과 감사함을 모르는 테러행위(?)는 없었으면 합니다.
|
첫댓글 캐드명령어 입력방식 때문에 +는 연속 실행되지 않습니다.
그래서 저는 = 으로 바꾸서 사용중 입니다
아 감사합니다~ 덕분에 이제 잘 되네요^^
고맙습니다.^^