Đế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

#901 truongliem0902

truongliem0902

    Chưa sử dụng CAD

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

Đã gửi 19 July 2008 - 10:25 AM

các bác có ai biết thì giúp gium với. tui cần một lisp như sau
cập nhật số nhà liên tục giống như lệnh CT ( viết số liên tục ) nhưng lệnh này chỉ cho ra số tự nhiên. không cho ra số A/b vd như 194/37, 194/37/4 .... mong các bác chỉ giùm
  • 0

#902 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 19 July 2008 - 10:53 AM

các bác có ai biết thì giúp gium với. tui cần một lisp như sau
cập nhật số nhà liên tục giống như lệnh CT ( viết số liên tục ) nhưng lệnh này chỉ cho ra số tự nhiên. không cho ra số A/b vd như 194/37, 194/37/4 .... mong các bác chỉ giùm

-Bạn cứ dùng lệnh CT với các số sau cùng như bình thường sau đó dùng lisp sau:
-Tên lệnh CTT
-Tác Dụng: thêm 1 nội dung do bạn nhập vào trước và sau các text bạn chọn. với trường hợp của bạn thì khi hỏi nội dung them vào phía sau bạn nhấn enter.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:ctt (/ c e ss txt cmde ttdangs ttdangt)
(setq cmde (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq ttdangt (getstring 5"\nChuoi muon them phia truoc:"))
(setq ttdangs (getstring 5"\nChuoi muon them phia sau:"))
(if (null ttdangt)(setq ttdangt ""))
(if (null ttdangs)(setq ttdangs ""))
(prompt "\nChon chu muon chinh.")
(setq ss (ssget))
(setq c 0)
(if ss (setq e (ssname ss c)))
(while e
(setq e (entget e))
; Ensure entity is text
(if (= (cdr (assoc 0 e)) "TEXT")
(progn
(setq txt (strcat ttdangt (cdr (assoc 1 e)) ttdangs))
(setq e (subst (cons 1 txt) (assoc 1 e) e))
(entmod e)
)
)
(setq c (1+ c)) ; Increment counter.
(setq e (ssname ss c)) ; Obtain next entity.
)
(setvar "CMDECHO" cmde)
(Prin I)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  • 3

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


#903 chuottui84

chuottui84

    biết vẽ line

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

Đã gửi 22 July 2008 - 04:09 PM

Bác Nguyen Hoanh ơi! Bác giúp em cái lisp về trường hợp này dc không bác
-Em muốn vẽ đường giao thông gồm: tim đường (layer1),lề dường (layer2) và đường (layer3).
khi chạy file lisp, chọn tim đường,gán layer cho tim đường, sau đó sẽ hỏi chiều rộng lòng đườg,gán layer chiều rộng lề đường, gán layer.
Nó gần jống như lệnh mline của cad, nhưng lệnh mline kô cho mình thay đổi layer riêng của từng loại đường.
Bác Nguyen Hoanh xem xét júp dùm e. Thanks bác nhiều nhiều!!!!
  • 0

#904 tdv

tdv

    biết pan

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

Đã gửi 23 July 2008 - 07:30 PM

Có Bác nào có Cái Lisp Thiết lập Bản vẽ theo các khổ in A4...A0 và tự động tạo các layer, text hay có một bản Cad mẫu đã thiết lập sẵn các thông số trên không post lên cho em em xin. Thanks các Bác nhiều nhiều .........
  • 0
Yêu là khổ không yêu là lỗ

#905 chuottui84

chuottui84

    biết vẽ line

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

Đã gửi 25 July 2008 - 04:50 PM

hic hic Bac Hoanh Bác không giúp em àh
co anh em nao giup minh ko
  • 0

#906 cuongtk2

cuongtk2

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 25 July 2008 - 07:21 PM

hic hic Bac Hoanh Bác không giúp em àh
co anh em nao giup minh ko


Để biến 1 đường thành 5 đường offset thì làm được, quá dễ.
Để biến 1 tim đường thành 1 entyti gồm 5 đuờng như Mline thì không thể dùng lisp để tạo được.
  • 0

#907 VNPT_Killer

VNPT_Killer

    biết pan

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

Đã gửi 25 July 2008 - 09:34 PM

Anh Hoành vui lòng viết giúp em lệnh lisp phá vỡ Block Attribute mà không làm thay đổi giá trị text trong Block nha!
Cụ thể như sau :
- Chạy list (tên lệnh do người viết tùy ý đặt)
- List yêu cầu chọn block Attribute (có 2 cánh chọn : Pick chuột vào từng Block Attribute hoặc kéo khối chọn cùng lúc nhiều Block Attribute )
- List sẽ phá vở Block Attribute mà không làm thay đổi giá trị text trong các Block Attribute đó.

Em có đính kèm file ví dụ theo nè anh!
http://www.cadviet.c...es/Vi_du_01.dwg
  • 0

#908 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 25 July 2008 - 09:58 PM

Anh Hoành vui lòng viết giúp em lệnh lisp phá vỡ Block Attribute mà không làm thay đổi giá trị text trong Block nha!
Cụ thể như sau :
- Chạy list (tên lệnh do người viết tùy ý đặt)
- List yêu cầu chọn block Attribute (có 2 cánh chọn : Pick chuột vào từng Block Attribute hoặc kéo khối chọn cùng lúc nhiều Block Attribute )
- List sẽ phá vở Block Attribute mà không làm thay đổi giá trị text trong các Block Attribute đó.

Em có đính kèm file ví dụ theo nè anh!
http://www.cadviet.c...es/Vi_du_01.dwg

Bạn hãy sử dụng lệnh BURST của Express Tool có sẵn trong AutoCAD.
  • 1

#909 ngayve324

ngayve324

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 515 Bài viết
Điểm đánh giá: 270 (khá)

Đã gửi 30 July 2008 - 04:13 PM

Bạn có thể post yêu cầu về autolisp ở topic này.

có thể giúp em cái lisp này với
yêu cầu thế này:
có nhiều TEXT trong bản vẽ, bây giờ em cần edit các text đó, khi edit xong thì text nào được edit được đổi màu (có thể màu mặc định của lisp chọn hay màu hiện hành bản vẽ)
Điều này có lợi khi sữa một bãn vẽ ta biết được text nào đã được sữa, text nào chưa.
cấm ơn bác trước
  • 0

#910 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 30 July 2008 - 05:00 PM

có thể giúp em cái lisp này với
yêu cầu thế này:
có nhiều TEXT trong bản vẽ, bây giờ em cần edit các text đó, khi edit xong thì text nào được edit được đổi màu (có thể màu mặc định của lisp chọn hay màu hiện hành bản vẽ)
Điều này có lợi khi sữa một bãn vẽ ta biết được text nào đã được sữa, text nào chưa.
cấm ơn bác trước

lệnh là CTE (Color Text Edit)
(defun c:CTE()
(setq ent (car (entsel "\nVao doi tuong text can sua: ")))
(command ".ddedit" ent "")
(command ".chprop" ent "" "c" "1" "")
(princ)
)
Bạn có thể sửa số 1 (màu đỏ) trong đoạn mã trên thành các màu khác.
  • 1

#911 dvdcad

dvdcad

    biết vẽ arc

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

Đã gửi 03 August 2008 - 10:47 AM

các bác cho em hỏi.

mở một bản vẽ cad chọn tỷ lệ ví dụ chọn tỷ lệ 1/500
làm thế nào để cái 1/500 nó hiện ở góc dưới của màn hình bản vẽ(ở bên phải của cursor coordinate values"F6")

bác nào có lisp làm dc việc này post cho em coi với
  • 0

#912 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 03 August 2008 - 01:57 PM

các bác cho em hỏi.

mở một bản vẽ cad chọn tỷ lệ ví dụ chọn tỷ lệ 1/500
làm thế nào để cái 1/500 nó hiện ở góc dưới của màn hình bản vẽ(ở bên phải của cursor coordinate values"F6")

bác nào có lisp làm dc việc này post cho em coi với

Phụ thuộc vào bạn quan niệm thế nào là 1/500
  • 0

#913 dvdcad

dvdcad

    biết vẽ arc

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

Đã gửi 03 August 2008 - 02:51 PM

Phụ thuộc vào bạn quan niệm thế nào là 1/500

ko hiểu ý bác nguyen hoanh. em chỉ muốn khi em chọn tỷ lệ 1/ 500 thì nó thể hiện lên để em biết thôi
  • 0

#914 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 03 August 2008 - 04:57 PM

ko hiểu ý bác nguyen hoanh. em chỉ muốn khi em chọn tỷ lệ 1/ 500 thì nó thể hiện lên để em biết thôi

Ý mình là làm thế nào để máy tính biết bạn đang vẽ 1/500?
  • 0

#915 ph168xd

ph168xd

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 779 Bài viết
Điểm đánh giá: 309 (khá)

Đã gửi 03 August 2008 - 09:48 PM

Đã từng nghe qua lish này nhưng không nhớ ở đâu.
Em cần lish. tìm toạ độ của các điểm khi biết gốc toạ độ
Thực hiện lệnh.
lệnh tắt>chọn điểm làm gốc toạ độ, lish sẽ hiểm thị luôn (0,0) ngay bên cạnh vị trí đó.
Tiếp tục pick điểm. Lish sẽ ghi luôn toạ độ của điểm đó so với gốc (0,0) vừa chọn tại vị trí đó
Font chữ mặc định là chhbg.shx với chiều cao là 220.
Thanks các Bác nhìu
  • 0

#916 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 03 August 2008 - 10:49 PM

Đã từng nghe qua lish này nhưng không nhớ ở đâu.
Em cần lish. tìm toạ độ của các điểm khi biết gốc toạ độ
Thực hiện lệnh.
lệnh tắt>chọn điểm làm gốc toạ độ, lish sẽ hiểm thị luôn (0,0) ngay bên cạnh vị trí đó.
Tiếp tục pick điểm. Lish sẽ ghi luôn toạ độ của điểm đó so với gốc (0,0) vừa chọn tại vị trí đó
Font chữ mặc định là chhbg.shx với chiều cao là 220.
Thanks các Bác nhìu

bạn nghe trong giấc mơ? lisp này chưa từng có trên cadviet.

đây là lisp tôi vừa viết theo yêu cầu của bạn, tên lệnh là TDD (tọa độ điểm) và TDG (tọa độ gốc):
(defun c:tdd()
(if (null dgoc)
(progn
(alert "Chua co diem goc, ban hay chon diem goc")
(c:tdg)
)
(while (setq p (getpoint "\nVao diem: "))
(ctxt p)
)
)
(princ)
)
(defun c:tdg()
(setq dgoc (getpoint "\nVao diem goc: "))
(ctxt dgoc)
(princ)
)
(defun ctxt(p)
(setq lst (mapcar 'rtos (mapcar '- p dgoc))
gt (strcat (car lst)","(cadr lst))
)
(entmake (list (cons 0 "TEXT") (cons 10 (trans p 1 0)) (cons 1 gt) (cons 40 220)))
)

  • 0

#917 traitimsat034

traitimsat034

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 04 August 2008 - 12:44 AM

anh viết cho em xin một lisp nội suy cao độ từ text cao độ điểm.
- cao độ cơ sở để nội suy dưới dạng text ( cao độ bằng giá trị text, toạ độ trùng với điểm chèn text)
- cú pháp lệnh: khi nhập lệnh chương trình sẽ yêu cầu chọn điểm cần nội suy sau đó sẽ yêu cầu chọn ít nhất 3 text cao độ cơ sở để nội suy
- kết quả được ghi ra text (text kết quả lấy textstyle hiện hành, có điểm chèn trùng với điểm cần nội suy, có thể căn trái, phải, giữa tuỳ người viết)
em cám ơn anh!
  • 0

#918 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 04 August 2008 - 03:05 AM

anh viết cho em xin một lisp nội suy cao độ từ text cao độ điểm.
- cao độ cơ sở để nội suy dưới dạng text ( cao độ bằng giá trị text, toạ độ trùng với điểm chèn text)
- cú pháp lệnh: khi nhập lệnh chương trình sẽ yêu cầu chọn điểm cần nội suy sau đó sẽ yêu cầu chọn ít nhất 3 text cao độ cơ sở để nội suy
- kết quả được ghi ra text (text kết quả lấy textstyle hiện hành, có điểm chèn trùng với điểm cần nội suy, có thể căn trái, phải, giữa tuỳ người viết)
em cám ơn anh!

Phù, phải mất công quay lại hình học giải tích lớp 12 để tính toán mãi mới có được các công thức nội suy.

Lệnh NS (nội suy) dưới đây sẽ thực hiện điều bạn muốn. Nội suy cao độ của 1 điểm dựa vào tọa độ của 3 điểm cho trước.

(defun getZ (p0 p1 p2 p / vta vtb x0 y0 z0 x1 y1 z1 x2 y2 z2 x y A B C)
(setq
p (list (car p) (cadr p))
vta (mapcar '- p1 p0)
vtb (mapcar '- p2 p0)
)
(mapcar 'set
'(x0 y0 z0 x1 y1 z1 x2 y2 z2 x y)
(append p0 vta vtb p)
)
(setq
A (- (* y1 z2) (* y2 z1))
B (- (* z1 x2) (* z2 x1))
C (- (* x1 y2) (* x2 y1))
)
(/ (- (+ (* A x0) (* B y0) (* C z0)) (+ (* A x) (* B y))) C)
)

(defun c:ns (/ ss3 pgoc lste tt)
(princ "\nChon 3 text dau tien: ")
(setq ss3 (ssget '((0 . "TEXT"))))
(if (/= (sslength ss3) 3)
(alert (strcat "\nBan vua chon " (itoa (sslength ss3)) " text\nban can phai chon 3 text"))
(progn
(setq
pgoc (trans (getpoint "\nVao diem noi suy: ") 1 0)
lste (mapcar 'ssname (list ss3 ss3 ss3) '(0 1 2))
tt (entget (car lste))
lste (mapcar '(lambda (e)
(setq tt (entget e)
p (cdr (assoc 10 tt))
gt (atof (cdr (assoc 1 tt)))
)
(reverse (cons gt (cdr (reverse p))))
)
lste
)
)
(mapcar 'set '(p0 p1 p2) lste)
(setq tt (subst (cons 10 pgoc) (assoc 10 tt) tt)
tt (subst (cons 1 (rtos (getz p0 p1 p2 pgoc))) (assoc 1 tt) tt)
)
(entmake tt)
)
)
)

  • 1

#919 traitimsat034

traitimsat034

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 04 August 2008 - 08:49 AM

Phù, phải mất công quay lại hình học giải tích lớp 12 để tính toán mãi mới có được các công thức nội suy.

Lệnh NS (nội suy) dưới đây sẽ thực hiện điều bạn muốn. Nội suy cao độ của 1 điểm dựa vào tọa độ của 3 điểm cho trước.


(defun getZ (p0 p1 p2 p / vta vtb x0 y0 z0 x1 y1 z1 x2 y2 z2 x y A B C)
(setq
p (list (car p) (cadr p))
vta (mapcar '- p1 p0)
vtb (mapcar '- p2 p0)
)
(mapcar 'set
'(x0 y0 z0 x1 y1 z1 x2 y2 z2 x y)
(append p0 vta vtb p)
)
(setq
A (- (* y1 z2) (* y2 z1))
B (- (* z1 x2) (* z2 x1))
C (- (* x1 y2) (* x2 y1))
)
(/ (- (+ (* A x0) (* B y0) (* C z0)) (+ (* A x) (* B y))) C)
)

(defun c:ns (/ ss3 pgoc lste tt)
(princ "\nChon 3 text dau tien: ")
(setq ss3 (ssget '((0 . "TEXT"))))
(if (/= (sslength ss3) 3)
(alert (strcat "\nBan vua chon " (itoa (sslength ss3)) " text\nban can phai chon 3 text"))
(progn
(setq
pgoc (trans (getpoint "\nVao diem noi suy: ") 1 0)
lste (mapcar 'ssname (list ss3 ss3 ss3) '(0 1 2))
tt (entget (car lste))
lste (mapcar '(lambda (e)
(setq tt (entget e)
p (cdr (assoc 10 tt))
gt (atof (cdr (assoc 1 tt)))
)
(reverse (cons gt (cdr (reverse p))))
)
lste
)
)
(mapcar 'set '(p0 p1 p2) lste)
(setq tt (subst (cons 10 pgoc) (assoc 10 tt) tt)
tt (subst (cons 1 (rtos (getz p0 p1 p2 pgoc))) (assoc 1 tt) tt)
)
(entmake tt)
)
)
)

hì, cám ơn anh nhiều lắm. anh nhiệt tình quá. cám ơn anh thêm lần nữa!!!!!!
  • 0

#920 meohoang

meohoang

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 811 Bài viết
Điểm đánh giá: 342 (khá)

Đã gửi 04 August 2008 - 09:54 AM

Xin nhờ bác Nguyễn Hoành chỉnh lại lisp C:MTP vì khi chọn nhiều đối tượng cặp "TEXT - POINT" thì vị trí text và point không khớp nhau.
Cụ thể : text ghi 413.25 point có Z=413.25 phải trùng nhau. Lisp của bác chọn từng cặp thì được nhưng nhiều cặp là bị loạn xà bần
Cám ơn bác trước nhé
  • 0