我以为你想做的都是,问题是,需要反复做拣两条线,这样矩形之间就可以画出拣对,中间也可以有一条线。两条线使用entsel的不同方法。也许选择第一个点,然后perp top pt,然后选择两条线?保存绘制直线。Ps我画了一条弯曲的线,它仍然有效!
- (defun c:rectangs2 ( / tpp1 pt1 pt2 intpt1 intpt2 intpt3 intpt4 ss)
- (if (not AH:getval) (load "getval"))
- (ah:getval "Enter width.." " edit_width = 10;" " edit_limit = 8;")
- (setq width (Atof item))
- (setq pt1 (getpoint "\nPick 1st point"))
- (setq pt2 (getpoint "\nPick 2nd point"))
- (command "line" pt1 pt2 "")
- (setq obj (entlast))
- (setq obj2 (vlax-ename->vla-object obj)) ;convert pick line to vl object
- (alert "Pick 2 lines press Enter to exit on 1st line")
- (while
- (setq obj1 (vlax-ename->vla-object (car (entsel "pick 1st line"))))
- (setq intpt1 (vlax-invoke obj2 'intersectWith obj1 acExtendThisEntity))
- (setq obj3 (vlax-ename->vla-object (car (entsel "pick 2nd line"))))
- (setq intpt2 (vlax-invoke obj2 'intersectWith obj3 acExtendThisEntity))
- (setq intpt3 (polar intpt1 0.0 width))
- (setq intpt4 (polar intpt2 0.0 width))
- (command "pline" intpt1 intpt2 intpt3 intpt4 "C")
- (vla-delete obj2)
- ) ; while
- )
你也需要这个
- ;; Input Dialog box with variable title
- ;; By Ah June 2012
- ;; code (ah:getval title)
- (defun AH:Getval (title width limit / fo)
- (setq fname "C://acadtemp//getval.dcl")
- (setq fo (open fname "w"))
- (write-line "ddgetval : dialog {" fo)
- (write-line " : row {" fo)
- (write-line ": edit_box {" fo)
- (write-line (strcat " key = " (chr 34) "sizze" (chr 34) ";") fo)
- (write-line (strcat " label = " (chr 34) title (chr 34) ";" ) fo)
- ; these can be replaced with shorter value etc
- ;(write-line " edit_width = 18;" fo)
- ;(write-line " edit_limit = 15;" fo)
- (write-line width fo)
- (write-line limit fo)
- (write-line " is_enabled = true;" fo)
- (write-line " }" fo)
- (write-line " }" fo)
- (write-line "ok_cancel;}" fo)
- (close fo)
- (setq dcl_id (load_dialog "c:\\getval")) ; make this a directory of your choosing
- (if (not (new_dialog "ddgetval" dcl_id))
- (exit))
- (action_tile "sizze" "(setq item $value)(done_dialog)")
- (mode_tile "sizze" 3)
- (start_dialog)
- ; returns the value of item
- )
|