Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#2081 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 June 2009 - 02:00 PM

Chào bạn nguyenh001,
Bạn cần nói rõ hơn yêu cầu của bạn mới được. Bạn muốn lấy tổng các giá trị của các dim hay lấy tổng chiều dài thực của các kích thước này.
Bác Tue_NV đã gợi ý bạn về cách làm nhưng bạn lưu ý rằng các giá trị đó chính là kích thước thực của đoạn bạn lấy đim chứ không phải là kích thước bạn độ chế đâu.
Nếu bản vẽ của bạn có các kích thước độ chế lại thì cái lisp đó sẽ không hoạt động đúng được.
Các thuộc tình của dim ý bạn hỏi có phải là các mã DXF của nó không. Nếu vậy thì bạn dùng hàm (entget) sẽ có được các mã này. Việc sử dụng các mã này là tùy thuộc vào yêu cầu của bạn.
Chúc bạn vui.

Lời đầu tiên, Tue_NV khuyên các bạn nên sử dụng DIM với kích thước thật của nó, tránh tình trạng độ chế DIM

Nhưng trong một số trường hợp, việc sử dụng DIM độ chế là trường hợp không tránh khỏi, ví dụ như trong ngàng xây dựng của mình : khi vẽ mặt cắt dọc dầm, các kích thước dầm quá dài thì trong những trường hợp này sử dụng dấu cắt lửng để thể hiện chiều dài của dầm và việc sử dụng DIM độ chế là điều không tránh khỏi.

Và Tue_NV khuyên các bạn tránh đến mức tối đa việc sử dụng DIM độ chế và hãy sử dụng kích thước thật của nó.

Đây là Lisp mà Tue_NV viết ra tính tổng các giá trị DIM (chấp nhận luôn cả DIM độ chế)
Tên lệnh : Congdim

(defun c:congdim(/ ss n i S duyet ent sst nt j St duyett entt Skq)
(prompt "\n Chon cac Dim cong:")
(setq ss (ssget '((0 . "DIMENSION"))))

(setq n (sslength ss) i 0 S 0 duyet 0)

(while (< i n)
(setq ent (entget(ssname ss i)))

(if (= (cdr(assoc 1 ent)) "")
(setq duyet (cdr(assoc 42 ent)))
(setq duyet (atof(cdr(assoc 1 ent))))
)
(setq S (+ S duyet))
(setq i (1+ i))
)


(alert (rtos S 2 0))

(princ)
)
(defun c:Trudim(/ ss n i S duyet ent sst nt j St duyett entt Skq)
(prompt "\n Chon cac Dim lam so bi tru :")
(setq ss (ssget '((0 . "DIMENSION"))))

(prompt "\n Chon cac Dim lam so tru :")
(setq sst (ssget '((0 . "DIMENSION"))))

(setq n (sslength ss) i 0 S 0 duyet 0)
(setq nt (sslength sst) j 0 St 0 duyett 0)

(while (< i n)
(setq ent (entget(ssname ss i)))

(if (= (cdr(assoc 1 ent)) "")
(setq duyet (cdr(assoc 42 ent)))
(setq duyet (atof(cdr(assoc 1 ent))))
)
(setq S (+ S duyet))
(setq i (1+ i))
)

(while (< j nt)
(setq entt (entget(ssname sst j)))

(if (= (cdr(assoc 1 entt)) "")
(setq duyett (cdr(assoc 42 entt)))
(setq duyett (atof(cdr(assoc 1 entt))))
)
(setq St (+ St duyett))
(setq j (1+ j))
)

(setq Skq (- S St))

(alert (rtos Skq 2 0))

(princ)
)

  • 4

#2082 nguyenh001

nguyenh001

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 02 June 2009 - 03:12 PM

cam on ban Tue_NV rat nhieu
  • 0

#2083 thanhlam03xt

thanhlam03xt

    biết vẽ pline

  • Members
  • PipPip
  • 64 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 02 June 2009 - 04:08 PM

ban duong doan code nay thu

(defun c:sd ()
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(defun hoanh_newerror (msg)
(if (and (/= msg "Function cancelled")
(/= msg "quit / exit abort")
)
(princ (strcat "\n" msg))
)
(done)
)
;;----------
(defun init ()
(setq
HOANH_CMD (getvar "CMDECHO")
HOANH_OLDERROR *error*
*error* hoanh_newerror

)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
)
;;----------
(defun done ()
(command ".redraw")
(command ".undo" "E")
(if HOANH_CMD
(setvar "CMDECHO" HOANH_CMD)
)
(if HOANH_OLDERROR
(setq *error* HOANH_OLDERROR)
)
(princ)
)
;;----------

(defun cdim (entdt pchan pduong / tt old10
old13 old14 new10 new13 new14 p10n
p13n p14n p10o p13o p14o gocduong
gocchan pchanb pduongb loaidim
)
(defun chanvuonggoc (ph p1 p2 / ptemp pkq goc)
(setq
goc (+ (angle p1 p2) (/ pi 2.0))
ptemp (polar ph goc 1000.0)
pkq (inters ph ptemp p1 p2 nil)
)
pkq
)
(setq
tt (entget entdt)
old10 (assoc '10 tt)
old13 (assoc '13 tt)
old14 (assoc '14 tt)
p10o (cdr old10)
p13o (cdr old13)
p14o (cdr old14)
loaidim (logand (cdr (assoc '70 tt)) 7)
gocduong (cond
((= loaidim 1) (angle p13o p14o))
((= loaidim 0) (cdr (assoc '50 tt)))
(t nil)
)
pchan (cond
(pchan (list (car pchan) (cadr pchan) 0.0))
(t pchan)
)
pduong (cond
(pduong (list (car pduong) (cadr pduong) 0.0))
(t pduong)
)

)
(if gocduong
(progn
(if pchan
(setq
pchanb (polar pchan gocduong 1000.0)
p13n (chanvuonggoc
(list (car p13o) (cadr p13o) 0.0)
pchan
pchanb
)
p14n (chanvuonggoc
(list (car p14o) (cadr p14o) 0.0)
pchan
pchanb
)
new13 (cons 13 p13n)
new14 (cons 14 p14n)
tt (subst new13 old13 tt)
tt (subst new14 old14 tt)
)
)
(if pduong
(setq
pduongb (polar pduong gocduong 1000.0)
p10n (chanvuonggoc
(list (car p10o) (cadr p10o) 0.0)
pduong
pduongb
)
new10 (cons 10 p10n)
tt (subst new10 old10 tt)
)
)
(entmod tt)
)
)
gocduong
)

(defun textdimheight (ent / tmp)
(command ".copy" ent "" (list 0.0 0.0 0.0) "@")
(command ".explode" (entlast) "")
(setq tmp (cdr (assoc 40 (entget (entlast)))))
(command ".erase" "p" "")
tmp
)
(defun phia (p1 p2 p3 / x1 y1 z1 x2 y2 z2 x3 y3 z3)
(setq
x1 (car p1)
y1 (cadr p1)
z1 (caddr p1)
x2 (car p2)
y2 (cadr p2)
z2 (caddr p2)
x3 (car p3)
y3 (cadr p3)
z3 (caddr p3)
tmp (+ (* (- x1 x2) x3)
(* (- y1 y2) y3)
(* (- z1 z2) z3)
)
)
(cond
((= tmp 0.0) 0.0)
(t (/ tmp (abs tmp)))
)
)
(defun khoangcachdim (p1 ent goc / tt p2 A B D)
(setq tt (entget ent)
p2 (cdr (assoc 10 tt))
B (cdr (assoc 50 tt))
A (angle p1 p2)
D (distance p1 p2)
)
(* (* D (sin (- A B ))) (phia p1 (polar p1 goc 1.0) p2))
)

(defun phanloai (ent)
(setq
kc (khoangcachdim pgoc ent goc)
loai (fix (/ kc heightdimgoc 0.93))
)
(cons loai ent)
)

(init)
(princ "\nSap xep dim © CADViet.com")
(while (not (setq entgoc (car (entsel "\nChon duong dim goc: "))))
)
(setq
ttgoc (entget entgoc)
p13goc (cdr (assoc 13 ttgoc))
pgoc (cdr (assoc 10 ttgoc))
goc (cdr (assoc 50 ttgoc))
heightdimgoc (textdimheight entgoc)
ssd (ssget (list
(cons 0 "DIMENSION")
(cons -4 " (cons 70 32)
(cons 70 64)
(cons 70 96)
(cons 70 128)
(cons 70 160)
(cons 70 196)
(cons 70 224)
(cons -4 "OR>")
(cons -4 " (cons 50 goc)
(cons 50 (+ goc pi))
(cons 50 (- goc pi))
(cons -4 "OR>")
)
)
lstd (ss2ent ssd)
lstd (mapcar 'phanloai lstd)
lstlevel nil
)
(foreach pp lstd
(if (not (member (car pp) lstlevel))
(setq lstlevel (append lstlevel (list (car pp))))
)
)
(setq lstlevel (vl-sort lstlevel '(lambda (x1 x2) (< x1 x2)))
lstam nil
lstduong nil
lstamtmp nil
lstduongtmp nil
)
(foreach pp lstlevel
(if (< pp 0.0)
(setq lstam (append lstam (list pp)))
)
(if (> pp 0.0)
(setq lstduong (append lstduong (list pp)))
)
)
(setq index 0)
(foreach pp (reverse lstam)
(setq
index (1+ index)
lstamtmp (append lstamtmp (list (cons pp index)))
)
)
(setq
lstam lstamtmp
index 0
)
(foreach pp lstduong
(setq
index (1+ index)
lstduongtmp (append lstduongtmp (list (cons pp index)))
)
)
(setq lstduong lstduongtmp)
(setq lstlevel (append lstduong lstam (list (cons 0.0 0))))

(setq kcdimstandard (* 3.0 heightdimgoc))
(foreach pp lstd
(setq plht (car pp))
(progn
(setq
kcdimht (khoangcachdim pgoc (cdr pp) goc)
duongthu (cdr (assoc plht lstlevel))
heso (cond
((/= 0 kcdimht)
(abs (* (/ kcdimstandard kcdimht) duongthu))
)
(t 0.0)
)
diemchenht (cdr (assoc 10 (entget (cdr pp))))
pmoi (polar pgoc
(angle pgoc diemchenht)
(* heso (distance pgoc diemchenht))
)
)

(cdim (cdr pp) p13goc pmoi)
)
)
(done)
)
(princ "\nSap xep dim, SD - free lisp from www.cadviet.com")
(princ)
  • 0
Sống trên đời cần có một tấm lòng.....

#2084 nguyenh001

nguyenh001

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 02 June 2009 - 04:26 PM

xin nhờ Tue_NV và các bạn chỉ giúp mình muốn lấy thêm các thuộc tính của dim (VD:dimstyle, layer, dim prefix...)
bạn phamthanhbinh có bảo sử dụng hàm (entget), các bạn có thể chỉ cho mình cụ thể hơn được không
mình muốn viết lisp cộng dim thỏa mãn yêu cầu thuộc tính (dímtyle, layer, dim prefix....)
cám ơn các bạn rất nhiều
  • 0

#2085 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 02 June 2009 - 04:43 PM

xin nhờ Tue_NV và các bạn chỉ giúp mình muốn lấy thêm các thuộc tính của dim (VD:dimstyle, layer, dim prefix...)
bạn phamthanhbinh có bảo sử dụng hàm (entget), các bạn có thể chỉ cho mình cụ thể hơn được không
mình muốn viết lisp cộng dim thỏa mãn yêu cầu thuộc tính (dímtyle, layer, dim prefix....)
cám ơn các bạn rất nhiều


(Defun c:xem ( )

(if (null metxem)(setq metxem "1"))
(setq metxemt (atof metxem))
(setq noidungthongbaotrong (strcat "\n"
"\n---------------o Viet boi Kts: Duy o---------------"))

(princ "\nChon doi tuong muon xem thuoc tinh")
(setq doituong1 (entsel))
(while
(null doituong1)
(princ "\nChon doi tuong muon xem thuoc tinh")
(setq doituong1 (entsel))
)

(setq doituong (car doituong1))
(setq doituong (entget doituong))

(setq KIEUDOITUONG (cdr (assoc 0 doituong)))
(setq TILEDANGDUONG (cdr (assoc 48 doituong)))
(setq LAYERDOITUONG (cdr (assoc 8 doituong)))
(setq COLORDOITUONG (cdr (assoc 62 doituong)))
(setq KIEUDUONGDOITUONG (cdr (assoc 6 doituong)))

(setq TENLOP (TBLOBJNAME "LAYER" LAYERDOITUONG))
(setq DOCLOP (entget TENLOP))
(setq MAULOP (cdr (assoc 62 DOCLOP)))
(setq KIEUDUONGLOP (cdr (assoc 6 DOCLOP)))

(Cond
((= KIEUDOITUONG "INSERT")
(setq KIEUDOITUONG "BLOCK")
)
((/= KIEUDOITUONG "INSERT")
(setq KIEUDOITUONG KIEUDOITUONG)
)
)

(Cond
((= COLORDOITUONG nill)
(setq COLORDOITUONG (strcat "BYLAYER <" (itoa MAULOP) ">"))
)
((/= COLORDOITUONG nill)
(setq COLORDOITUONG (itoa COLORDOITUONG))
)
)

(Cond
((= KIEUDUONGDOITUONG nill)
(setq KIEUDUONGDOITUONG (strcat "BYLAYER <" KIEUDUONGLOP ">"))
)
((/= KIEUDUONGDOITUONG nill)
(setq KIEUDUONGDOITUONG KIEUDUONGDOITUONG)
)
)

(Cond
((= TILEDANGDUONG nill)
(setq TILEDANGDUONG "1.0000")
)
((/= TILEDANGDUONG nill)
(setq TILEDANGDUONG (rtos TILEDANGDUONG 2 4))
)
)

(setq noidungthongbao (strcat
"*DOI TUONG LA : " KIEUDOITUONG
"\n -LAYER : " LAYERDOITUONG
"\n -COLOR : " COLORDOITUONG))
;;;;;;;;;
(Cond
((= KIEUDOITUONG "TEXT")
(setq KIEUTEXT (cdr (assoc 7 doituong)))
(setq DOLONTEXT (cdr (assoc 40 doituong)))
(setq GOCTEXT (cdr (assoc 50 doituong)))
(setq noidungthongbaotrong (strcat
"\n -Style : " KIEUTEXT
"\n -Height : " (rtos DOLONTEXT 2 4)
"\n -Rotation angle : " (rtos (* 180 (/ GOCTEXT pi)) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "MTEXT")
(setq KIEUTEXT (cdr (assoc 7 doituong)))
(setq DOLONTEXT (cdr (assoc 40 doituong)))
(setq GOCTEXT (cdr (assoc 50 doituong)))
(setq noidungthongbaotrong (strcat
"\n -Style : " KIEUTEXT
"\n -Height : " (rtos DOLONTEXT 2 4)
"\n -Rotation angle : " (rtos (* 180 (/ GOCTEXT pi)) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "BLOCK")
(setq TENKHOI (cdr (assoc 2 doituong)))
(setq TYLEX (cdr (assoc 41 doituong)))
(setq TYLEY (cdr (assoc 42 doituong)))
(setq TYLEZ (cdr (assoc 43 doituong)))
(setq GOCCHEN (cdr (assoc 50 doituong)))
(setq noidungthongbaotrong (strcat
"\n -Block name : " TENKHOI
"\n -X scale factor : " (rtos TYLEX 2 4)
"\n -Y scale factor : " (rtos TYLEY 2 4)
"\n -Z scale factor : " (rtos TYLEZ 2 4)
"\n -Rotation angle : " (rtos (* 180 (/ GOCCHEN pi)) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "CIRCLE")
(setq BANKINH (cdr (assoc 40 doituong)))
(command "area" "ob" doituong1)
(setq DIENTICH (getvar "area"))
(setq CHUVI (getvar "Perimeter"))
(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Radius : " (rtos (/ BANKINH metxemt) 2 4)
"\n -Area : " (rtos (/ DIENTICH (* metxemt metxemt)) 2 4)
"\n -Circumference : " (rtos (/ CHUVI metxemt) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"
"\n"
"\n 1 met = <" metxem "> Go lenh DXEM de thay doi!"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "ARC")
(setq BANKINH (cdr (assoc 40 doituong)))
(setq GOCBD (cdr (assoc 50 doituong)))
(setq GOCKT (cdr (assoc 51 doituong)))

(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Radius : " (rtos (/ BANKINH metxemt) 2 4)
"\n -Start angle : " (rtos (* 180 (/ GOCBD pi)) 2 4)
"\n -End angle : " (rtos (* 180 (/ GOCKT pi)) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"
"\n"
"\n 1 met = <" metxem "> Go lenh DXEM de thay doi!"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "LWPOLYLINE")
(setq SODINH (cdr (assoc 90 doituong)))
(setq CHIEURONG (cdr (assoc 43 doituong)))
(command "area" "ob" doituong1)
(setq DIENTICH (getvar "area"))
(setq CHUVI (getvar "Perimeter"))
(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Width : " (rtos CHIEURONG 2 4)
"\n -so dinh : " (itoa SODINH)
"\n -Area : " (rtos (/ DIENTICH (* metxemt metxemt)) 2 4)
"\n -Perimeter : " (rtos (/ CHUVI metxemt) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"
"\n"
"\n 1 met = <" metxem "> Go lenh DXEM de thay doi!"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "POLYLINE")
(command "area" "ob" doituong1)
(setq DIENTICH (getvar "area"))
(setq CHUVI (getvar "Perimeter"))
(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Area : " (rtos (/ DIENTICH (* metxemt metxemt)) 2 4)
"\n -Perimeter : " (rtos (/ CHUVI metxemt) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"
"\n"
"\n 1 met = <" metxem "> Go lenh DXEM de thay doi!"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "SPLINE")
(command "area" "ob" doituong)
(setq DIENTICH (getvar "area"))
(setq CHUVI (getvar "Perimeter"))
(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Area : " (rtos (/ DIENTICH (* metxemt metxemt)) 2 4)
"\n -Perimeter : " (rtos (/ CHUVI metxemt) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"
"\n"
"\n 1 met = <" metxem "> Go lenh DXEM de thay doi!"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "LINE")
(setq DIEMDAU (cdr (assoc 10 doituong)))
(setq DIEMCUOI (cdr (assoc 11 doituong)))
(setq DODAI (distance DIEMDAU DIEMCUOI))
(setq GOCXIEN (angle DIEMDAU DIEMCUOI))
(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Length : " (rtos (/ DODAI metxemt) 2 4)
"\n -Angle in XY : " (rtos (* 180 (/ GOCXIEN pi)) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"
"\n"
"\n 1 met = <" metxem "> Go lenh DXEM de thay doi!"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "DIMENSION")
(setq KIEUDIM (cdr (assoc 3 doituong)))
(setq GIATRI (cdr (assoc 1 doituong)))

(Cond
((= GIATRI "")
(setq GIATRI "<>")
)
)

(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Dimension style : " KIEUDIM
"\n -Contents : " GIATRI
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"))
)
)
;;;;;;;;;
(Cond
((= KIEUDOITUONG "HATCH")
(setq KEUHATCH (cdr (assoc 2 doituong)))

(Cond
((= KEUHATCH "SOLID")
(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Hatch pattern : " KEUHATCH
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"))
)
((/= KEUHATCH "SOLID")
(setq TILEHATCH (cdr (assoc 41 doituong)))
(setq GOCHATCH (cdr (assoc 52 doituong)))
(setq noidungthongbaotrong (strcat
"\n -Linetype : " KIEUDUONGDOITUONG
"\n -Linetype Scale : " TILEDANGDUONG
"\n -Hatch pattern : " KEUHATCH
"\n -Hatch scale : " (rtos TILEHATCH 2 4)
"\n -Hatch angle : " (rtos (* 180 (/ GOCHATCH pi)) 2 4)
"\n"
"\n-------------------o Viet boi Kts: Duy o-------------------"))
)
)


)
)
;;;;;;;;;


(alert (strcat noidungthongbao noidungthongbaotrong))

(Princ))

Bạn đã biết viết lisp thì đọc cái lisp của mình gửi và lấy ra cái bạn cần mình lười lọc ra quá.
Lisp này tác dụng hiển thị thông tin đối tượng, lệnh là XEM
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#2086 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 02 June 2009 - 04:47 PM

Nhờ bác Thiêp thêm giúp mình với nha, mình chưa từng học lisp nên chẳng biết tí nào cả. Cảm ơn nha!

Lisp này đã chỉnh lại theo ý bạn:
http://www.cadviet.c.../sumCURVE_1.lsp
conghoan1003, nên học viết LISP đi, chỉ một chút xíu chỉnh sửa, tự bản thân mình làm sẽ thú vị hơn.
  • 1

#2087 nguyenh001

nguyenh001

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 02 June 2009 - 05:15 PM

cám ơn bạn duy782006, có cái này nghiên cứu tốt quá
thanks
  • 0

#2088 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 02 June 2009 - 05:50 PM

xin nhờ Tue_NV và các bạn chỉ giúp mình muốn lấy thêm các thuộc tính của dim (VD:dimstyle, layer, dim prefix...)
bạn phamthanhbinh có bảo sử dụng hàm (entget), các bạn có thể chỉ cho mình cụ thể hơn được không
mình muốn viết lisp cộng dim thỏa mãn yêu cầu thuộc tính (dímtyle, layer, dim prefix....)
cám ơn các bạn rất nhiều

Chào bạn nguyenh001,
Đây là các mã dxf của một dimension entity mà mình trích trong developer help của cad. Bạn có thể tham khảo để hiểu thêm.
http://www.cadviet.c...F_codeofdim.jpg

Còn về cach sử dụng hàm entget thì bạn xem ở đây nhé
http://www.cadviet.c...getfunction.jpg
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2089 conghoan1003

conghoan1003

    biết vẽ point

  • Members
  • PipPip
  • 99 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 03 June 2009 - 08:40 AM

Mình có chuyện này muốn nhờ anh em diễn đàn giúp đỡ!
Mình có bảng khối lượng bên Cad muốn nhập qua Excel, Các bạn xem có thể viết cho mình một cái lisp hay chỉ cho mình cách nào để nhập qua cho nhanh nhất, vì mình có rất nhiều bảng khối lượng nhu thế mà ngồi nhìn từng bảng nhập thu công thi lại quá lâu, Cảm ơn nhiều! Mình upload file cho các bạn xem nha.
File cad: http://www.cadviet.c...iles/load_2.dwg
File Excel: http://www.cadviet.c...pfiles/load.xls

Bác Hoành đâu rồi, bác giúp mình với!
Bác giúp mình viết cái lisp để làm chuyện này đi.
Mình đưa ra ý tưởng thế này nhé:
- Khi mình chạy lisp thì nó hỏi chọn những giá trị cần nhập vào bảng Excel.
- Sau đo mình quyét tấc cả các giá trị trong 1 bảng (Chỉ có các text cần nhập giá trị vào excel còn lại ẩn đi hết). Sau đó ấn Enter thì các giá trị đó sẽ sắp xếp theo thứ tự: giá trị nào ở trên thì nằm bên trái, giá trị nào ở dưới thì nằm bên phải (cùng nằm trên một dòng trong file notepad sau đó dùng excel mở ra)
- Sau quét giá trị của bảng tiếp theo (trong cad) nó lại tự động sắp xếp tương tự ở hàng phía dưới trong file notepad.
- Cứ thế cho đến khi xong thì mình sẽ co một file notepad chứa các giá trị cần nhập, rồi mình chỉ cần lấy excel mở ra rồi coppy bỏ qua bảng khối lượng của mình.
Đó là ý tưởng của mình các bác tham khảo và viết giúp mình nhé!
Thank!
  • 0
Học học nữa học mãi.
Đúp học lại!

#2090 conghoan1003

conghoan1003

    biết vẽ point

  • Members
  • PipPip
  • 99 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 03 June 2009 - 09:00 AM

Lisp này đã chỉnh lại theo ý bạn:
http://www.cadviet.c.../sumCURVE_1.lsp
conghoan1003, nên học viết LISP đi, chỉ một chút xíu chỉnh sửa, tự bản thân mình làm sẽ thú vị hơn.

Cảm ơn bạn đã nhắc nhở! Món này mình cũng muốn học lăm nhưng cũng mới biết nên chưa biết bắt đầu từ đâu nữa. Mình cũng tìm tài liêu nhưng mà tìm không ra, có chỗ nào có tài liệu học bạn có thể chỉ giúp mình với.
Thank!
  • 0
Học học nữa học mãi.
Đúp học lại!

#2091 shinnikel

shinnikel

    biết vẽ line

  • Members
  • PipPip
  • 22 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 03 June 2009 - 01:49 PM

Hình đã gửi
Nhờ các bạn Cadviet viết dùm lisp tính diện tích tấm kim loại các bước thực hiện như sau: "Gọi lệnh - Chọn các kt bề mặt (phải chuột kết thúc lệnh)- chọn vào chiêù dài L= (hoặc nhập số)- pick vào đôí tượng text cho ra diện tích tính bằng m2 (không cần điền đơn vị vào) :s_big:
  • 0

#2092 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 03 June 2009 - 04:09 PM

Cảm ơn bạn đã nhắc nhở! Món này mình cũng muốn học lăm nhưng cũng mới biết nên chưa biết bắt đầu từ đâu nữa. Mình cũng tìm tài liêu nhưng mà tìm không ra, có chỗ nào có tài liệu học bạn có thể chỉ giúp mình với.
Thank!

Bản thân tôi cũng mua sách tự học và tham khảo rất nhiều tài liệu trên diễn đàn CADVIET này. Bạn cũng phải cố gắng, không phải 1 ngày, 2 ngày là biết ngay. Đôi khi phải kiên trì vài 3 tháng mới được. Bạn ở Q7 thì xa nhà tôi quá, bạn ở Q. GV thì có gì khó, qua nhà tôi, tôi giúp bạn cùng trao đổi học hỏi.
  • 0

#2093 ngocthinh84

ngocthinh84

    biết vẽ line

  • Members
  • PipPip
  • 21 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 04 June 2009 - 07:28 AM

các bác có thể sửa giúp em đoạn lisp này được không?


(DEFUN C:DE ()
; (setq ood (getvar "osmode"))
; (SETVAR "OSMODE" 33)
(SETQ scale (GETVAR "DIMSCALE"))
(SETQ ju (* SCALE))
(SETQ P1 (GETPOINT "\n FIRST POINT ... "))
(command "donut" "0" ju p1 "")
(WHILE
; (SETVAR "OSMODE" 33)
(SETQ P2 (GETPOINT P1"\n CONT POINT ... "))
; (SETVAR "OSMODE" 0)
(SETQ K (DISTANCE P1 P2))
(SETQ ANG3 (ANGLE P1 P2))
(SETQ ANG4 (+ ANG3 (DTR 90)))
(setq st (polar p1 ang3 (/ K 2.0)))
(setq st1 (polar st ANG4 (* scale 2.8)))
(command "text" "mc" st1 (RTD ANG3) (RTOS K 2 0))
; (command "chprop" "l" "" "c" "7" "" "")
(command "donut" "0" ju p2 "")
(setq p1 p2)
)
)


cụ thể là mình muốn chọn thêm một điểm thứ 3 để xác định vị trí đặt dim. còn các thông số khác vẫn giữ nguyên.
cảm ơn mọi người đã giúp đỡ
  • 0

#2094 conghoan1003

conghoan1003

    biết vẽ point

  • Members
  • PipPip
  • 99 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 04 June 2009 - 09:52 AM

Hôm trước mình thấy trên diễn đàn có lệnh sắp xếp text rất hay nhưng chỉ sắp xếp theo lề trái. Bác nào giùp mình "nâng cấp" nó lên thành sắp xếp theo lề trái, lề phải, hay canh giữa tuỳ mình chọn.
Khi mình chạy lisp thì chương trình sẽ hỏi: bạn muốn canh trái, canh phải, hay canh giữa.
Sau đó chọn các text cần sắp xếp, rồi ấn enter. (dòng text tự động sắp xếp theo text trên cùng)
Rồi tiếp tục chọn các text tiếp theo rồi enter.
Thank!
đây là code hôm trước mình tìm được các bạn tham khảo nha.
(defun c:st1()
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ss (ssget '((0 . "TEXT")))
lst (ss2ent ss)
lst (vl-sort lst
'(lambda (e1 e2)
(>
(caddr (assoc 10 (entget e1)))
(caddr (assoc 10 (entget e2)))
)
)
)
)

(setq ddau (cdr(assoc 10 (entget(car lst))))
i 0)

(foreach e lst
(setq ent (entget e))
(setq dcuoi (cdr(assoc 10 ent)))
(setq ddauu (list (car ddau) (cadr dcuoi) 0))
(command "move" e "" dcuoi ddauu)
(setq i (1+ i))
)
(setvar "osmode" oldos)
(Princ)
)

(defun ss2ent (ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
  • 0
Học học nữa học mãi.
Đúp học lại!

#2095 xuandao0708

xuandao0708

    biết lệnh scale

  • Members
  • PipPipPip
  • 140 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 04 June 2009 - 02:30 PM

Nhờ các Bác nghiên cứu dùm em 1 chút, em có 1 đoạn lisp sưu tầm được nhưng vẫn chư được thỏa mãn lắm. Nay nhờ các Bác chỉnh dùm em 1 chút, những yêu cấu của em là như sau:
- Có thể chọn 1 lúc nhiều đối tượng để Lisp thực hiện chứ không như llisp bây giờ chỉ chọn được 2 đối tượng để thực hiện lệnh. :s_big:
- Có thể chọn đựơc nhiều loại đượng khác nhau như: line, polyline, spline. :s_big:
Thank các Bác trước, mong nhận được sự hối âm sớm của các Bác.
Đây là đoạn lisp thực hiện lệnh:

;Chuong trinh tao diem giao nhau
(defun C:Cat (/ ob1 ob2 p1 p2 q1 q2 int)
(graphscr)
(setvar "CMDECHO" 0)
(if (= (setq ob1 (car (entsel "Line 1: "))) nil) (exit))
(if (= (setq ob2 (car (entsel "\nLine 2: "))) nil) (exit))
(setq p1 (cdr (assoc 10 (entget ob1)))
p2 (cdr (assoc 11 (entget ob1)))
q1 (cdr (assoc 10 (entget ob2)))
q2 (cdr (assoc 11 (entget ob2)))
int (inters p1 p2 q1 q2))
(command "ERASE" ob1 ob2 "")
(command "LINE" p1 int p2 "")
(command "LINE" q1 int q2 "")
);defun


Đây là file mẫu: http://www.cadviet.c.../file_mau_1.dwg :s_big:
  • 0

#2096 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 04 June 2009 - 03:38 PM

Nhờ các Bác nghiên cứu dùm em 1 chút, em có 1 đoạn lisp sưu tầm được nhưng vẫn chư được thỏa mãn lắm. Nay nhờ các Bác chỉnh dùm em 1 chút, những yêu cấu của em là như sau:
- Có thể chọn 1 lúc nhiều đối tượng để Lisp thực hiện chứ không như llisp bây giờ chỉ chọn được 2 đối tượng để thực hiện lệnh. :s_big:
- Có thể chọn đựơc nhiều loại đượng khác nhau như: line, polyline, spline. :s_big:
..........................

Bạn tham khảo bài viết Cắt các đối tượng : lines, lwplines, plines, splines, ellipse, circles & arcs tại các giao điểm.
  • 0

#2097 xuandao0708

xuandao0708

    biết lệnh scale

  • Members
  • PipPipPip
  • 140 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 04 June 2009 - 09:01 PM

Thank Bác Gia_Bach nhiều, em cũng mới thấy bài đó, định qua đây để xin lỗi thì thấy Bác đã pót rồi. Lần nữa thank Bác nhiều. :s_big:
  • 0

#2098 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 04 June 2009 - 10:04 PM

các bác có thể sửa giúp em đoạn lisp này được không?
(DEFUN C:DE ()
; (setq ood (getvar "osmode"))
; (SETVAR "OSMODE" 33)
(SETQ scale (GETVAR "DIMSCALE"))
(SETQ ju (* SCALE))
(SETQ P1 (GETPOINT "\n FIRST POINT ... "))
(command "donut" "0" ju p1 "")
(WHILE
; (SETVAR "OSMODE" 33)
(SETQ P2 (GETPOINT P1"\n CONT POINT ... "))
; (SETVAR "OSMODE" 0)
(SETQ K (DISTANCE P1 P2))
(SETQ ANG3 (ANGLE P1 P2))
(SETQ ANG4 (+ ANG3 (DTR 90)))
(setq st (polar p1 ang3 (/ K 2.0)))
(setq st1 (polar st ANG4 (* scale 2.8)))
(command "text" "mc" st1 (RTD ANG3) (RTOS K 2 0))
; (command "chprop" "l" "" "c" "7" "" "")
(command "donut" "0" ju p2 "")
(setq p1 p2)
)
)
cụ thể là mình muốn chọn thêm một điểm thứ 3 để xác định vị trí đặt dim. còn các thông số khác vẫn giữ nguyên.
cảm ơn mọi người đã giúp đỡ

Chào bạn ngocthinh84,
Cái lisp bạn post lên còn thiếu các hàm bổ trợ DTR , RTD.
Chưa hiểu ý bạn là chọn điểm đặt dim nghĩa là sao vì trong lisp chỉ có đoạn code ghi text với giá trị là khoảng cách giữa hai điểm chứ không hề có việc tạo dimension bạn ạ.
Bạn nên giải thích rõ ý của bạn nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2099 ngocthinh84

ngocthinh84

    biết vẽ line

  • Members
  • PipPip
  • 21 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 05 June 2009 - 07:52 AM

dúng rồi bạn bình ạ. đoạn lisp đó dùng để lấy kích thước của 1 đoạn thẳng. với donut có kích thước theo dimscale định sẵn của từng bản vẽ và được phá vở thành text nhưng lại kô có line như dimemsion nên mình muốn sửa lại như dimemsion ấy
ở bản vẻ này:
http://www.cadviet.c...files/truss.zip
  • 0

#2100 VoHoan

VoHoan

    biết lệnh move

  • Members
  • PipPipPip
  • 129 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 05 June 2009 - 09:32 AM

Nhờ các bác giúp em việc này cái, trong 1 bản vẽ có bảng thống kê thép đ­ược tạo bởi phần mềm thống kê thép. Để sửa bảng này rất mất công là kích vào sửa từng dòng, giờ em muốn chuyển bảng này ra Cad để sửa cho tiện lợi. Mong các bác chỉ dùm cách hoặc có lisp gì làm được việc đó cho em xin với. Đây là file Cad có bảng TK thép mà em cần chuyển: http://www.cadviet.c...XA_CAT_V_16.rar
Mong có hồi âm sớm, xin cảm ơn nhiều!
  • 0