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

thanhduan2407

Nhà quảng cáo
  • Số lượng nội dung

    1171
  • Đã tham gia

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

  • Ngày trúng

    26

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


  1. Bạn tham khảo nhé!
     

    (defun c:00 ()
      (command "undo" "be")
      (setq cmd (getvar "cmdecho"))
      (setvar "cmdecho" 1)
      (setq	vl_ltren0 "2.0"
    	vl_lduoi0 "2.0"
    	vl_ltrc0 "2.0"
    	vl_lsau0 "2.0"
      )
      (setq	dcl_code (list
    		   (strcat
    		     "vehinhchunhat : dialog { label = \"&Ve hinh chu nhat\";"
    		     " : boxed_radio_column { label = \"Chon loai\"; key = \"hcn\";"
    		     "		 : radio_button { label = \"&1-Hinh chu nhat lech TREN\"; key = \"tren\";}"
    		     "		 : radio_button { label = \"&2-Hinh chu nhat lech TRAI\"; key = \"trai\";}}"
    		     "	: row {"
    		     "	: column {"
    		     "	   : edit_box { label = \"Chieu dai canh duoi (m)\"; edit_width = 5; key = \"lduoi\";}"
    		     "	   : edit_box { label = \"Chieu dai canh tren (m)\"; edit_width = 5; key = \"ltren\";}"
    		     "	   : edit_box { label = \"Chieu dai canh truoc (m)\"; edit_width = 5; key = \"ltruoc\";}"
    		     "	   : edit_box { label = \"Chieu dai canh sau (m)\"; edit_width = 5; key = \"lsau\";}}"
    		     "              }"
    		     " ok_cancel;}"
    		    )
    		 )
      )
      (setq	temp	 (vl-filename-mktemp "vehinhchunhat.dcl")
    	file_dcl (open temp "W")
      )
      (foreach l dcl_code (write-line l file_dcl))
      (close file_dcl)
      (setq dcl_id (load_dialog temp))
      (vl-file-delete temp)
      (new_dialog "vehinhchunhat" dcl_id)
      (if (not rad_lech)
        (setq rad_lech "tren")
      )
      (set_tile rad_lech "1")
    
      (action_tile
        "tren"
        "(mapcar 'mode_tile '(\"lduoi\" \"ltren\" \"ltruoc\" \"lsau\" ) '(0 1 0 0))
         (setq rad_lech $key)
         "
      )
      (action_tile
        "trai"
        "(mapcar 'mode_tile '(\"lduoi\" \"ltren\" \"ltruoc\" \"lsau\" ) '(0 0 1 0))
         (setq rad_lech $key)
         "
      )
    
    
    
      (if (not vl_ltren)
        (setq vl_ltren vl_ltren0)
      )
      (set_tile "ltren" vl_ltren)
    
      (if (not vl_lduoi)
        (setq vl_lduoi vl_lduoi0)
      )
      (set_tile "lduoi" vl_lduoi)
    
      (if (not vl_ltrc)
        (setq vl_ltrc vl_ltrc0)
      )
      (set_tile "ltruoc" vl_ltrc)
    
      (if (not vl_lsau)
        (setq vl_lsau vl_lsau0)
      )
      (set_tile "lsau" vl_lsau)
      
      (action_tile
        "accept"
        "(if (= rad_lech \"tren\")
        (progn
             (setq vl_tren (get_tile  \"lduoi\"))
             (setq vl_lduoi (get_tile  \"lduoi\"))
             (setq vl_ltrc (get_tile  \"ltruoc\"))
             (setq vl_lsau (get_tile  \"lsau\"))
             ;(hinhchunhatlechtren lduoi ltren ltrc lsau)
         )
         (progn
             (setq vl_ltren (get_tile  \"ltren\"))
             (setq vl_lduoi (get_tile  \"lduoi\"))
             (setq vl_ltrc (get_tile  \"ltruoc\"))
             (setq vl_lsau (get_tile  \"lsau\"))
             ;(hinhchunhatlechtrai lduoi ltren ltrc lsau)
         ))
         (done_dialog)"
      )
      (action_tile "cancel" "(done_dialog) (exit)")
      (start_dialog)
      (unload_dialog dcl_id)
      (command "style" "vntime.shx" "vntime.shx" "0" "0.75" "0" "n" "n" "n")
      (command "style" "vntimeh.shx" "vntimeh.shx" "0" "0.75" "0" "n" "n" "n")
    							    ;tao lop kich thuoc
      (if (tblsearch "dimstyle" "D25")
        (command "_dimstyle" "r" "D25")
        (progn
          (command "DIMSCALE" 0)
          (command "DIMDLE"	0.15 "DIMDLI" 0.2 "DIMEXE" 0.15	"DIMEXO" 0 "DIMBLK1" "Oblique" "DIMBLK2" "Oblique" "DIMLDRBLK" "Oblique" "DIMASZ" 0.1 "DIMSAH" "ON" "DIMCEN" 0.1 "DIMTAD" 1 "DIMJUST" 0)
          (command "DIMTXSTY" "vntime.shx" "DIMCLRT" 7 "DIMGAP" 0.05 "DIMDEC" 0 "DIMTOH" "OFF" "DIMTIH" "OFF" "DIMTIX" "ON"	"DIMTXT" 0.25 "DIMFXLON" "On" "DIMFXL" 0.2 "DIMTMOVE" 2	"DIMTOFL" "On" "DIMLFAC"
    	       25)
          (command "-dimstyle" "s" "D25")
        )
      )
      (if (tblsearch "dimstyle" "D100")
        (command "_dimstyle" "r" "D100")
        (progn
          (command "DIMSCALE" 0)
          (command "DIMDLE"	0.15 "DIMDLI" 0.2 "DIMEXE" 0.15	"DIMEXO" 0 "DIMBLK1" "Oblique" "DIMBLK2" "Oblique" "DIMLDRBLK" "Oblique" "DIMASZ" 0.1 "DIMSAH" "ON" "DIMCEN" 0.1 "DIMTAD" 1 "DIMJUST" 0)
          (command "DIMTXSTY" "vntime.shx" "DIMCLRT" 7 "DIMGAP" 0.05 "DIMDEC" 0 "DIMTOH" "OFF" "DIMTIH" "OFF" "DIMTIX" "ON"	"DIMTXT" 0.25 "DIMFXLON" "On" "DIMFXL" 0.2 "DIMTMOVE" 2	"DIMTOFL" "On" "DIMLFAC"
    	       100)
          (command "-dimstyle" "s" "D100")
        )
      )
      
      (setvar "cmdecho" cmd)
      (command "undo" "end")
      (princ)
    )

     


  2. Nó đang là m2 rồi. Nó cho nhập cả sau dấu phẩy bao nhiêu số mà.
    Bạn dùng lisp này tính cho nhanh.
     

    (defun C:TDTV (/ DTICH DTICH1 LSTPLINE SSPLINE TAMVUNG)
    ;;;TINH DIEN TICH VUNG
      (vl-load-com)
      (setq	Caochu (LM:GetXWithDefault_New
    		 getdist "\nNh\U+1EADp chi\U+1EC1u cao ch\U+1EEF: " '*Caochu* 0.25 nil nil)
      )
      (setq	Sole (LM:GetXWithDefault_New
    		 getint "\nNh\U+1EADp s\U+1ED1 th\U+1EADp ph\U+00E2n sau d\U+1EA5u ph\U+1EA9y: " '*Sole* 3 nil nil)
      )
      (setq	Donvi (LM:GetXWithDefault_New
    		getkword "\nCh\U+1ECDn \U+0111\U+01A1n v\U+1ECB hi\U+1EC3n th\U+1ECB [Hecta / Meter]" '*Donvi* "H" '("H M") nil)
      )
      (setq ssPline (ssget '((0 . "*POLYLINE"))))
      (if ssPline
        (progn
          (setq LstPLine (acet-ss-to-list ssPline))
          (foreach ePl LstPLine
    	(if (or	(equal (vlax-curve-getStartPoint ePl) (vlax-curve-getEndPoint ePl) 1e-8)
    		(equal (vlax-curve-isClosed (vlax-ename->vla-object ePl)) T)
    	    )
    	  (progn
    	    (setq Dtich (vlax-get-property (vlax-ename->vla-object ePl) 'Area))
    	    (cond
    	      ((= Donvi "H")
    	       (setq Dtich1 (/ Dtich 10000.0))
    	      )
    	      ((= Donvi "M")
    	       (setq Dtich1 Dtich)
    	      )
    	    )
    	    (setq Tamvung (_cen ePl))
    	    (MakeText Tamvung
    		      (strcat (rtos Dtich1 2 Sole))
    		      Caochu
    		      0
    		      "MC"
    		      nil
    		      nil
    		      nil
    	    )
    	  )
    	)
          )
        )
      )
      (princ)
    )
    (defun _cen (v / p1 p2 p u)
      (vla-getboundingbox (setq v (vlax-ename->vla-object v)) 'p1 'p2)
      (setq	p (mapcar '*
    		  (mapcar '+
    			  (vlax-safearray->list p1)
    			  (vlax-safearray->list p2)
    		  )
    		  '(0.5 0.5 0.5)
    	  )
      )
      (setq	u (entmakex (list '(0 . "LINE")
    			  (cons 10 p)
    			  (cons 11 (polar p (/ pi 2) 1))
    		    )
    	  )
      )
      (setq p (vlax-invoke v 'IntersectWith (vlax-ename->vla-object u) 2))
      (entdel u)
      (if (>= (length p) 4)
        (list (car p) (/ (+ (cadr p) (nth 4 p)) 2) (caddr p))
        p
      )
    )
    (defun MakeText	(point string Height Ang justify Layer Style Color / Lst) ; Ang: Radial
      (setq	Lst	(list '(0 . "TEXT")
    		      (cons 10 point)
    		      (cons 40 Height)
    		      (cons 8
    			    (if	Layer
    			      Layer
    			      (getvar "CLAYER")
    			    )
    		      )
    		      (cons 1 string)
    		      (if Ang
    			(cons 50 Ang)
    		      )
    		      (cons 7
    			    (if	Style
    			      Style
    			      (getvar "Textstyle")
    			    )
    		      )
    		      (cons 62
    			    (if	Color
    			      Color
    			      256
    			    )
    		      )
    		)
    	justify	(strcase justify)
      )
      (cond
        ((= justify "C")
         (setq Lst (append Lst (list (cons 72 1) (cons 11 point))))
        )
        ((= justify "L")
         (setq
           Lst
    	(append Lst (list (cons 72 0) (cons 73 0) (cons 10 point)))
         )
        )
        ((= justify "R")
         (setq Lst (append Lst (list (cons 72 2) (cons 11 point))))
        )
        ((= justify "M")
         (setq Lst (append Lst (list (cons 72 4) (cons 11 point))))
        )
        ((= justify "TL")
         (setq
           Lst
    	(append Lst (list (cons 72 0) (cons 11 point) (cons 73 3)))
         )
        )
        ((= justify "TC")
         (setq
           Lst
    	(append Lst (list (cons 72 1) (cons 11 point) (cons 73 3)))
         )
        )
        ((= justify "TR")
         (setq
           Lst
    	(append Lst (list (cons 72 2) (cons 11 point) (cons 73 3)))
         )
        )
        ((= justify "ML")
         (setq
           Lst
    	(append Lst (list (cons 72 0) (cons 11 point) (cons 73 2)))
         )
        )
        ((= justify "MC")
         (setq
           Lst
    	(append Lst (list (cons 72 1) (cons 11 point) (cons 73 2)))
         )
        )
        ((= justify "MR")
         (setq
           Lst
    	(append Lst (list (cons 72 2) (cons 11 point) (cons 73 2)))
         )
        )
        ((= justify "BL")
         (setq
           Lst
    	(append Lst (list (cons 72 0) (cons 11 point) (cons 73 1)))
         )
        )
        ((= justify "BC")
         (setq
           Lst
    	(append Lst (list (cons 72 1) (cons 11 point) (cons 73 1)))
         )
        )
        ((= justify "BR")
         (setq
           Lst
    	(append Lst (list (cons 72 2) (cons 11 point) (cons 73 1)))
         )
        )
      )
      (entmakex Lst)
    )
    (defun LM:GetXWithDefault_New (_function _prompt _symbol _default _initget _args / _toString)
      (vl-load-com)
      ;; © Lee Mac 2010
    
      (setq	_toString
    	 (lambda (x)
    	   (cond
    	     ((eq getangle _function) (angtos x))
    	     ((eq 'REAL (type x)) (rtos x))
    	     ((eq 'INT (type x)) (itoa x))
    	     ((vl-princ-to-string x))
    	   )
    	 )
      )
    
      (if _initget
        (apply 'initget _initget)
      )
    
      (set _symbol
           (
    	(lambda	(input)
    	  (if (or (not input) (eq "" input))
    	    (eval _symbol)
    	    input
    	  )
    	)
    	 (apply	'_function
    		(append	_args
    			(list
    			  (strcat _prompt
    				  "<"
    				  (_toString
    				    (set _symbol
    					 (cond
    					   ((eval _symbol))
    					   (_default)
    					 )
    				    )
    				  )
    				  "> : "
    			  )
    			)
    		)
    	 )
           )
      )
    )
    

     


  3. Vào lúc 6/2/2025 tại 05:04, Quan2008 đã nói:

    Cho mình hỏi nếu muốn đặt giá trị mặc định cho ô khoanh đỏ là 300 chẳng hạn thì mình dùng biến gì? Do mình k dùng cố định một máy nên muốn set giá trị cố định trong Lisp. 

    Chân thành cảm ơn.  

     

     

    image.png

     

    Trong AutoCAD, nếu bạn muốn thay đổi cài đặt mặc định của Distance in Pixels trong bảng Quick Properties bằng cách sử dụng ngôn ngữ AutoLISP , thì bạn cần làm việc với hệ thống biến (system variables) liên quan đến Quick Properties.

    Biến hệ thống liên quan:

    Biến hệ thống chính liên quan đến Quick Properties là:

    QPMODE : Điều khiển trạng thái bật/tắt của Quick Properties.

    Giá trị 0: Tắt Quick Properties.

    Giá trị 1: Bật Quick Properties.

    QPLOC : Điều khiển vị trí hiển thị của bảng Quick Properties.

    Giá trị 0: Hiển thị ở góc trên bên phải.

    Giá trị 1: Hiển thị gần con trỏ chuột.

    Tuy nhiên, khoảng cách giữa các thành phần trong bảng Quick Properties (Distance in Pixels) không được quản lý trực tiếp bởi một biến hệ thống cụ thể. Thay vào đó, nó thường là một phần của cấu hình giao diện người dùng và không có biến hệ thống riêng biệt để điều chỉnh khoảng cách này.

    Kết luận:

    Hiện tại, không có biến hệ thống cụ thể nào trong AutoCAD quản lý trực tiếp Distance in Pixels của bảng Quick Properties. Để tùy chỉnh khoảng cách này, bạn có thể:

    Thử điều chỉnh thông qua Windows Registry bằng AutoLISP.

    Tạo giao diện tùy chỉnh bằng CUI .

    Sử dụng các công cụ lập trình nâng cao như .NET API hoặc ObjectARX .

     

    P/s: AI trả lời


  4. Bạn thử cái này nhé! 

    (defun C:TBC (/ DEM LTSTEXT P1 SOTB SSTEXT STR TONG)
      (setvar "CMDECHO" 0)
      (prompt
        "\nCh\U+1ECDn c\U+00E1c Text c\U+1EA7n t\U+00EDnh trung b\U+00ECnh c\U+1ED9ng "
      )
      (setq ssText (ssget '((0 . "TEXT"))))
      (if ssText
        (progn
          (setq LtsText (acet-ss-to-list ssText))
          (setq Caochu (LM:GetXWithDefault_New
    		     getdist "\nNh\U+1EADp cao ch\U+1EEF " '*Caochu* 2.0 nil nil)
          )
          (setq Tong 0)
          (setq Dem 0)
          (foreach e LtsText
    	(setq Str (cdr (assoc 1 (entget e))))
    	(if (distof Str 2)
    	  (progn
    	    (setq Tong (+ Tong (atof Str)))
    	    (setq Dem (1+ Dem))
    	  )
    	)
          )
          (if (> Dem 0)
    	(progn
    	  (setq SoTB (/ Tong Dem))
    	  (setq	p1
    		 (getpoint
    		   "\nCh\U+1ECDn \U+0111i\U+1EC3m ghi k\U+1EBFt qu\U+1EA3: "
    		 )
    	  )
    	  (MakeText p1
    		    (rtos (/ Tong Dem) 2 3)
    		    Caochu
    		    0
    		    "L"
    		    nil
    		    nil
    		    nil
    	  )
    	  (princ (rtos (/ Tong Dem) 2 3))
    	)
          )
        )
      )
      (princ)
    )
    (defun MakeText	(point string Height Ang justify Layer Style Color / Lst) ; Ang: Radial
      (setq	Lst	(list '(0 . "TEXT")
    		      (cons 10 point)
    		      (cons 40 Height)
    		      (cons 8
    			    (if	Layer
    			      Layer
    			      (getvar "CLAYER")
    			    )
    		      )
    		      (cons 1 string)
    		      (if Ang
    			(cons 50 Ang)
    		      )
    		      (cons 7
    			    (if	Style
    			      Style
    			      (getvar "Textstyle")
    			    )
    		      )
    		      (cons 62
    			    (if	Color
    			      Color
    			      256
    			    )
    		      )
    		)
    	justify	(strcase justify)
      )
      (cond
        ((= justify "C")
         (setq Lst (append Lst (list (cons 72 1) (cons 11 point))))
        )
        ((= justify "L")
         (setq
           Lst
    	(append Lst (list (cons 72 0) (cons 73 0) (cons 10 point)))
         )
        )
        ((= justify "R")
         (setq Lst (append Lst (list (cons 72 2) (cons 11 point))))
        )
        ((= justify "M")
         (setq Lst (append Lst (list (cons 72 4) (cons 11 point))))
        )
        ((= justify "TL")
         (setq
           Lst
    	(append Lst (list (cons 72 0) (cons 11 point) (cons 73 3)))
         )
        )
        ((= justify "TC")
         (setq
           Lst
    	(append Lst (list (cons 72 1) (cons 11 point) (cons 73 3)))
         )
        )
        ((= justify "TR")
         (setq
           Lst
    	(append Lst (list (cons 72 2) (cons 11 point) (cons 73 3)))
         )
        )
        ((= justify "ML")
         (setq
           Lst
    	(append Lst (list (cons 72 0) (cons 11 point) (cons 73 2)))
         )
        )
        ((= justify "MC")
         (setq
           Lst
    	(append Lst (list (cons 72 1) (cons 11 point) (cons 73 2)))
         )
        )
        ((= justify "MR")
         (setq
           Lst
    	(append Lst (list (cons 72 2) (cons 11 point) (cons 73 2)))
         )
        )
        ((= justify "BL")
         (setq
           Lst
    	(append Lst (list (cons 72 0) (cons 11 point) (cons 73 1)))
         )
        )
        ((= justify "BC")
         (setq
           Lst
    	(append Lst (list (cons 72 1) (cons 11 point) (cons 73 1)))
         )
        )
        ((= justify "BR")
         (setq
           Lst
    	(append Lst (list (cons 72 2) (cons 11 point) (cons 73 1)))
         )
        )
      )
      (entmakex Lst)
    )
    (defun LM:GetXWithDefault_New (_function _prompt _symbol _default _initget _args / _toString)
      (vl-load-com)
      ;; © Lee Mac 2010
    
      (setq	_toString
    	 (lambda (x)
    	   (cond
    	     ((eq getangle _function) (angtos x))
    	     ((eq 'REAL (type x)) (rtos x))
    	     ((eq 'INT (type x)) (itoa x))
    	     ((vl-princ-to-string x))
    	   )
    	 )
      )
    
      (if _initget
        (apply 'initget _initget)
      )
    
      (set _symbol
           (
    	(lambda	(input)
    	  (if (or (not input) (eq "" input))
    	    (eval _symbol)
    	    input
    	  )
    	)
    	 (apply	'_function
    		(append	_args
    			(list
    			  (strcat _prompt
    				  "<"
    				  (_toString
    				    (set _symbol
    					 (cond
    					   ((eval _symbol))
    					   (_default)
    					 )
    				    )
    				  )
    				  "> : "
    			  )
    			)
    		)
    	 )
           )
      )
    )
    
    
    

     


  5. Vào lúc 22/2/2024 tại 11:18, Doan Van Ha đã nói:

    Trước đây tôi có đọc 1 thuật toán để "xấp xỉ" các đường thẳng và đường cong, nhưng giờ quên và tìm lại chưa ra. Nó có cơ sở rất thuyết phục chứ không theo kiểu "thích gì chọn nấy" được.
    Thuật toán này trong Excel được đưa vào để vẽ đồ thị, từ đó suy ra phương trình, cho các bài toán dạng thống kê dựa vào tập hợp các số đo (xi, yi) thực nghiệm.

    Ngày xưa cháu học trong trường có môn gọi là "Phương pháp tính" cũng có thuật toán này. Nhưng lâu rồi (20 năm) nên cháu không nhớ


  6. Bản vẽ bạn gửi không cần lisp gì cả. Xuất toạ độ Point ra là có cao độ Z. Phun lại là xong.

    Nếu như Point hoặc Circle không có cao độ (khác 0 hoặc khác giá trị chuẩn nhưng không đều) thì mới cần đến việc viết theo yêu cầu. 

    Liên hệ mình Zalo: 0972.0168.25 để trao đổi thêm

×