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

friendship293a

Thành viên
  • Số lượng nội dung

    102
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi friendship293a


  1. CỤ thể là em có vẽ một viewport trong 1 viewport khác nhưng hình của viewport to vẫn xuất hiện trong hình viewport con nằm bên trong viewport to. ai có cách che khuất hình của viewport to khi nó nằm trong không.

    giống như bài câu hỏi này nhưng em lam theo hướng dẫn mà ko dc

    http://www.cadviet.com/forum/index.php?showtopic=13772&st=0&p=74776&hl=vpclip&fromsearch=1entry74776


  2. Code của bạn chạy rất tốt nhưng minhg mù tịt về lisp muốn sửa tí nhưng chẳng bít sửa thế nào. Đã giúp thì giúp cho chót hì hì cụ thể là

    1. Lisp tính diện tích rùi ghi kết qủa trực tiếp vào 1 text có sẵn chưa có

    2.Lisp nhân nhanh của bạn chạy rất tốt không chê vào đâu được hì hì

    3. Lisp tính diện tích rùi nhân và ghi kết quả thì text để nhân là text được chọn trên màn hình chứ không phải là nhập từ bàn phím

     

    Cảm ơn bạn đã giúp đỡ


  3. Em đang cần 3 lisp tính diện tích và nhân nhanh cụ thể là thế này

    1. Lisp tính diện tích nhanh. đánh lệnh rồi chọn khung bo hoặc pick điểm enter chọn text ghi kết quả xong.

    2. lisp nhân nhanh. chọn số thứ nhất rùi chọn số thứ 2 rùi chọn text ghi kết quả đơn giản không phải enter nhiều lần

    3. Lisp tính diện tích và nhân.đánh lệnh rùi chọn khung bo hoặc pick điểm enter chọn sô cần nhân vào giá trị diện tích, chọn text ghi kết quả.

     

    EM đã tìm trên diễn đàn nhưng lisp chưa được như ý nên mong ai hiểu biết về lisp giúp đỡ ạ. Cảm ơn mọi người.


  4. Đúng là phải làm theo cách củ chuối đó nhưng ít cũng phải mất tiếng vì mấy đương bo rùi nó vẫn báo lỗi ví dụ như cái file mình vừa gửi sau khi vẽ bằng line mình bo bằng lệnh F sau đó chuyển thành polyline bằng lệnh PE mà không được hacth thì cad báo lỗi hở không hatch được hix hix cuối cùng phải bo lại bằng lệnh PL tại sao vậy nhỉ?


  5. Em đang cần cái lisp cộng tăng dần cụ thể thế này.

    Chọn số bắt đầu (trên màn hình)

    nhập số cộng thêm (số có thể là số thập phân vd 1.25 hay 0.25 ...)

    sau đó copy cộng thêm nó giống lệnh OC trong lisp này nhưng ở lisp này không cho số cộng thêm là giá trị thập phân chỉ cho số nguyên. ai giúp e sửa lại với ạ

    ;;;------------------------------------------------------------------------------------
    (defun getTw();;;Get textstyle
    (cdr (assoc 41 (tblsearch "style" (getvar "textstyle"))))
    )
    ;;;------------------------------------------------------------------------------------
    (defun getTh( / Th);;;Get textheight or textsize
    (if (= (setq Th (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) 0) (getvar "textsize") Th)
    )
    ;;;------------------------------------------------------------------------------------
    (defun emkT (S p);;;Entmake text S at p
    (entmake (list (cons 0 "TEXT") (cons 10 p) (cons 40 (getTh))
    (cons 41 (getTw)) (cons 1 S) (cons 7 (getvar "textstyle"))))
    )
    ;;;------------------------------------------------------------------------------------
    (defun incN (n dn / n2 i n1);;;Increase number n
    (setq
    n2 (itoa (+ dn (atoi n)))
    i (- (strlen n) (strlen n2))
    )
    (if (> i 0) (setq n1 (substr n 1 i)) (setq n1 ""))
    (strcat n1 n2)
    )
    ;;;------------------------------------------------------------------------------------
    (defun incC (c / i c1 c2);;;Increase character c
    (setq
    i (strlen c)
    c1 (substr c 1 (- i 1))
    c2 (chr (1+ (ascii (substr c i 1))))
    )
    (if (or (= c2 "{") (= c2 "["))
    (progn (command "erase" (entlast) "") (alert "Over character!") (exit))
    (strcat c1 c2)
    )
    )
    ;;;==============================================
    (defun C:OD( / cn dn c n p);;;Make OrDinal number with any format
    (setq
    cn (getstring "\nBegin at <1>: " T)
    dn (getint "\nIncrement <1>: ")
    )
    (if (not dn) (setq dn 1))
    (if (= cn "") (setq cn "1"))
    (setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn))
    (setq n (vl-string-subst "" c cn))
    (if (/= n "") (setq mode 1) (setq mode 0))
    (while (setq p (getpoint "\nBase point : "))
    (emkT cn p)
    (if (= n "")
    (setq cn (incC cn))
    (setq cn (strcat c (incN (vl-string-subst "" c cn) dn)))
    )
    )
    (princ)
    )
    ;;;==============================================
    (defun C:OC( / e dn p1 cn c n p2 dat);;;Make Ordinal number. Copy from template
    (setq
    e (car (entsel "\nSelect template text:"))
    dn (getint "\nIncrement <1>: ")
    p1 (getpoint "\nBase point:")
    cn (cdr (assoc 1 (entget e)))
    )
    (if (not dn) (setq dn 1))
    (if (= cn "") (setq cn "1"))
    (setq
    c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn)
    n (vl-string-subst "" c cn)
    )
    (while (setq p2 (getpoint p1 "\nNew point : "))
    (command "copy" e "" p1 p2)
    (if (= n "")
    (setq cn (incC cn))
    (setq cn (strcat c (incN (vl-string-subst "" c cn) dn)))
    )
    (setq
    dat (entget (entlast))
    dat (subst (cons 1 cn) (assoc 1 dat) dat)
    )
    (entmod dat)
    )
    (princ)
    )
    ;;;==============================================


  6. Code sau em tìm được trên diễn đàn tính tổng tất cả các số và chọn số ghi kết quả nhưng báo lỗi

    Select objects: Specify opposite corner: 2 found

    Select objects: ; error: no function definition: TAO1

    Command:

    Ai sửa hộ em với ạ

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;HAM CAN BAN;;;;;;;;;;;;;;;;;;;;;
    (defun loc(id ttt) (tao1) (dati) 
    (repeat sl (layvt) (laytt id) (if (= tt ttt)(them1)) (tangi) ) (doiss)
    )
    (defun layvt() (setq vat (ssname ss i)))
    (defun laytt(id) (setq tt (cdr (assoc id (entget vat)))))
    (defun dati()  (setq i 0))  (defun tangi() (setq i (+ i 1)))
    (defun trim(s) (setq n (strlen s) z 1 ep "")
     (repeat n (setq tu (substr s z 1))
      (if (/= tu " ") (setq ep (strcat ep tu))) (setq z (+ 1 z))
     ) (princ ep)
    )
    (defun nhet(s1 s vt) (setq leftst (left s vt) rightst (right s (+ vt 1))
     stmoi (strcat leftst s1 rightst))
    )
    (defun be(s1 st) (at s1 st) (setq trai (left st (- m 1)) phai (right st (+ m 1))))
    (defun chon1(ttt)  (setq vat (car (entsel ttt))))
    (defun solg() (if (/= ss nil) (setq sl (sslength ss))))
    (defun C:ch() (setq ss (ssget)) (solg))
    (defun doi(id tri) (setq ds (entget vat) 
     ds (subst (cons id tri) (assoc id ds) ds)) (entmod ds) (princ)
    ) 
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (defun c:cso() (c:ch) (loc 0 "TEXT") (setq tong 0) (dati)
    (while (<= i (- sl 1)) (layvt) (laytt 1) (trim tt) 
    (if (=(substr ep (strlen ep))"f") (progn (be "k" ep) (setq ep trai)))
    (setq tong (+ tong (atof ep))) (tangi))
     (if(> tong(fix tong))(setq tong (rtos tong 2))(setq tong (rtos tong 2 0)))
     (chon1 "gan tong:") (laytt 1) (setq kh (substr tt (strlen tt))) 
     (cond ((= kh "f")(if(>=  (atof tong) 1000) (nhet " " tong (- (strlen (itoa(fix (atof tong)))) 3))(setq stmoi tong))
     (doi 1 (strcat stmoi " kgf")) )
    	((= kh "g")(if(>=  (atof tong) 1000) (nhet " " tong (- (strlen (itoa(fix (atof tong)))) 3))(setq stmoi tong))
     (doi 1 (strcat stmoi " kg")) )
    ((= kh "=") (be "x" tt) (if (>=  (atof tong) 1000) (setq tong (nhet " " tong (- (strlen (itoa(fix (atof tong)))) 3))))
     (doi 1 (strcat tong " x" phai)) )
    ((progn (if (>=  (atof tong) 1000) (setq tong (nhet " " tong (- (strlen (itoa(fix (atof tong)))) 3))))(doi 1 tong)))
    )
    (setq ss nil) (princ))
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  7. Em đang muốn tìm lisp trừ 2 số tức là khi gọi lệnh thì chọn số trừ sau đó chọn số bị trừ và cuối cùng là chọn số ghi kết quả chỉ đơn giản thế thôi. em đã tìm trên diễn đàn nhưng phải thao tác nhiều quá em muốn đơn giản thế thôi ai giúp em với. mà không phải entẻ nhiều lần thì tốt hơn ạ. tức là chọn xong số trừ thì tích sang số khác là số bị trừ và tích cái nữa là ghi kết quả. mong mọi người giúp đỡ.


  8. Chào 'Phidoi_gabay'

    1. Đầu tiên Tue_NV khuyên bạn nên post bài đúng chủ đề.

    2. Lisp này sẽ giải quyết yêu cầu của bạn

    - Chọn các đối tượng Pline kín -> Lisp sẽ thực hiện công việc là các đối tượng kín Pline sẽ che các đối tượng khác

    Thử xem.

    (defun c:che()

    (setq ss (ssget '((0 . "LWPOLYLINE"))) i 0)

    (while (< i (sslength ss))

     

    (setq e (ssname ss i))

    (command "pedit" "m" e "" "c" "")

    (Command "wipeout" "" e "y")

    (setq i (1+ i))

    )

    (princ)

    )

    Bạn Tue_NV ơi với đường tròn thì sao? không phải LWPLYLINE nó không nhận.

    • Vote giảm 1
×