Đến nội dung


Hình ảnh

Lisp cửa đi


  • Please log in to reply
5 replies to this topic

#1 phamhung12

phamhung12

    biết vẽ ellipse

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

Đã gửi 23 June 2014 - 03:18 PM

Mình có tìm được 1 lisp vẽ cửa đi D1 = 1 cánh, D2 = 2 cánh

Cách dùng : 1/ Chọn điểm 1 là điểm góc của tường, Pick diem 2 là bắt đầu vẽ cửa

2/ Pick diem 3 là diểm vuông góc với cạnh 1&2 nằm trên cạnh tường // cạnh 1&2 cũng là hướng cửa

3/ Bề rộng cửa --> Vẽ

Nhờ bác Tot77 hoặc các bác nào giỏi Lisp phát triển thêm loại cửa D4 = 4 cánh giúp mình với. Thanks!

;;Chuong trinh ve cua di
;(alert "checkpoint0")
(setq oldosmode (getvar "osmode")
ORTHO (getvar "ORTHOMODE"))
(defun D1 () 
       (command ".line" p2 (polar p3 ang2 r) "" ".line" p4 p5 "")
       (if (or (and (> (car p2) (car p1)) 
                    (> (cadr p2) (cadr p3))
               ) 
               (and (< (car p2) (car p1)) 
                    (< (cadr p2) (cadr p3))
               ) 
               (and (> (cadr p1) (cadr p2)) 
                    (> (car p2) (car p3))
               )
               (and (< (cadr p1) (cadr p2)) 
                    (< (car p2) (car p3))
               )
           )
           (setq ang 90)
           (setq ang -90)
       ) ; end of if

       (command ".arc"  "C" p3 (polar p3 ang2 r) "A" ang "")
      
); END OF D1
;(alert "checkpoint1")
(defun D2 ()
       (command ".line" p2 (polar p3 ang2 (/ r 2)) ""
                ".line" p5 (polar p4 ang2 (/ r 2)) ""
       )
        (if (or (and (> (car p2) (car p1)) 
                    (> (cadr p2) (cadr p3))
               ) 
               (and (< (car p2) (car p1)) 
                    (< (cadr p2) (cadr p3))
               ) 
               (and (> (cadr p1) (cadr p2)) 
                    (> (car p2) (car p3))
               )
               (and (< (cadr p1) (cadr p2)) 
                    (< (car p2) (car p3))
               )
           )
           (setq ang 90)
           (setq ang -90)
       ) ; end of if
       (command ".arc"  "C" p3 (polar p3 ang2 (/ r 2)) "A" ang "")
       (setq m (ssget "L"))
       (command ".mirror" m "" (polar p2 ang1 (/ r 2)) (polar p3 ang1 (/ r 2)) "")
) ;End of D2

; Than chuong trinh chinh
(defun c:cua (/ p1 p2 p3 p4 p5 p23 p45 r res i ang)
(command "undo" "be")
       (initget "D1 D2")
       (setq res (getkword "\D1 1CANH _ D2 2CANH [D1/D2]? <D1>:"))

; Nhap so lieu 
       (setvar "osmode" 33)
       (setq p1 ( getpoint "\nDIEM THU 1, GOC TUONG:"))
       (setvar "osmode" 512 )
       (setvar "ORTHOMODE" 1)
       (setq p2 ( getpoint p1 "\nDIEM THU 2:"))    
       (setvar "lastpoint" p2)
       (setvar "osmode" 128)
 ;(alert "checkpoint6")          
       (setq p3 ( getpoint p2 "DIEM THU 3:")
             ang1 (angle p1 p2)
             ang2 (angle p2 p3)
             r (getreal "\nBe rong cua:")
             p4 (polar p3 ang1 r)
             p5 (polar p2 ang1 r)
             p23 (polar p2 ang2 (/ (distance p2 p3) 2))
             p45 (polar p5 ang2 (/ (distance p5 p4) 2))
       )
       (setvar "osmode" 0)
       (command ".break" p2 p5 
                ".break" p3 p4)
       (if (= res "D1") (D1))
       (if (= res "D2") (D2))
       (setvar "osmode" oldosmode)
(SETVAR "ORTHOMODE" ORTHO) 
(command "undo" "e")
   (princ)     
); end of programmer

 


  • 0

#2 phamhung12

phamhung12

    biết vẽ ellipse

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

Đã gửi 23 June 2014 - 05:42 PM

Có bác lisper pro nào giúp mình với... Mỗi lần vẽ cửa 4 cánh là phải Miror 2 lần từ cửa 2 cánh + Trim phần thừa của tường nữa :( , hơi bị lâu


  • 0

#3 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 23 June 2014 - 06:24 PM

Bạn thử cái này.

 

 
(setq oldosmode (getvar "osmode")
      ORTHO (getvar "ORTHOMODE"))
(defun D1 () 
       (command ".line" p2 (polar p3 ang2 r) "")
       (command ".line" p4 p5 "")
       (if (or (and (> (car p2) (car p1)) 
                    (> (cadr p2) (cadr p3))
               ) 
               (and (< (car p2) (car p1)) 
                    (< (cadr p2) (cadr p3))
               ) 
               (and (> (cadr p1) (cadr p2)) 
                    (> (car p2) (car p3))
               )
               (and (< (cadr p1) (cadr p2)) 
                    (< (car p2) (car p3))
               )
           )
           (setq ang 90)
           (setq ang -90)
       ) ; end of if
 
       (command ".arc"  "C" p3 (polar p3 ang2 r) "A" ang "")
      
); END OF D1
;(alert "checkpoint1")
(defun D2 ()
       (command ".line" p2 (polar p3 ang2 (/ r 2)) ""
                ".line" p5 (polar p4 ang2 (/ r 2)) ""
       )
        (if (or (and (> (car p2) (car p1)) 
                    (> (cadr p2) (cadr p3))
               ) 
               (and (< (car p2) (car p1)) 
                    (< (cadr p2) (cadr p3))
               ) 
               (and (> (cadr p1) (cadr p2)) 
                    (> (car p2) (car p3))
               )
               (and (< (cadr p1) (cadr p2)) 
                    (< (car p2) (car p3))
               )
           )
           (setq ang 90)
           (setq ang -90)
       ) ; end of if
       (command ".arc"  "C" p3 (polar p3 ang2 (/ r 2)) "A" ang "")
       (setq m (ssget "L"))
       (command ".mirror" m "" (polar p2 ang1 (/ r 2)) (polar p3 ang1 (/ r 2)) "")
) ;End of D2
 
(defun D4 ()
       (setq ss0 (ssadd))
       (command ".line" p2 (polar p3 ang2 (/ r 4)) "")
       (ssadd (entlast) ss0)
        (if (or (and (> (car p2) (car p1)) 
                    (> (cadr p2) (cadr p3))
               ) 
               (and (< (car p2) (car p1)) 
                    (< (cadr p2) (cadr p3))
               ) 
               (and (> (cadr p1) (cadr p2)) 
                    (> (car p2) (car p3))
               )
               (and (< (cadr p1) (cadr p2)) 
                    (< (car p2) (car p3))
               )
           )
           (setq ang 90)
           (setq ang -90)
       ) ; end of if
       (command ".arc"  "C" p3 (polar p3 ang2 (/ r 4)) "A" ang "")
       (ssadd (entlast) ss0)
       (command ".line" (setq tm (polar p3 ang1 (/ r 4))) (polar tm ang2 (/ r 4)) "")
       (ssadd (entlast) ss0)
       (command ".arc"  "C" tm (polar tm ang2 (/ r 4)) "A" ang "")
       (ssadd (entlast) ss0)      
  
       (command ".mirror" ss0 "" (polar p2 ang1 (/ r 2)) (polar p3 ang1 (/ r 2)) "")
)
 
; Than chuong trinh chinh
(defun c:cua (/ )
(command "undo" "be")
       (initget "D1 D2 D4")
       (setq res (getkword "\D1 1CANH _ D2 2CANH _ D4 4CANH [D1/D2/D4]? <D1>:"))
       (if (not res) (setq res "D1"))
; Nhap so lieu 
       (setvar "osmode" 33)
       (setq p1 ( getpoint "\nDIEM THU 1, GOC TUONG:"))
       (setvar "osmode" 512 )
       (setvar "ORTHOMODE" 1)
       (setq p2 ( getpoint p1 "\nDIEM THU 2:"))    
       (setvar "lastpoint" p2)
       (setvar "osmode" 128)
 ;(alert "checkpoint6")          
       (setq p3 ( getpoint p2 "DIEM THU 3:")
             ang1 (angle p1 p2)
             ang2 (angle p2 p3)
             r (getreal "\nBe rong cua:")
             p4 (polar p3 ang1 r)
             p5 (polar p2 ang1 r)
             p23 (polar p2 ang2 (/ (distance p2 p3) 2))
             p45 (polar p5 ang2 (/ (distance p5 p4) 2))
       )
       (setvar "osmode" 0)
       (command ".break" p2 p5 
                ".break" p3 p4)
       (if (= res "D1") (D1))
       (if (= res "D2") (D2))
       (if (= res "D4") (D4))
       (setvar "osmode" oldosmode)
(SETVAR "ORTHOMODE" ORTHO) 
(command "undo" "e")
   (princ)     
); end of programmer
 

 

 

Có lisper chắc phải có csharper và vbaper chứ hả?  :)  :)


  • 1

#4 phamhung12

phamhung12

    biết vẽ ellipse

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

Đã gửi 23 June 2014 - 07:29 PM

Trời! Không ngờ bạn Tot77 giỏi thật! Từ nay mình đỡ mất công cho việc vẽ cửa 4 cánh. Thank you very much! :)


  • 0

#5 Oohlala

Oohlala

    biết zoom

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

Đã gửi 26 May 2015 - 10:06 AM

Bạn thử cái này.

 
(setq oldosmode (getvar "osmode")
      ORTHO (getvar "ORTHOMODE"))
(defun D1 () 
       (command ".line" p2 (polar p3 ang2 r) "")
       (command ".line" p4 p5 "")
       (if (or (and (> (car p2) (car p1)) 
                    (> (cadr p2) (cadr p3))
               ) 
               (and (< (car p2) (car p1)) 
                    (< (cadr p2) (cadr p3))
               ) 
               (and (> (cadr p1) (cadr p2)) 
                    (> (car p2) (car p3))
               )
               (and (< (cadr p1) (cadr p2)) 
                    (< (car p2) (car p3))
               )
           )
           (setq ang 90)
           (setq ang -90)
       ) ; end of if
 
       (command ".arc"  "C" p3 (polar p3 ang2 r) "A" ang "")
      
); END OF D1
;(alert "checkpoint1")
(defun D2 ()
       (command ".line" p2 (polar p3 ang2 (/ r 2)) ""
                ".line" p5 (polar p4 ang2 (/ r 2)) ""
       )
        (if (or (and (> (car p2) (car p1)) 
                    (> (cadr p2) (cadr p3))
               ) 
               (and (< (car p2) (car p1)) 
                    (< (cadr p2) (cadr p3))
               ) 
               (and (> (cadr p1) (cadr p2)) 
                    (> (car p2) (car p3))
               )
               (and (< (cadr p1) (cadr p2)) 
                    (< (car p2) (car p3))
               )
           )
           (setq ang 90)
           (setq ang -90)
       ) ; end of if
       (command ".arc"  "C" p3 (polar p3 ang2 (/ r 2)) "A" ang "")
       (setq m (ssget "L"))
       (command ".mirror" m "" (polar p2 ang1 (/ r 2)) (polar p3 ang1 (/ r 2)) "")
) ;End of D2
 
(defun D4 ()
       (setq ss0 (ssadd))
       (command ".line" p2 (polar p3 ang2 (/ r 4)) "")
       (ssadd (entlast) ss0)
        (if (or (and (> (car p2) (car p1)) 
                    (> (cadr p2) (cadr p3))
               ) 
               (and (< (car p2) (car p1)) 
                    (< (cadr p2) (cadr p3))
               ) 
               (and (> (cadr p1) (cadr p2)) 
                    (> (car p2) (car p3))
               )
               (and (< (cadr p1) (cadr p2)) 
                    (< (car p2) (car p3))
               )
           )
           (setq ang 90)
           (setq ang -90)
       ) ; end of if
       (command ".arc"  "C" p3 (polar p3 ang2 (/ r 4)) "A" ang "")
       (ssadd (entlast) ss0)
       (command ".line" (setq tm (polar p3 ang1 (/ r 4))) (polar tm ang2 (/ r 4)) "")
       (ssadd (entlast) ss0)
       (command ".arc"  "C" tm (polar tm ang2 (/ r 4)) "A" ang "")
       (ssadd (entlast) ss0)      
  
       (command ".mirror" ss0 "" (polar p2 ang1 (/ r 2)) (polar p3 ang1 (/ r 2)) "")
)
 
; Than chuong trinh chinh
(defun c:cua (/ )
(command "undo" "be")
       (initget "D1 D2 D4")
       (setq res (getkword "\D1 1CANH _ D2 2CANH _ D4 4CANH [D1/D2/D4]? <D1>:"))
       (if (not res) (setq res "D1"))
; Nhap so lieu 
       (setvar "osmode" 33)
       (setq p1 ( getpoint "\nDIEM THU 1, GOC TUONG:"))
       (setvar "osmode" 512 )
       (setvar "ORTHOMODE" 1)
       (setq p2 ( getpoint p1 "\nDIEM THU 2:"))    
       (setvar "lastpoint" p2)
       (setvar "osmode" 128)
 ;(alert "checkpoint6")          
       (setq p3 ( getpoint p2 "DIEM THU 3:")
             ang1 (angle p1 p2)
             ang2 (angle p2 p3)
             r (getreal "\nBe rong cua:")
             p4 (polar p3 ang1 r)
             p5 (polar p2 ang1 r)
             p23 (polar p2 ang2 (/ (distance p2 p3) 2))
             p45 (polar p5 ang2 (/ (distance p5 p4) 2))
       )
       (setvar "osmode" 0)
       (command ".break" p2 p5 
                ".break" p3 p4)
       (if (= res "D1") (D1))
       (if (= res "D2") (D2))
       (if (= res "D4") (D4))
       (setvar "osmode" oldosmode)
(SETVAR "ORTHOMODE" ORTHO) 
(command "undo" "e")
   (princ)     
); end of programmer
 

Có lisper chắc phải có csharper và vbaper chứ hả?  :)  :)

bạn ơi sao mình dùng lsp này khi nhập lệnh D1, D2 thì toàn báo là unknown command 


  • -1

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 26 May 2015 - 10:24 AM

Dùng lệnh CUA bạn ạ.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.