我有我一直在研究的代码
- (defun c:setstarttray ()
- ;Sets the start point and angle of tubing
- (setq pt (getpoint "\nSpecify start point: "))
- (setq ANGL (getangle pt "\nSpecify angle: "))
- )
- (defun c:DRAWTRAY ()
- (setvar "ORTHOMODE" 1) ;orthomode should be off
- (setvar "OSMODE" 0)
- (command "LAYER" "M" "CABLE_TRAY" "C" "T" "255,255,0" "" "")
- (setq Tlength (getdist pt "\nSpecify Tray Length: "))
- (setq A (polar pt (+ angl (dtr 90))) (/ 600 2)) ;Overall width = 600
- (setq B (polar pt (- angl (dtr 90))) (/ 600 2))
- (setq pt (polar pt ANGL TLength))
- (setq C (polar A ANGL TLength))
- (setq D (polar B ANGL TLength))
- (command "PLINE" A B D C "C")
- (setq LASTPLINE (entlast))
- (command "-bhatch" "P" "EXT250" "" "" "S" LASTPLINE "" "")
- )
- (defun c:test ()
- (setq pt1 (getpoint "\nSet Start Point: "))
- (setq pt2 (getpoint pt1 "\nSet End Point: "))
- (cond
- ((/= (ssget PT1) nil)
- (setq ss (ssget PT1))
- (setq ent (ssname ss 0))
- )
- ((= (ssget PT1) nil)
- (setq ent nil)
- )
- )
- (cond
- ((= (ssget PT1) nil)
- (princ)
- )
- ((/= (ssget PT1) nil)
- (setq obj (entget ent))
- (setq typeinfo1 (substr (cdr (assoc 0 obj))1))
- (setq layerinfo1 (substr (cdr (assoc 8 obj))1))
- (setq pointinfo (cdr (massoc 10 obj)))
- (setq pointinfo1 (car pointinfo))
- (setq pointinfo2 (caddr pointinfo))
- (setq 1stpt (car pointinfo1))
- (setq 2ndpt (car pointinfo2))
-
- (setq midpt(SubstNth (/ (+ 1stpt 2ndpt) 2) 0 pointinfo1)) ;really shouldnt be using midpoints, should be snapping to the existing entity
- (princ midpt)
-
- (if (and (= typeinfo1 "LWPOLYLINE") (= layerinfo1 "CABLE_TRAY"))
- (progn
- (setq newpt (cadr midpt))
- (setq newpt (+ 800 newpt))
- (princ newpt)
- (princ "\n")
- (setq newmidpt (SubstNth newpt 1 midpt))
- (setq TLength (distance pt1 pt2))
- (setq ANGL (angle pt1 pt2))
- (setq insang (- (rtd ANGL) 90))
- (if (= INSANG 0)
- (command "-insert" "3-WAY TRAY" midpt "1" "1" INSANG)
- (setq A newmidpt (chang (+ angl (dtr 90))) (/ 600 2)) ;divided by 2 is the width
- (setq B newmidpt (chang (- angl (dtr 90))) (/ 600 2))
- (setq pt newmidpt ANGL TLength)
- (setq C A ANGL (- TLength 800)) ; The continuing pipe should continue from the t-bend if the length specified
- (setq D B ANGL (- TLength 800)) ; by user is greater than the length of the t-bend
- (command "PLINE" A B D C "C")
- )
- )
- )
- )
- )
- (princ)
- )
- (defun massoc (key alist / x nlist)
- (foreach x alist
- (if (eq key (car x))
- (setq nlist (cons (cdr x) nlist))
- )
- )
- (reverse nlist)
- )
- (defun LM:SubstNth ( a n l )
- (if l
- (if (zerop n)
- (cons a (cdr l))
- (cons (car l) (LM:SubstNth a (1- n) (cdr l)))
- )
- )
- )
这段代码的目的是绘制非常复杂的管道,但是我还没有弄清楚如何在正交模式关闭和应该关闭时进行补偿。这个想法是通过调用一个函数来构造管道,该函数将设置管道的起点和角度。接下来,一个名为drawtray的函数调用从已绘制的最后一个管的上一个点或从最初设置的起点开始连续绘制管。
有一个函数我没有能够正确编写,它叫做test。如果此功能检测到具有第一个点的管,则会插入一个称为“三向托盘”的块,并且它应该分割管,以便在放置三向托盘时有三个实体。有一个图表可以帮助解释这一点,但我一直在努力为此编写代码。出于说明目的,该块被涂成绿色,但实际上与管位于同一层。
|