{"id":1292,"date":"2011-05-02T01:36:30","date_gmt":"2011-05-01T17:36:30","guid":{"rendered":"https:\/\/www.highflybird.com\/blog\/?p=126"},"modified":"2020-02-29T22:59:48","modified_gmt":"2020-02-29T14:59:48","slug":"%e7%94%bb%e8%a1%a3%e6%9f%9c%e7%9a%84%e7%a8%8b%e5%ba%8f","status":"publish","type":"post","link":"https:\/\/www.highflybird.com\/blog\/?p=1292","title":{"rendered":"\u753b\u8863\u67dc\u7684\u7a0b\u5e8f"},"content":{"rendered":"<p>\u5728CAD\u4e2d\u753b\u8863\u67dc\u6709\u65f6\u5019\u662f\u4e00\u4ef6\u6bd4\u8f83\u9ebb\u70e6\u7684\u4e8b\u60c5\uff0c\u5bf92012\u4ee5\u4e0a\u7684\u7248\u672c\uff0c\u53ef\u4ee5\u7528\u52a8\u6001\u56fe\u5757\u6765\u5b9e\u73b0\uff0c\u4f46\u8fd8\u662f\u6709\u70b9\u7f57\u55e6\u3002<br \/>\n\u6211\u4e0b\u9762\u7684\u7a0b\u5e8f\u5b9e\u73b0\u6bd4\u8f83\u7b80\u5355\uff0c\u53ea\u8981\u6572\u5165\u4e00\u4e2a\u547d\u4ee4\uff0c\u7136\u540e\u4f60\u5c31\u53ef\u4ee5\u4efb\u610f\u5e03\u7f6e\u4f60\u7684\u8863\u67dc\u4e86\u3002<br \/>\n\u4e0b\u9762\u662f\u5176\u5b9e\u73b0\u7684\u4ee3\u7801\u3002<br \/>\n<!--more--><\/p>\n<pre lang=\"lisp\" line=\"1\" escaped=\"true\">(vl-load-com)\n(prompt \"\u547d\u4ee4\u662fYG\")\n;;;\u753b\u8863\u67dc\u7684LISP\u7a0b\u5e8f-----------------------------------------------------\n;;;Copyright Highflybird------------------------------------------------\n;;;2011.04.30 ----------------------------------------------------------\n(defun c:YG(\/ lst doc size pIn str pnt pts scr dlt dist1 dist2 Vec dist \n              lst1 lst2 lst3 cur1 cur2 Cur3 obj1 obj2 Obj3 Objs sLen ang1 ang2 ang par\n           )\n  (if (&lt; (setq size (getvar \"USERR5\")) 100.)                            ;\u521d\u59cb\u5316\u8863\u67dc\u6df1\n    (progn \n      (setvar \"USERR5\" 600.)                                            \n      (setq size 600.)\n    )\n  )\n\n  ;;\u83b7\u53d6\u5e03\u7f6e\u4e00\u4fa7\uff0c\u6216\u8bbe\u7f6e\u8863\u67dc\u6df1\n  (setq str \"n\u70b9\u53d6\u5e03\u7f6e\u7684\u4e00\u4fa7[\u8bbe\u7f6e(Set)] &lt;\u8d70\u5411\u53f3\u4fa7&gt;:\")                  ;\u83b7\u53d6\u5e03\u7f6e\u65b9\u5411\n  (initget 8 \"Set\")\n  (setq pIn (getpoint str))\n  (while (= pIn \"Set\")\n    (setq size (getvar \"USERR5\"))\n    (initget 14)\n    (setq size (getdist (strcat \"n\u8f93\u5165\u8863\u67dc\u6df1&lt;\" (rtos size) \"&gt;:\")))     ;\u5982\u679c\u9700\u8981\u8bbe\u7f6e\u8863\u67dc\u6df1\n    (if (&gt;= size 100)\n      (setvar \"USERR5\" size)\n      (setq size (getvar \"USERR5\"))\n    )\n    (initget 8 \"Set\")\n    (setq pIn (getpoint str))\n  )\n\n  ;;\u83b7\u53d6\u9760\u5899\u8fb9\n  (initget 9)                                                           ;\u9632\u6b62\u7a7a\u8f93\u5165\uff0c\u70b9\u53ef\u5728\u753b\u9762\u5916\n  (setq pnt (getpoint \"n\u8d77\u70b9:\"))\n  (setq pts (cons pnt nil))\n  (setq str \"n\u9009\u53d6\u70b9&lt;\u56de\u8f66,\u7a7a\u683c\u6216\u53f3\u952e\u7ed3\u675f\u70b9\u53d6&gt;:\")\n  (while (setq pnt (getpoint (car pts) str))                            ;\u901a\u8fc7\u70b9\u53d6\u65b9\u5f0f\u83b7\u5f97\u9760\u5899\u8fb9\n    (setq pnt (list (car pnt) (cadr pnt)))                              ;\u8fd9\u6b65\u4e0d\u53ef\u5c11\uff0c\u9632\u6b62\u4e0d\u5728\u540c\u4e2a\u5e73\u9762\u4e0a\n    (grdraw pnt (car pts) 3 1)                                          ;\u865a\u7ebf\u663e\u793a\u5e03\u7f6e\u9760\u5899\u8fb9\n    (setq pts (cons pnt pts))                                   \n  )\n\n  ;;\u8f93\u5165\u5b8c\u6210\u5f00\u59cb\u753b\u56fe\n  (if (&gt; (length  pts) 1)                                               ;\u81f3\u5c11\u8981\u4e24\u70b9\n    (progn\n      (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))\n      (vla-StartUndoMark doc)                                           ;\u8bbe\u7f6eUndo\u8d77\u59cb\u70b9\n      (setq scr (GetRandFunction))\n      ;;\u4e00\u4e9b\u521d\u59cb\u5316\u5de5\u4f5c--------------------------------------------------\n      (setq pts (reverse pts))                                          ;\u70b9\u96c6\u53cd\u8f6c\n      (setq pts (mapcar (function (lambda (x) (trans x 1 0))) pts))     ;\u628a\u70b9\u96c6\u8f6c\u5316\u5230\u4e16\u754c\u5750\u6807\u7cfb\n      (if pIn\n        (setq pIn (trans pIn 1 0)\n              dlt (det (car pts) (cadr pts) pIn)                        ;\u53f3\u624b\u6cd5\u5219\n        )\n      )                                                 \n      (if (&gt; dlt 0)                                                     ;\u901a\u8fc7\u53f3\u624b\u6cd5\u5219\u5224\u65ad\u504f\u79fb\u65b9\u5411\n        (setq dist1 (* size 0.5)\n              dist2 size\n        )\n        (setq dist1 (* size -0.5)\n              dist2 (- size)\n        )\n      )\n\n      ;;\u9996\u5148\u6784\u5efa\u8863\u67dc\u7684\u5916\u8f6e\u5ed3\u548c\u4e2d\u5fc3\u7ebf------------------------------------\n      (setq lst1 (OffsetPts pts dist1 nil))                             ;\u8863\u67dc\u7684\u4e2d\u5fc3\u7ebf\u70b9\n      (setq lst2 (OffsetPts pts dist2 nil))\n      (setq lst2 (append pts (reverse lst2)))                           ;\u8863\u67dc\u7684\u5916\u8f6e\u5ed3\u70b9\n      \n      (setq Cur1 (make-Poly lst1 nil))                                  ;\u753b\u8863\u67dc\u7684\u4e2d\u5fc3\u7ebf\n      (setq Cur2 (make-Poly lst2 T))                                    ;\u753b\u8863\u67dc\u7684\u4e2d\u5fc3\u7ebf\n      (setq Obj1 (vlax-ename-&gt;vla-object Cur1))\n      (setq Obj2 (vlax-ename-&gt;vla-object Cur2))\n\n      (setq lst3 (OffsetPts lst2 (* (sign dist1) 50) T))\n      (setq Cur3 (make-Poly lst3 T))\n      (setq obj3 (vlax-ename-&gt;vla-object Cur3))\n\n      (setq lst  (list obj1 obj2 obj3))\n\n      (setq Objs (Make-clothes-hanger))                                 ;\u753b\u8863\u67b6\n      (setq dist 0.0)\n      (setq sLen (vla-get-length Obj1))                                 ;\u4e2d\u5fc3\u7ebf\u957f\u5ea6\n      (setq ang1 (\/ pi 0.1 180))                                        ;\u6446\u52a8\u5e45\u5ea6\u572810\u5ea6\u5de6\u53f3\n      (setq ang2 (- ang1))\n      (while (&lt; dist sLen)\n        (setq pnt (vlax-curve-getPointAtDist Obj1 dist))                ;\u8863\u67b6\u7684\u5b9a\u4f4d\u70b9\n        (setq par (vlax-curve-getParamAtDist Obj1 dist))\n        (setq Vec (vlax-curve-getFirstDeriv Obj1 par))                  ;\u8863\u67b6\u7684\u6c34\u5e73\u65b9\u5411\n        (setq ang (angle '(0 0 0) Vec))\n        (setq ang (+ ang (Rand scr ang1 ang2)))                         ;\u8863\u67b6\u7684\u65cb\u8f6c\u89d2\u5ea6\n        (setq pIn (vlax-curve-getPointAtParam obj1 (fix (+ 0.5 par))))  ;\u8f6c\u70b9\n        (if (&gt;= (distance pnt pIn) 300)                                 ;\u5982\u679c\u4e0e\u8f6c\u70b9\u8ddd\u79bb\u5927\u4e8e300\n          (Copy-and-tranformby Objs pnt ang)                            ;\u62f7\u8d1d\u539f\u70b9\u5904\u8863\u67b6\u5e76\u53d8\u6362\n        )        \n        (setq dist (+ dist (Rand scr 80 300)))                          ;\u6b65\u8fdb\u5230\u4e0b\u4e00\u70b9(100,300)\u8fd9\u4e24\u4e2a\u6570\u503c\u53ef\u81ea\u8c03\n      )\n      (mapcar 'vla-erase Objs)                                          ;\u628a\u539f\u70b9\u5904\u8863\u67b6\u5220\u9664\n      (makeGroup Doc Lst)\n      (vlax-release-object scr)                                         ;\u91ca\u653e\u811a\u672c\u5b9e\u4f8b\n      (vla-EndUndoMark doc)                                             ;\u8bbe\u7f6eUndo\u7ec8\u6b62\u70b9\n      (vlax-release-object doc)\n    )\n  )\n  (redraw)                                                              ;\u91cd\u753b\u4e00\u4e0b\uff0c\u6d88\u9664Grdraw\u7684\u75d5\u8ff9\n  (princ)                                                               ;\u9759\u9ed8\u9000\u51fa\n)\n(defun sign (x)\n  (if (&lt; x 0) -1 1)\n)\n;;;\u51fa\u9519\u5904\u7406\n(defun *error_msg* (msg)\n  (redraw)\n  (princ msg)\n)\n\n;;;\u753b\u7ebf\u6bb5\n(defun Make-Line (p q)\n  (entmakeX (list (cons 0 \"LINE\") (cons 10 p) (cons 11 q)))\n)\n\n;;;\u7ed8\u5236\u591a\u6bb5\u7ebf\n(defun Make-Poly (pp isClosed \/ C)\n  (if isClosed\n    (setq C 1)\n    (setq C 0)\n  )\n  (entmakeX                                                             ;\u753b\u51f8\u5305\n    (append\n      (list\n        (cons 0 \"LWPOLYLINE\")\n        (cons 100 \"AcDbEntity\")\n        (cons 100 \"AcDbPolyline\")\n        (cons 90 (length pp))                                           ;\u9876\u70b9\u4e2a\u6570\n        (cons 70 C)                                                     ;\u95ed\u5408\u7684\n      )\n      (mapcar (function (lambda (x) (cons 10 x))) pp)                   ;\u591a\u6bb5\u7ebf\u9876\u70b9\n    )\n  )\n)\n\n;;;\u753b\u8863\u67b6\n(defun Make-clothes-hanger (\/)\n  (mapcar\n    (function (lambda (p q \/) (VLAX-ENAME-&gt;VLA-OBJECT (make-line p q))))\n    '((-17.5 -225.) (+17.5 -225.) (-35.0 -210.) (-35.0 +210.))\n    '((-17.5 +225.) (+17.5 +225.) (+35.0 -210.) (+35.0 +210.))\n  )\n)\n\n;;;\u62f7\u8d1d\u539f\u70b9\u5904\u7684\u7269\u4f53\u5e76\u53d8\u6362\n(defun Copy-and-tranformby (Objs pnt Ang \/ newObj)\n  (foreach obj Objs\n    (setq NewObj (vla-copy obj))\n    (vla-move NewObj (vlax-3d-point '(0 0 0)) (vlax-3d-point pnt))\n    (vla-rotate NewObj (vlax-3d-point pnt) Ang)\n    (setq lst (cons NewObj lst))\n  )\n)\n\n;;;\u6700\u540e\u505a\u6210\u7ec4\n(defun MakeGroup (Doc objLst \/ Groups sGroup oGroup aBound eArray)\n  (setq Groups (vla-get-groups doc))\n  (setq sGroup (getvar \"cdate\"))\n  (setq sGroup (rtos (* 1e9 (- sGroup (fix sGroup))) 2 0))\n  (setq oGroup (vla-add Groups (strcat \"YG\" sGroup)))\n  (setq aBound (cons 0  (1- (length objLst))))\n  (setq eArray (vlax-make-safearray vlax-vbObject aBound))\n  (vlax-safearray-fill eArray objLst)\n  (vla-AppendItems oGroup eArray)\n)\n\n;;;\u504f\u79fb\u70b9\u96c6(\u6ca1\u7528vla-offset)\n;;;\u6b64\u51fd\u6570\u53ef\u4ee5\u6269\u5c55\uff0c\u4e3a\u4ee5\u540e\u7684\u7f16\u7a0b\u51c6\u5907\n(defun OffsetPts (pts d isClosed \/ AN1 AN2 CNT HPI LST PN1 PN2 PN3 PN4 PNT PPP PT1 PT2 PT3 P12)\n  (setq ppp pts)\n  (setq cnt (length ppp))\n  (cond\n    ( (&gt;= cnt 2)\n      (setq hPi (\/ Pi 2))\n     \n      (setq pt1 (car ppp))\n      (setq pt2 (cadr ppp))\n     \n      (setq an1 (angle pt1 pt2))\n      (setq pn1 (polar pt1 (+ an1 hPi) d))\n      (setq pn2 (polar pt2 (+ an1 hPi) d))\n     \n      (setq pn4 pn2)\n\n      (setq lst (list pn1))\n      (if isClosed\n        (setq ppp (append pts (list (car pts)))\n              p12 (list pn1 pn2)\n        )\n      )\n      (while (caddr ppp)\n        (setq pt1 (car ppp))\n        (setq pt2 (cadr ppp))\n        (setq pt3 (caddr ppp))\n    \n        (setq an1 (angle pt1 pt2))\n        (setq pn1 (polar pt1 (+ an1 hPi) d))\n        (setq pn2 (polar pt2 (+ an1 hPi) d))\n\n        (setq an2 (angle pt2 pt3))\n        (setq pn3 (polar pt2 (+ an2 hPi) d))\n        (setq pn4 (polar pt3 (+ an2 hPi) d))\n\n        (setq pnt (inters pn1 pn2 pn3 pn4 nil))\n        (and  pnt (setq lst (cons pnt lst)))\n        (setq ppp (cdr ppp))\n      )\n      (if isClosed\n        (setq lst (cdr (reverse lst))\n              pnt (inters pn3 pn4 (car p12) (cadr p12) nil)\n              lst (cons pnt lst)\n        )\n        (setq lst (cons pn4 lst)\n              lst (reverse lst)\n        )\n      )\n      (vl-remove nil lst)\n    )  \n  )\n)\n;;;===============\n;;;\u884c\u5217\u5f0f,\u5224\u522b\u6cd5\u5219\n;;;===============\n(defun det (p1 p2 p3 \/ x1 y1)\n  (setq x1 (car p1)\n        y1 (cadr p1)\n  )\n  (- (* (- (car p2) x1) (- (cadr p3) y1))\n     (* (- (car p3) x1) (- (cadr p2) y1))\n  )\n)\n\n;;;---------------------------------------------------------------------\n;;;Definine Rand()  --which one is better? I don't know.                \n;;;---------------------------------------------------------------------\n(defun GetRandFunction(\/ scr str) \n  (setq scr (vlax-create-object \"ScriptControl\"))                       ;Create a script\n  (if scr\n    (progn\n      (vlax-put scr 'Language \"VBS\")\n      (setq str \"Randomizen\n                Function Rand(x,y)n\n                Rand=x+Rnd*(y-x)n\n                End Function\"\n      )                                                                 ;for randomize some features\n      (vlax-invoke Scr 'ExecuteStatement str)                           ;Execute script\n      (defun Rand (scr nMin nMax)                                       ;Rand function\n        (vlax-invoke scr 'run \"Rand\" nMin nMax)\n      )\n    )\n    ;;;rand function-some code from Le,--thanks.\n    (defun Rand (Option nMin nMax \/ seed)\n      (setq seed (getvar \"USERR4\"))\n      (if (= seed 0.)\n        (setq seed (getvar \"TDUSRTIMER\")\n              seed (- seed (fix seed))\n              seed (rem (* seed 86400) 1)\n        )\n      )\n      (setq seed (rem (+ (* seed 15625.7) 0.21137152) 1))\n      (setvar \"USERR4\" seed)\n      (+ nMin (* seed (- nMax nMin)))\n    )\n  )\n  scr\n)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5728CAD\u4e2d\u753b\u8863\u67dc\u6709\u65f6\u5019\u662f\u4e00\u4ef6\u6bd4\u8f83\u9ebb\u70e6\u7684\u4e8b\u60c5\uff0c\u5bf92012\u4ee5\u4e0a\u7684\u7248\u672c\uff0c\u53ef\u4ee5\u7528\u52a8\u6001\u56fe\u5757\u6765\u5b9e\u73b0\uff0c\u4f46\u8fd8\u662f\u6709\u70b9\u7f57\u55e6\u3002 \u6211\u4e0b<\/p>\n<p class=\"more-link\"><a href=\"https:\/\/www.highflybird.com\/blog\/?p=1292\" class=\"themebutton2\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[9],"tags":[37],"class_list":["post-1292","post","type-post","status-publish","format-standard","hentry","category-programming","tag-37"],"_links":{"self":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1292"}],"version-history":[{"count":0,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1292\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}