Đến nội dung


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

Xem giúp đoạn lisp của mình vẽ pline có nhập chiều dài và góc


  • Please log in to reply
52 replies to this topic

#1 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 18 August 2010 - 11:51 AM

Ý tưởng của mình là viết 1 đoạn lisp để cad vẽ 1 đường PLINE, yêu cầu người dùng nhập vào: điểm đầu của đường thẳng, chiều dài đường thẳng và góc mà đường thẳng đó hợp với phương mặt phẳng ngang.

Ví dụ: đoạn thẳng cần vẽ có chiều dài là 100 và hướng theo 1 góc xéo 45 độ. Bình thường nếu vẽ trong cad phải thao tác như sau:
- gõ lệnh pline
- click chọn điểm đầu tiên (first point)
- sau đó ở dòng lệnh second point nhập vào: @100<45

Và dưới đây là đoạn lisp mà mình viết nhưng không cho ra kết quả như mong muốn mà cho kết quả là "UNKNOW DPL..." (lệnh mà mình viết là DPL):

(defun c:dpl()
(setq P1 (getpoint "cho diem dau: "))
(setq L (getint "nhap chieu dai: "))
(setq G (getint "nhap so goc: "))
(setq P2 (list @ L < G))
(command "pline" P1 P2 "")
(princ)
)

Mình biết chắc là đoạn lisp trên có sai nhưng mình không biết sửa như thế nào! Mình chỉ mới tìm hiểu lisp trên diễn đàn CADVIET thui nên chưa rành lắm. Mong các bác có kinh nghiệm chỉ bảo giủp. Nếu được thì bác nào hướng dẫn cho cách viết đoạn lisp để thực hiện ý tưởng trên.

CẢM ƠN CÁC BÁC RẤT RẤT NHIỀU!
  • 0

#2 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 18 August 2010 - 12:39 PM

Bạn sửa đoạn này
(setq P2 (list @ L < G))
Thành
(setq P2 (polar P1 (* (/ g 180.0 )pi) L))
  • 1

#3 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 18 August 2010 - 01:43 PM

Vì cách nhập trực tiếp trên cad không giống như câu lệnh của Autolisp nên
bạn thử đoạn này xem để so sánh nhé. Có gì pm
(defun c:dpl ()
(setq P1 (getpoint "cho diem dau: "))
(setq L (getreal "nhap chieu dai: "))
(setq G (getangle "nhap so goc: "))
(setq P2 (polar P1 G L))
(command "pline" P1 P2 "")
(princ)
)

  • 1

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#4 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 18 August 2010 - 02:21 PM

Ý tưởng của mình là viết 1 đoạn lisp để cad vẽ 1 đường PLINE, yêu cầu người dùng nhập vào: điểm đầu của đường thẳng, chiều dài đường thẳng và góc mà đường thẳng đó hợp với phương mặt phẳng ngang.

Ví dụ: đoạn thẳng cần vẽ có chiều dài là 100 và hướng theo 1 góc xéo 45 độ. Bình thường nếu vẽ trong cad phải thao tác như sau:
- gõ lệnh pline
- click chọn điểm đầu tiên (first point)
- sau đó ở dòng lệnh second point nhập vào: @100<45

Và dưới đây là đoạn lisp mà mình viết nhưng không cho ra kết quả như mong muốn mà cho kết quả là "UNKNOW DPL..." (lệnh mà mình viết là DPL):

(defun c:dpl()
(setq P1 (getpoint "cho diem dau: "))
(setq L (getint "nhap chieu dai: "))
(setq G (getint "nhap so goc: "))
(setq P2 (list @ L < G))
(command "pline" P1 P2 "")
(princ)
)

Mình biết chắc là đoạn lisp trên có sai nhưng mình không biết sửa như thế nào! Mình chỉ mới tìm hiểu lisp trên diễn đàn CADVIET thui nên chưa rành lắm. Mong các bác có kinh nghiệm chỉ bảo giủp. Nếu được thì bác nào hướng dẫn cho cách viết đoạn lisp để thực hiện ý tưởng trên.

CẢM ƠN CÁC BÁC RẤT RẤT NHIỀU!


Sửa thành như này:

(defun c:dpl()
(setq P1 (getpoint "cho diem dau: "))
(setq L (getstring 5"nhap chieu dai: "))
(setq G (getstring 5"nhap so goc: "))
(setq P2 (strcat "@" L "<" G))
(command "pline" P1 P2 "")
(princ)
)


-Hai bác trên dùng hàm polar.
-Mình dùng hàm strcat cho trực quan bạn dể hiểu.
+Cách dùng hàm:

(setq ketqua (strcat "giatri1" bien1 "giatri2" bien2))
Trong đó strcat là hàm ghép.
Giá trị nằm trong "" là giá trị cố định.
Giá trị nằm ngoài "" là biến phải gán giá trị cho nó trước.
Các giá trị muốn ghép cách nhau 1 khoảng trắng.
  • 5

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


#5 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 23 August 2010 - 11:24 AM

Woa! Thanks các bác nhìu nhìu lắm!!! :D

Các cách trên em đã thử và đã làm được hết và đúng ý tưởng của em rùi. Các bác đã júp em jải wuyết đc một vấn đề rất lớn rùi đóa. Một lần nữa cảm ơn các bác rất rất rất nhìu. :D

Bây jờ em chỉ còn thêm một vấn đề nữa là làm sao cho lệnh DPL này sau khi vẽ xong một đường sẽ lặp lại tiến trình nhập số liệu và vẽ đến khi nào mình nhấn phím ESC thì kết thúc việc vẽ. Em nghĩ chắc phải dùng vòng lặp các bác nhỉ?
  • 0

#6 18011985

18011985

    biết lệnh properties

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

Đã gửi 23 August 2010 - 06:16 PM

Bạn vẽ 2 điểm thì vẽ thế kia được nếu bạn muốn lặp lại để vẽ thì cũng được nhưng như thế kết quả thu được là những đoạn polyline rời dạc . Nên bạn thử dùng lsp này xem. Đáp ứng được các yêu cầu của bạn (Chú ý chỉ thoát và hoàn thành polyline khi chiều dài nhập vào là nil "Tức bạn gõ space hoặc enter", nếu bạn ấn ESC bạn phải làm lại từ đầu).

(defun c:pla (/ CHIEUDAI D2 DX DY GOC TDX TDY QUYDOI)
(setq d1 (getpoint "\n Nhap diem dau: "))
(setq dx (car d1) dy (cadr d1))
(defun quydoi ()
(setq chieudai (getreal "\n Nhap chieu dai: "))
(if (/= chieudai nil)(progn
(setq goc (getangle "\n Nhap goc: "))
(setq tdx (* (cos goc) chieudai))
(setq tdy (* (sin goc) chieudai))
(setq d2 (list (+ dx tdx) (+ dy tdy) 0.0))
(setq dx (car d2) dy (cadr d2))
)
)
)
(quydoi)
(entmake (list (cons 0 "POLYLINE")
(cons 6 "BYLAYER")
(cons 8 "net1")
(cons 62 1)
(cons 10 (list 0.0 0.0 0.0))
))
(entmake (list (cons 0 "VERTEX")
(cons 6 "BYLAYER")
(cons 8 "net1")
(cons 10 d1)
))
(while (/= chieudai nil)
(entmake (list (cons 0 "VERTEX")
(cons 6 "BYLAYER")
(cons 8 "net1")
(cons 10 d2)
))
(quydoi)
)
(entmake (list (cons 0 "SEQEND")
(cons 6 "BYLAYER")
(cons 8 "net1")))
(princ)
)

Chúc các bạn sức khoẻ và tích cực đóng góp nhiều lsp hơn nữa cho diễn đàn.
  • 1
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#7 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 26 August 2010 - 08:22 AM

Bạn vẽ 2 điểm thì vẽ thế kia được nếu bạn muốn lặp lại để vẽ thì cũng được nhưng như thế kết quả thu được là những đoạn polyline rời dạc . Nên bạn thử dùng lsp này xem. Đáp ứng được các yêu cầu của bạn (Chú ý chỉ thoát và hoàn thành polyline khi chiều dài nhập vào là nil "Tức bạn gõ space hoặc enter", nếu bạn ấn ESC bạn phải làm lại từ đầu).


(defun c:pla (/ CHIEUDAI D2 DX DY GOC TDX TDY QUYDOI)
(setq d1 (getpoint "\n Nhap diem dau: "))
(setq dx (car d1) dy (cadr d1))
(defun quydoi ()
(setq chieudai (getreal "\n Nhap chieu dai: "))
(if (/= chieudai nil)(progn
(setq goc (getangle "\n Nhap goc: "))
(setq tdx (* (cos goc) chieudai))
(setq tdy (* (sin goc) chieudai))
(setq d2 (list (+ dx tdx) (+ dy tdy) 0.0))
(setq dx (car d2) dy (cadr d2))
)
)
)
(quydoi)
(entmake (list (cons 0 "POLYLINE")
(cons 6 "BYLAYER")
(cons 8 "net1")
(cons 62 1)
(cons 10 (list 0.0 0.0 0.0))
))
(entmake (list (cons 0 "VERTEX")
(cons 6 "BYLAYER")
(cons 8 "net1")
(cons 10 d1)
))
(while (/= chieudai nil)
(entmake (list (cons 0 "VERTEX")
(cons 6 "BYLAYER")
(cons 8 "net1")
(cons 10 d2)
))
(quydoi)
)
(entmake (list (cons 0 "SEQEND")
(cons 6 "BYLAYER")
(cons 8 "net1")))
(princ)
)

Chúc các bạn sức khoẻ và tích cực đóng góp nhiều lsp hơn nữa cho diễn đàn.


Cảm ơn bác! Vì mình đang cần viết LISP để vẽ tự động mặt bằng tuyến lưới điện (mình đang làm khâu thiết kế trong ngành Điện). Mà 1 bản vẽ mặt bằng tuyến lưới điện yêu cầu không cần cao nhưng nếu vẽ bằng tay cũng mất khá nhìu thời gian cho nên mình muốn tự động hóa bằng cách chỉ cần nhập khoảng cách và hướng góc mà đường điện sẽ đi. Mình xin mô tả về bản vẽ mặt bằng tuyến lưới điện cơ bản của mình như sau:

- Lưới điện cần thể hiện gồm đường dây, trụ điện và các phụ kiện khác như: neo, tiếp địa...
- Đường dây sẽ được thể hiện bằng các đường PLine nối tiếp nhau. Khoảng cách giữa 2 điểm đầu và cuối của một đường PLine chính là khoảng cách giữa 2 trụ điện.
- Trên mỗi điểm đầu và điểm cuối sẽ bố trí lên đó 1 trụ điện và sẽ có thể có thêm neo hoặc tiếp địa.

Chỉ đơn giản là thế nhưng mình muốn viết LISP với ý tưởng như sau:

- Mình sẽ tạo một Menu Box để người dùng có thể tương tác nhập số liệu trên đó.
- Tạo các Block gồm: trụ điện, neo, tiếp địa...
- Người dùng sẽ nhập vào chiều dài đường dây và góc (để vẽ đường PLine như đã làm ở trên).
- Mỗi lúc vẽ 1 đường PLine, trong Menu Box sẽ có các List Box xổ xuống để người dùng lựa chọn sẽ đặt trụ điện, neo, tiếp địa... vào các điểm nút của mỗi đường PLine (CAD sẽ đặt các block như ta đã tạo ở trên vào các điểm đầu và cuối của đường PLine).
- Tiếp tục quay lại bước nhập vào chiếu dài đường dây và góc ở trên để vẽ tiếp 1 đường PLine nối tiếp vào điểm cuối của đường PLine vừa vẽ và thực hiện các bước tiếp theo cho đến khi giá trị chiều dài đường dây là NIL.

Không biết ý tưởng này của mình có khả thi không các Bác nhỉ?
Mình xin up lên hình chụp 1 bản vẽ về mặt bằng tuyến lưới điện mà mình thường vẽ để các Bác dễ hình dung. Trong hình các bác thấy đường dây đi thẳng vì mình chỉ chụp 1 góc bản vẽ thui nhưng thực tế thì đưòng dây sẽ có nhiều góc nữa.

THANK CÁC BÁC ĐÃ NHIỆT TÌNH JÚP ĐỠ EM RẤT NHÌU!!!

Hình đã gửi
  • 0

#8 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 26 August 2010 - 11:29 AM

Cái này đối với Autolisp thì dễ hơn ăn ớt nữa
Nếu bạn có nhu cầu mình sẽ viết theo đơn đặt hàng của bạn bao gồm :
-Thiết kế trắc dọc+mặt bằng điện
- Tự động sắp xếp vô khung A3,A1,A0...
- Tự động in ấn các khổ giấy
- Tự động tiền chuyển vô tài khoản ... he he

Bon...on...n
  • 1

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#9 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 26 August 2010 - 01:38 PM

Cái này đối với Autolisp thì dễ hơn ăn ớt nữa
Nếu bạn có nhu cầu mình sẽ viết theo đơn đặt hàng của bạn bao gồm :
-Thiết kế trắc dọc+mặt bằng điện
- Tự động sắp xếp vô khung A3,A1,A0...
- Tự động in ấn các khổ giấy
- Tự động tiền chuyển vô tài khoản ... he he

Bon...on...n

Bác tư vấn miễn phí cho đoạn thay đổi tỉ lệ của hatch bằng lisp với. Mình làm qui hoạch 1 bản vẽ phải in ra 1 bản A0 và 1 bản A3. Nên cần thay đổi thèn này. Viết như sau nhưng ko hiểu sao ko cập nhật đc.

(defun c:sch (/ c e ss dtsc tlsc)
(command "undo" "be")
(setq tlsc (getreal "\nTi le phong : "))
(prompt "\nChon doi tuong muon chinh.")
(setq ss (ssget '((0 . "hatch"))))
(setq c 0)
(setq N (sslength ss))
(while (< c N)
(setq eT (ssname ss c))
(setq e (entget eT))



(setq dtsc (* (cdr (assoc 41 e)) tlsc))
(setq e (subst (cons 41 dtsc) (assoc 41 e) e))
(entmod e)
;(setq dl (fix (* (cdr (assoc 41 e)) tlsc)))
;(princ (strcat "\nti le: <" (itoa dl) ">"))

(setq c (1+ c))
)
(command "undo" "end")
(Princ)
)


Đoạn màu xanh là mình dùng kiểm tra xem biến dl có tồn tại ko thì kết quà là có nhưng lại ko cập nhật đc.
  • 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


#10 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 26 August 2010 - 03:04 PM

Bác tư vấn miễn phí cho đoạn thay đổi tỉ lệ của hatch bằng lisp với. Mình làm qui hoạch 1 bản vẽ phải in ra 1 bản A0 và 1 bản A3. Nên cần thay đổi thèn này. Viết như sau nhưng ko hiểu sao ko cập nhật đc.

(defun c:sch (/ c e ss dtsc tlsc)
(command "undo" "be")
(setq tlsc (getreal "\nTi le phong : "))
(prompt "\nChon doi tuong muon chinh.")
(setq ss (ssget '((0 . "hatch"))))
(setq c 0)
(setq N (sslength ss))
(while (< c N)
(setq eT (ssname ss c))
(setq e (entget eT))
(setq dtsc (* (cdr (assoc 41 e)) tlsc))
(setq e (subst (cons 41 dtsc) (assoc 41 e) e))
(entmod e)
;(setq dl (fix (* (cdr (assoc 41 e)) tlsc)))
;(princ (strcat "\nti le: <" (itoa dl) ">"))

(setq c (1+ c))
)
(command "undo" "end")
(Princ)
)


Đoạn màu xanh là mình dùng kiểm tra xem biến dl có tồn tại ko thì kết quà là có nhưng lại ko cập nhật đc.


duy782006 dùng thử LISP này (sử dụng hàm VLA-...)
(defun c:sch (/ c n objhatch ss tlsc)
(vl-load-com)
(command "undo" "be")
(setq tlsc (getreal "\nTi le phong : "))
(prompt "\nChon doi tuong muon chinh.")
(setq ss (ssget '((0 . "hatch"))))
(setq c 0)
(setq N (sslength ss))
(while (< c N)
(setq objHatch (vlax-ename->vla-object (ssname ss c)))
(vla-put-PatternScale objHatch tlsc)
;(vla-update objHatch)
(setq c (1+ c)) )
(command "undo" "end")
(Princ))

  • 1

#11 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 26 August 2010 - 03:16 PM

Đối với HATCH thì viết như bác xài hàm entmod thì nó không động đậy được
BÁc thử xài đoạn mã này xem nhé
(defun c:sch (/)
(setvar "CMDECHO" 0)
(command "undo" "be")
(if (= tlsc nil)
(setq tlsc1 2.00)
(setq tlsc1 tlsc)
)
(setq
tlsc (GETREAL (strcat "\nTi le ban ve: <" (rtos tlsc1 2 2) ">"))
)
(if (= tlsc nil)
(setq tlsc tlsc1)
)
(prompt "\nChon doi tuong muon chinh.")
(setq ss (ssget '((0 . "hatch"))))
(setq c 0)
(SETQ N (SSLENGTH SS))
(while (< c N)
(setq eT (ssname ss c))
(setq e (entget eT))
(setq dtsc (* (cdr (assoc 41 e)) tlsc))
(command "hatchedit" et "p" "" dtsc "")
(setq c (1+ c))
)
(command "undo" "end")
(Princ)
)


Bon ... on ... n
  • 2

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#12 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 26 August 2010 - 03:16 PM

duy782006 dùng thử LISP này (sử dụng hàm VLA-...)

Vẫn đứng im bác ạ. Về lý thuyết đoạn của Duy viết cũng ko có sai nhưng ko hiểu sao lại ko đc thôi (đoạn tương tự với linetype scale thì chạy êm ru)

Đối với HATCH thì viết như bác xài hàm entmod thì nó không động đậy được
Bon ... on ... n

Ok rồi bác. Thank!
  • 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


#13 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 26 August 2010 - 03:36 PM

Lưu ý bác khi viết lisp nếu bác viết kiểu này

(defun c:sch (/ c e ss dtsc tlsc)


thì các biến sẽ mất khi chương trình kết thúc xong và khi chạy lần 2 thì nó sẽ không lưu biến tlsc khi chạy tiếp và khi đó mất công nhập lại.
  • 4

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#14 thiep

thiep

    biết dimbaseline

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

Đã gửi 26 August 2010 - 03:47 PM

Bác tư vấn miễn phí cho đoạn thay đổi tỉ lệ của hatch bằng lisp với. Mình làm qui hoạch 1 bản vẽ phải in ra 1 bản A0 và 1 bản A3. Nên cần thay đổi thèn này. Viết như sau nhưng ko hiểu sao ko cập nhật đc.

(defun c:sch (/ c e ss dtsc tlsc)
(command "undo" "be")
(setq tlsc (getreal "\nTi le phong : "))
(prompt "\nChon doi tuong muon chinh.")
(setq ss (ssget '((0 . "hatch"))))
(setq c 0)
(setq N (sslength ss))
(while (< c N)
(setq eT (ssname ss c))
(setq e (entget eT))
(setq dtsc (* (cdr (assoc 41 e)) tlsc))
(setq e (subst (cons 41 dtsc) (assoc 41 e) e))
(entmod e)
;(setq dl (fix (* (cdr (assoc 41 e)) tlsc)))
;(princ (strcat "\nti le: <" (itoa dl) ">"))

(setq c (1+ c))
)
(command "undo" "end")
(Princ)
)


Đoạn màu xanh là mình dùng kiểm tra xem biến dl có tồn tại ko thì kết quà là có nhưng lại ko cập nhật đc.

Chào bác Duy, thiep xin sửa giúp bác 1 chút cái lisp trên, đúng là đối tượng hatch không nên dùng hàm "entmod"
(defun c:sch (/ c eT ss tlsc N obj)
(command "undo" "be")
(setq tlsc (getreal "\nTi le phong : "))
(prompt "\nChon doi tuong muon chinh.")
(setq ss (ssget '((0 . "hatch"))))
(setq c 0)
(setq N (sslength ss))
(while (< c N)
(setq eT (ssname ss c)
obj (vlax-ename->vla-object eT)
)
(vla-put-PatternScale obj tlsc)
(setq c (1+ c))
)
(vla-Evaluate obj)
(vla-update obj)
(command "undo" "end")
(Princ)
)

  • 1

#15 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 26 August 2010 - 04:31 PM

Cái này đối với Autolisp thì dễ hơn ăn ớt nữa
Nếu bạn có nhu cầu mình sẽ viết theo đơn đặt hàng của bạn bao gồm :
-Thiết kế trắc dọc+mặt bằng điện
- Tự động sắp xếp vô khung A3,A1,A0...
- Tự động in ấn các khổ giấy
- Tự động tiền chuyển vô tài khoản ... he he

Bon...on...n

Cảm ơn hảo ý của bác nhưng em muốn tự mình viết ra mới thú và có thể học đc nhìu hơn chứ nhờ người khác júp thì không còn ý nghĩa nữa. Em chỉ cần những lời gợi ý chân thành và những ý kiến júp đỡ mang tính xây dựng nền tảng rùi em sẽ tự xây dựng trên nền tảng đó. Theo như bác nói zạ là ý tưởng của em là hoàn toàn có thể rùi có fải hok!? Zạ thì em sẽ cố gắng tìm hỉu thêm để 1 ngày nào đó có thể đem khoe với các bác! :D

Rất cảm ơn mọi người và rất mong mọi người sẽ típ tục chỉ bảo dẫn dắt 1 con gà như em đi đúng hướng ạ!! :D
  • 0

#16 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 26 August 2010 - 04:48 PM

Cảm ơn hảo ý của bác nhưng em muốn tự mình viết ra mới thú và có thể học đc nhìu hơn chứ nhờ người khác júp thì không còn ý nghĩa nữa. Em chỉ cần những lời gợi ý chân thành và những ý kiến júp đỡ mang tính xây dựng nền tảng rùi em sẽ tự xây dựng trên nền tảng đó. Theo như bác nói zạ là ý tưởng của em là hoàn toàn có thể rùi có fải hok!? Zạ thì em sẽ cố gắng tìm hỉu thêm để 1 ngày nào đó có thể đem khoe với các bác! :D

Rất cảm ơn mọi người và rất mong mọi người sẽ típ tục chỉ bảo dẫn dắt 1 con gà như em đi đúng hướng ạ!! :D

Vậy thì bạn tìm hiểu từ từ nhé:
-Nâng cấp cái đoạn trên của bạn để chèn 2 block trudien vào 1 đầu mút góc quay theo hướng p1-p2 và ngoợc lại

(defun c:dpl()
(setq P1 (getpoint "cho diem dau: "))
(setq L (getstring 5"nhap chieu dai: "))
(setq G (getstring 5"nhap so goc: "))
(setq P2 (strcat "@" L "<" G))
(command "pline" P1 P2 "")
(command "pline" P1 P2 "")
(command ".INSERT" "trudien" p1 1 1 p2)
(command ".INSERT" "trudien" p2 1 1 p1)

(princ)
)


-Điều kiện trong bản vẽ đã tồn tại block trudien.
-Gải thích:
thực hiện lệnh insert tên block trudien, điểm chèn p1 tỉ lệ theo phương x =1, tỉ lệ theo phương y = 1. Góc chèn bằng p1 p2
  • 1

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


#17 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 26 August 2010 - 04:58 PM

Muốn thay đổi block trudien bằng quá trình hoi đáp thì:
(command ".INSERT" tenblock p1 1 1 p2)
Và phía trên có thủ tục gán tenblock bằng cái gì thì tùy.
  • 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


#18 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 27 August 2010 - 10:13 AM

Vậy thì bạn tìm hiểu từ từ nhé:
-Nâng cấp cái đoạn trên của bạn để chèn 2 block trudien vào 1 đầu mút góc quay theo hướng p1-p2 và ngoợc lại

(defun c:dpl()
(setq P1 (getpoint "cho diem dau: "))
(setq L (getint "nhap chieu dai: "))
(setq G (getint "nhap so goc: "))
(setq P2 (list @ L < G))
(command "pline" P1 P2 "")
(command "pline" P1 P2 "")
(command ".INSERT" "trudien" p1 1 1 p2)
(command ".INSERT" "trudien" p2 1 1 p1)

(princ)
)


-Điều kiện trong bản vẽ đã tồn tại block trudien.
-Gải thích:
thực hiện lệnh insert tên block trudien, điểm chèn p1 tỉ lệ theo phương x =1, tỉ lệ theo phương y = 1. Góc chèn bằng p1 p2


Cảm ơn Anh Duy wá trùi lun!!! Anh thật là tốt wá đã júp đỡ em thật nhiệt tình!! :D
Em xin anh júp em thêm tí nữa nhé (không bít sẽ hỏi anh bao nhiu lần nữa đây ^^!). Vấn đề là khi chèn block bằng command trong ACAD chúng ta sẽ có 1 hộp thoại Insert hiện lên và có cột tùy chọn Rotation để nhập vào số góc để xoay block. Cũng ý tương tự như vậy nhưng em không biết cú pháp lệnh để chèn block và cho nó xoay theo 1 góc bằng LISP. Anh có thể chỉ em được không anh?

Rất cảm ơn anh và chúc anh sức khỏe và thành đạt!!
  • 0

#19 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 27 August 2010 - 10:25 AM

Cảm ơn Anh Duy wá trùi lun!!! Anh thật là tốt wá đã júp đỡ em thật nhiệt tình!! :D
Em xin anh júp em thêm tí nữa nhé (không bít sẽ hỏi anh bao nhiu lần nữa đây ^^!). Vấn đề là khi chèn block bằng command trong ACAD chúng ta sẽ có 1 hộp thoại Insert hiện lên và có cột tùy chọn Rotation để nhập vào số góc để xoay block. Cũng ý tương tự như vậy nhưng em không biết cú pháp lệnh để chèn block và cho nó xoay theo 1 góc bằng LISP. Anh có thể chỉ em được không anh?

Rất cảm ơn anh và chúc anh sức khỏe và thành đạt!!

Èo bạn chưa chạy thử đoạn trên à. Nó đã chèn và quay block rồi đó thôi. Chèn tại điểm p1 và quay theo góc p1 p2 rồi mà (đâu có hiện hộp thoại đâu). Còn muốn nhập góc thì

(command ".INSERT" "trudien" p1 1 1 goc)

À mình chỉnh bài trên 1 chút do đoạn ban đầu là lisp nguyên của bạn chưa sữa nên chạy bị lỗi.
  • 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


#20 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 27 August 2010 - 11:01 AM

Cảm ơn bác! Vì mình đang cần viết LISP để vẽ tự động mặt bằng tuyến lưới điện (mình đang làm khâu thiết kế trong ngành Điện). Mà 1 bản vẽ mặt bằng tuyến lưới điện yêu cầu không cần cao nhưng nếu vẽ bằng tay cũng mất khá nhìu thời gian cho nên mình muốn tự động hóa bằng cách chỉ cần nhập khoảng cách và hướng góc mà đường điện sẽ đi. Mình xin mô tả về bản vẽ mặt bằng tuyến lưới điện cơ bản của mình như sau:

- Lưới điện cần thể hiện gồm đường dây, trụ điện và các phụ kiện khác như: neo, tiếp địa...
- Đường dây sẽ được thể hiện bằng các đường PLine nối tiếp nhau. Khoảng cách giữa 2 điểm đầu và cuối của một đường PLine chính là khoảng cách giữa 2 trụ điện.
- Trên mỗi điểm đầu và điểm cuối sẽ bố trí lên đó 1 trụ điện và sẽ có thể có thêm neo hoặc tiếp địa.

Chỉ đơn giản là thế nhưng mình muốn viết LISP với ý tưởng như sau:

- Mình sẽ tạo một Menu Box để người dùng có thể tương tác nhập số liệu trên đó.
- Tạo các Block gồm: trụ điện, neo, tiếp địa...
- Người dùng sẽ nhập vào chiều dài đường dây và góc (để vẽ đường PLine như đã làm ở trên).
- Mỗi lúc vẽ 1 đường PLine, trong Menu Box sẽ có các List Box xổ xuống để người dùng lựa chọn sẽ đặt trụ điện, neo, tiếp địa... vào các điểm nút của mỗi đường PLine (CAD sẽ đặt các block như ta đã tạo ở trên vào các điểm đầu và cuối của đường PLine).
- Tiếp tục quay lại bước nhập vào chiếu dài đường dây và góc ở trên để vẽ tiếp 1 đường PLine nối tiếp vào điểm cuối của đường PLine vừa vẽ và thực hiện các bước tiếp theo cho đến khi giá trị chiều dài đường dây là NIL.

Không biết ý tưởng này của mình có khả thi không các Bác nhỉ?
Mình xin up lên hình chụp 1 bản vẽ về mặt bằng tuyến lưới điện mà mình thường vẽ để các Bác dễ hình dung. Trong hình các bác thấy đường dây đi thẳng vì mình chỉ chụp 1 góc bản vẽ thui nhưng thực tế thì đưòng dây sẽ có nhiều góc nữa.

THANK CÁC BÁC ĐÃ NHIỆT TÌNH JÚP ĐỠ EM RẤT NHÌU!!!

Hình đã gửi


Bác hungdlcm ơi
Bác có bản vẽ chuẩn trắc dọc+mặt bằng thiết kế điện không
Post lên cho mình 1 bản nghiên cứu với
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong