Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết Lisp theo yêu cầu

Các bài được khuyến nghị

Mình muốn LISP chén đối tượng Text theo file txt gồm tọa dộ và nội dung text, ví dụ http://www.cadviet.com/upfiles/vidu.xls . Các bạn giúp mình với!!!

@baodenhp :

Bạn hãy đọc bài viết này của Tue_NV. Đọc kỹ nhé. Nếu có gì chưa được hãy post lên đây :

http://www.cadviet.com/forum/index.php?showtopic=10969

 

@Manhhoql : "Cho mình xin lisp mà khi mình quay text nhưng text nó vẫn nằm ngang được không?"

Bạn có thể nói rõ ý này được không? Tue_NV chưa hiểu ý

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Đây là lisp sum của các curve, bạn chỉ cần thêm các tên đưởng: "LWPOLYLINE,LINE,SPLINE,ARC,CIRCLE" là được

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!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

mình đang cần list tính tổng chiều dài các dim, xin nhờ mọi người viết hộ và chỉ giúp cách viết, các hàm lấy thuộc tính của dim

cám ơn mọi ng nhiều

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
mình đang cần list tính tổng chiều dài các dim, xin nhờ mọi người viết hộ và chỉ giúp cách viết, các hàm lấy thuộc tính của dim

cám ơn mọi ng nhiều

Hàm sau lấy giá trị của dim :

(alert(rtos (cdr(assoc 42 (entget(car(entsel))))) 2 0))

 

1. đầu tiên bạn chọn dim : dùng ssget

2. Khởi tạo biến tổng dim S = 0, biến đếm i = 0, số đối tượng n dim : hàm sslength

2. Duyệt qua các Dim : hàm while. Qua từng giá trị dim lấy giá trị của dim.-> tính tổng

3. In giá trị của tổng Dim

 

Bạn hãy xây dựng thử. Có gì Tue_NV và mọi người sẽ hỗ trợ cho bạn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
mình đang cần list tính tổng chiều dài các dim, xin nhờ mọi người viết hộ và chỉ giúp cách viết, các hàm lấy thuộc tính của dim

cám ơn mọi ng nhiều

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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)
)

  • Like 1
  • Vote tăng 4

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/upfiles/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.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/upfiles/DXF_codeofdim.jpg

 

Còn về cach sử dụng hàm entget thì bạn xem ở đây nhé

http://www.cadviet.com/upfiles/entgetfunction.jpg

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/upfiles/load_2.dwg

File Excel: http://www.cadviet.com/upfiles/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!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Lisp này đã chỉnh lại theo ý bạn:

http://www.cadviet.com/upfiles/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!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

11.jpg

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:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 đỡ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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)

)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.com/upfiles/file_mau_1.dwg :s_big:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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é.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.com/upfiles/truss.zip

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.com/upfiles/XA_CAT_V_16.rar

Mong có hồi âm sớm, xin cảm ơn nhiều!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×