计算多段线ar的凸出度
你好我想根据(中心)点、角度1、角度2和半径变量计算多段线弧段的凸出度。
我使用的公式如所述http://lee-mac.com/bulgeconversion.html
(圆弧到凸出)
该公式基于圆弧对象,该对象始终返回正凸出。
但是,LW多段线中圆弧段的凸出量具有负值(顺时针)或正值(逆时针)。
如何根据变量计算该值是负值还是正值? 与这些人交谈:http://www.cadtutor.net/forum/showthread.php?102354-多段线凸出转换
gr.Rlx
由于只有一个中心、起点和终点,圆弧是顺时针还是逆时针穿过起点和终点是不明确的,需要更多信息。 只是想知道:当你可以从多段线获得信息时,为什么要计算凸出? 我想在LW多段线(红线)穿过具有指定弯曲半径(绿线)的圆(青色虚线)时重新布线。LW多段线始终位于第一象限,但起点/终点可以在任何方向。圆CP可以是左、右或在LW多段线上。弯曲半径线必须遵循围绕圆的最短路径。最后,需要将折弯半径线添加到现有的LWMOLYLINE中
我已经设法计算了4个顶点(v1-v4),但我在计算正确的凸出度时遇到了问题,因为LW多段线的方向会影响计算正确凸出度(正或负)的第一个角度和第二个角度的顺序
https://www.cadtutor.net/forum/attachment.php?attachmentid=62868&cid=1&stc=1
https://www.cadtutor.net/forum/image/png;base64,Ivborw0kgoaaaansuheugaaayiaaajucaaaabmiwvhaaagagaleqvr4nozdexu5d3//vrhkag7genswzcqpazjdotfqkbscuanchiprgxanbbmcbiaooxetqlflyqtoigta6vgvuggkioptfyvqwblmpk29e3+/7fcu0sd9/x7z++po6wfmmmpmzndnxowdepj5/wGSWMyfhM+9c13U+139Ysx3q2tiy+fu33lb9aqaaizlp1r/RmIWAACANdvxH16vt+hqqqvt 671E7ZNLVRZ+xtter9fr9Xbce7/0Za/Xu+KSK7XE70EHFLS6Z6F0B2WKWNWHJFSDODKK3ZQ+UTRKZAAAASH1WKDSG698IABA9ZHH357ZRIV1U9ILJXB8CWVXVB6VFORA22uWSdOdklflYJX6ZyF1mzHDevWP/olf6zelaaggyhvypzntc6r8nv1/+htvS6NTcsySviSNdUl/f/2ntxuuvt6a7bh3xqv4s+jk11wyhyaaec2wyrflolvky65qhresrlmvf7g28fj1sawzzzsxw3r1j/y6OM+z0jmagaascpjlzrn7+6dsDRLClmlc5ZKN9TRswyqB07d8kDk8tWrPK5xev17ti5y5rtWLZilc8tAKATodQxihi09O+yyyy0 jq1ieb3erx59pmtrlgu2o+Hq66VJRmkpvZWYZUzrN7Z2dfdIf5dqkDXbsWPnLmUN6uruWbZi1Z59+9dvbjvukx88aec4eotyv3cprqyaoaedhnbvippjqfjls+jpL8Ulc+xcx8vagget+WJoI7JRQyIEpVjln/HBxhCwFoTcNJQphzWcnv6JN+cPl197nLhbweA6VWfu/yb06fl4mmnv44pixgjeqpzsgi9uzbr/wNTyo9Pr8FKnm9XmV5kn+h3NS25cOPDuU6yoS/IwAmluso+/cjq5vatihhs8kqyz5fdigsyc1kbrgpatwwwwpmkrhgl55955oixt97eivwdatcxw29voxl0y/zi2cobq6xjwysycoc5ifr4v8aod/5jlPfOP/0qi C1de5vb0zvlwtvb3bmcu5iw42+3pu3DlZf5fCqWODVjEABURs6CyDJvriV3PvPr6mzPyioUfDACTmZFX/orrbz6x65kmm0v4wqadimzbfuxl87u6e65cc4pwiwfgmleuuagrau4elmmexeo1jZRCAOqSfoVbvaZR+JEAISJmISoUA/ufwg8ggalk2apzkaddiwyhwoisuwwachf5dyyimiuocnqcei2yxmchifkio11f24odhw7y9kpxiabjalm0phj4ma2pyjelerx9bnl3z4+duabedhkiylmiwo49dqabfjubygrsxc1goakdewoiqynmqqqtciggalywdkzkellnlwbec7eeifnqco2baysfzrgasqsaifnyaceikaryq7elghhqxgenwahqrw+zimqhmgzgzgzgzgzzgzgzgzgzgzgzGFTBGGFCCAUGGGGPKHMGTAKY7MDPRCJWSADJLK2GBA9MGZKFRUY6Y3/7+s/c/OPjN6dOz558l/HgA6MTs+Wd9c/r0+x8c/O3vP6OhMcyBmAUBvN/9uadjq/CDAaAT93RslSrDX/7ytfCDAVRBzIIAl115nVRMjx0/aXPNEn48AISzuWYdO37S6/Xue+/9Y668TVJXAKOGZKEMOWMTTVHS18IMBINZKS1D7VD733V+QjAUzIWZBGClpfXTot7R4BmJchq3wo0O/PX6YI4WFKYFMQATV11ZV9XQLZS0TFICQANC/r9a6+5NRWKOI5GFKLZJ/W4INZF9UIPXIAASVPPAGW/MF80WFISAUOHZEMNXF/FE8WF FF+FK4UcCQKDzL1x53/3327kgBQZIjintfmrvu3xxnndek5tueha0ci9bznlddc3xrnptrpvcdardrfzijintfmlf++OZbN2TaWQUPxKhMe+HNt27Ycu+PiVkwH2IWRLK5ZnZ2bll/20z7izmfqiyyyf85af9vgzs4txcydzelaaagkohzaaaauuhmgl60d3tmf5ulpwwawnkwvrr3dao/dcbkifkqyeaa2d7raxpnzlc57mhuqvpynvbdaqcluvgqz19sjzuikqfjyauohzeemowdzx4q6+rwnwo/jacayxgutrv3lfdwkusbycbeliik1lfvb2juy8oufhxuabdtulm9uac20fxzyfbeliikrk1z+cvt7r1lfqufhxuaadwtac5tbwml1vplawlaw amrczijjpbv3beookunrhrwva+wvw3thtmouisxc+ZFzIJIPrW1asl5dzS3ZNhcwg8MQFSl5zgbm9bV1TdI/yRmwayIWRDJp7bmF5VzaTcQI9o7Op2lFdLfiVkwK2Iwrkk2arbscmexcwaaicoigzbd2ghd5gbywmqo4hzeml/poB28IDp+V/swqhziqybzec1lbawqpm5t+6hZgFsyJmQaSAtZV28ICJBWxETMyCWRGzIFLA2ko7eMDEAv4eRcyCWRGzIFJ/tzv28ibzbvvvqmycwrgzifj/tzv28iap9xenczelxmgj91vau9wbmkmdhfmiwqybzgorqcslakyfzelaagkohz0c/awqnmiaxcbinskdvcayx2iqsibv+qqtt4weycngphbrbmipgfkylxvtrba6yrvo0wmqtmrccycsmfrk+3gAdMI/lsTMQtmRcyCSAPWVtrBA+yqfa0amqtmrccycsapwvtbmaiyw4butxcyyftelig1yw7kchDCH4P1 ZIFKWK2IWRKK2ARBSCMBEXCYIRG0FYKUWLYIWTCA9O5OZ2MF8MMEAGM/HHLINQU/QCZ2PTUR6BUFHAIACCXMICWebMGKGHZHSUV1A1TXFKOEQFHZCACIXSLOVJQ5GVMQSIHVHBM+2FZS2TNBXLHR8WGLCE2GSYMAWZMBPNBRA03T8UAW1KX7OFBJBHC6ELFMBBRIHZECN02PRJKG1R7YIVRBJ+zABCF+IG8QSMBUXCYKFVR6HSAM9AL5A5ZIFZAAUAZY/F1 Gzijzebmguli11vlawwxhgleb/4ui2bbrihzeinasbkkyb5ebmgeruvgjvsapmizsfgqpydacqnd8bctelrhl6iloaath5hzaq2aw4fdkcgudq/A7GAmAWRIliQEWK3QwCihNj5XYm1WTArYhZEiqC2RlDBAWgpgt+fifkwk2iwriqstjifaehzbdp7xcyyyftelikvwwldc+hwznepelngvsibrzbevacudpiui6qsycwrgzibk1fycvugdzimzbjgoraculozfzijig6mtimh9cbicx1ifsykmavdoh08oencngl4igbbqgghd+gnzvyah8qsidqlawqo6mpwwwwqyiwrbpmlwvdcargzmnx9ifsykmawrbblmaelba9gmw8/jeljgjg8 vmqsidbk2st4w0ilbxpvczijzebmg0ibrk+3gAf0YTI8VYhbMipgFkaitAKyUApgXMQsiUVsBWCkFMC9iFkRSpba2d3Q6SyuEvxcgZg1++p6YBbMIzshy0nocju3r6uobhb8jelo4gaxodzelldewdxw3phjkbv+jebsoruk0b9ifgw017y3njau7tc+jeamyhgwuaqxcyipnacjra5c0trzn2quhcigqmxxdosmbuxcykpvtzhkvt7r3llvxc3xeqa1tzj2ybmbizkekfwtrxx1dy9o69byn8dcfxi5nn+XEbNgVsQsiKRibXWWVtARHtDeYJq/y4hzmctifksitgwugggggggggggggggggggqsiertbqsierfclfmc8bybqdhtt8ycwrgzijk6tvwt1bgaqhidsfeljgvmqumosq15qagrbcvibteljikpp0saqyinsbakihzmbx2/QA0wA5XQIiIWRApGgsy2MUWiDbV92tnbRbMipgFkaJRW6UWNHDHC0UGZSX83QGMLJ7JBGXAV1ffoojzerngvsqsibsn2ppfve47eccq2js6nauvkj4hmqtmrcycsnrwafzkacylmawrqk0arjqcmbcxcyjf7bsdh6ihnyhozyfbeligupdpko3ggsqj0iqkxc2zfziji0auttimhoifkdvoiwtaryhbbwgopo/wuEi5gFc+LzAFAdv70A4SJmQaSozhTQDh5QV/tm4pk0hfkrsybsvgsr7eabfux1yhjifsykmawrol PBAQCPQCT6FVKIWTARYHZEORYCSFIKYF7Elihebqvgprtavihzeemd2ko7egdwoj0ft8ycwrgzifk0ayvt4afvrpucemiwziqybze0qk20gwcgl9rtuyhzmctifkyohOrainhsf4Gymqsmxmxycemej8rgjejjgf86mdpddayzlwdesnmqsrtfmqhdh6imdbxkba2c2zfziji2trw2sedg6fbvxrifsykmawrqk0arjqcmcxcxcyjrwwfykqul2iwrnkytrz3ddplk4s/zcbanjtwj2bbrihzeemz2pqe42xswldx3yd8lqmgotnli8qsmbuxcyjpwvklk6va2jtyhk3zvgjo1qyfmwayiwj9qaas9sbmmtqv0u/f0dhqbla19ifsykmiuyuluyul O7VLMLNDNEKPXIAP2J+TsweMQsxJAcR2lbe0d5ZZXwIwH0j+BVWOarsycs9jmfdfFunju3r0nocwt87ogfanh+XMWkIsyJmQSTta6uztIKO8EAoNGj+LiNmwayIWRCJ2Grasimaergzibk1fycvugdzimzbjfg1vczembyhgy1tsycwrgzijkq2qrx2l7awdtr/K5EzIJZEbMgkqjaypXqQH806/yurmycwrgzijjko2krfrsagltu/kxgzyffelmqiuz8lgm7xgwiglmiwypmrfa55hpb9rfzekmerlof9azrg4bvefmg2qiuwod0dlrvu5ymwwzjgoraculaozfziji1fyavkobziuybzge11bawqmsdpowksbexeligtray4bebeb4bebj Qib0ohjgfsyjmqsthtzxl1wgj2bynwksbecxeligkvlbsjbgw6qbhr/BSAEQJMQsiCa+twj9dAD0Q/vuG8FIARAkxC7GOdvAAs+dalbczeotob48yx7ugqqsycshmykaacpco9soodsaeqdmqssiuvsbwckfmc9ifksitgkwuggxsqsiksf2tre0eksrrb+giddjprp9sakilmawrdfjb03ocju3r6uobhj8qqgm6uqrej6uaub0xcylpp7awv1a1txfkoeqfhwmgjz00nnfpkqdurcypcqprzn2wuaw1pra5ckpbncmftrz6qcuaoizkxdxwmtrlz2tmfzc4uccaen483ezrkobojfivcthedpw3thewv8cmbtetehzdydaizn2www8cmbj4w8cmbd FNAV9XVNZQ2RUVPCQO/EIDAAP4OAICYBFYBS7RCDXE3A9OQ3VWDMD1IFKRIQYAK6UA5KMXGKJUVGBWSGHMI5GFKFRZW5LJGENPBX5CN6UAGDXIFKTSYW1XTBIGD6U9Tbhkqbuqcycspqsrvzldnptye8sfzycypciwrbjn7vvpz0bgwjqysdefzycypciwrbjn7vvpzuqakrt57s+iwfwoarsycsmbmurtvbtsnz13dvskgeeizgebvc05747mlgybs/iracpkz3e2nq2rq28qfirajcbmaqhkhkf5r6nj3qc3thz3o0grhhwhecgiwrgkmaicvugdzimzjgoraozfziioq+ttiohmeh5klznpqcigdelium5ttiohiaj5ws79fwkgmegzkend DW2SHDTPTCPKTNPQCIGDELIUM8TTIOHQAH86A7OI8FQMSIWRBJ57VV559MQOH0/Judzksbedfitsf23V8ZWLEDQDZ4DRVXQAKSFMACHOEDUWECKU5WBEIWybwej5nggdhqnayqgzgeaaqfmqssisadgjvsapmizkeko9rwjlxgxiay+dzkkkqdcrcycsiaorswfhqez4jioqc5qcialelihklnq84vhgsam0ztekkuaccxcyizpbqvluj0b+jtng1sikawxmghgqa1g+awcfbjlnwsjlaigxmsgsigsg2mqimrfah1hmuw1cocwelmgkofqyhweqnkbrp6w0claglmqsiisguigd80iseiuybqaaebxelijetaak6ua5kigq63thz3o 0grhhwemyfjt3iyrbuciifkqyvi1nt3h2di0rq6+qfiramy1kubiofkoiwrdjclw1vlkqrb0jx1eq/EiA4IzVgsRwpQAIETELIhmutmbaC5tbWmtqlws/EiAIwzXUNVwpAEJEzIJIRqytNbXLm1taM+2Fwo8E6I9Rmr/ljfgkgfaqsysewtrjqorb2jvljk+JEA/tfk83ezeusbeapifkqyag2tq9obfqxnumufisapwm1f5cztbqaayjmawfzlyy6fj5xccavwm6qcwcaacicwavbczijkhf2qwlwo9mvbndyvdlwigrdjubtxikmoynre6vysztxqawrgzijkha6vhrpmh6rmr87usbeaqq xcyizuryargmkzm1wnd+VDF0KgCCIWRDJ0LXV0J9qMB9D535DlwIgCGIWRDJ6bTXuHA3Mx9Cz2EYvBUB/ifkqyei11bgrjmeyr8mw+ilAOgPMQsiGb22Gvf6eZiPoTuMGL0UAP0HZGEAAEQFMQSAACAQIFKQYRWZBYAERIEJMGDY2HYLAPBHZIJQITRL96DBMWWAUYJIGFKEDELIHKJTPQ6AVPYQIMACXIJLIA+CNMQSRZ1FZDT4WE0ZMJTA45SGHGJ5GFKCXRW83XOQEDMKFKN0CPAWRSYSCWQRCWZTYFMMLM2TSKAFBCZIJJPAQSJ1IDEXZBZBGGHGG5GFKUXTW01WRT0MYHZ9REXTGAFXCWAAICOIGmOA7DIZB/+EFHWYAMYFMAAPP7+H0LLYIPWXEXE XNAXI6LQQP+IWRDJTAsy0nOcjU3r6uobhB8JQrd+Y6vX6/V6VV3DPYALWWA68MJMPQIMZBJJPV1VLKQRB2JHQFAJQSIWRVJL9XQXRVHL/S5VGSTMMAMINMLKASAJZKEK9xwththc0trte1y4uecupgmxxlrnmtktxfnvgoagtelipmttbulm9uac20fwo/Egyoq7tnx85d8j937NxloJhljubvMvOVAkBCzIJI5qutOY7StvaO8soq4UeCARk6Zpmj+bvmfkuakbczipipa2tdfun07r0hkfwi0fwxp00ne3zd5kpswgjwzblfvmdpbzg4k0bh79xlarazfam6p5u8yupqcwgfermruyklj6anh cyeugczimybaabebebteliaqtzelevh5flenr6h8vvajmmcqzyfyambbifkqy60yb+VYoR1X96mtva940v7q2qHx+bfp1xtw33t5yud3lozwu15jydzsabczijkja6vjrrepnqLy+Dlqnuan7k9fthogw8/ks7Av/71rwEHtMzaMcTEpQAxjpgFkUxcW03WPTJ6isrnr2lc99Wx45dfdZ3wUSUh5lfXHvzo0Ndf//Xgx58MGLPM2v/WxKUAMY6YBZFMXFtNthdKVM2vrv3gw48GTBgmNr+69u09++ZX1wa/m4l3czjxkucmi2zbjpxvjpt7brsybd+0mmhvcnoxaqyyhzemndtrvpy3nlrk2l/aj0tlivihnid3h2di2 0RQ6+Qfjrroo5SWFigtelipm7Tuyxlxphfsiiwsgegfaotmdfcjqzzllemmiwk2wkrm4gxqcmbexcwagheyaoawrgzgoihfyacbkdnggemoagdimybuwt0dva7du7ykv7s2lnlmu3ys2+/98w/8v27unuWrVgV7qsQswY8A1xOARgUMQsixcKCDEO3g9+xc5cUrSTKFLV+Y+ueffuVd5bil3wHZQfO4K9CzBrwDJi+Ougslalejmiwriqf2mrodvchxyzpnnV27ZFWIG8M883P09XNbuoscwkfgziodvtljqczifkskhdpq6M/IgJOGEmXMkv+ujFnyUNZd92w5+PEnuY6y/L6fmbx8dbg6qycofkobyhmxcylfsg017oypz2iwkjjdx3knowk yz/Ks/OLZnx85etudm/p7FWJW8DNg6HnnEMVIKUAMImZBpBiprcZdvxxizJIpR7OUlq1Y5fb0zV28JOBTEbOCnAGjX0URohgpBYhBxCyIFCO11bhX46sVszJsrkcff/LNt/dm5Zf4f5WYFfwMxEJPkBgpBYhBxCyIRG2NHa6Z846fOLm26Wb/Lx In routine, write and use bulges for one case... Then check for intersection of green lwpolyline and circle; if there are 3 points of intersection (use 'intersectwith method) which will always be true if bulges are opposite, you then switch bulge signs and the result should be like it was drawn in your picture... If intersectwith returns single point or equal points to apex quadrant point of circle, then sign assumptions are correct and routine should terminate without needing of switching bulge signs... Try the following:
(defun c:bend ( / cir par ply rad ) (if (and (setq ply (select "\nSelect 2D polyline: " "LWPOLYLINE")) (setq cir (select "\nSelect circle: " "CIRCLE")) (setq par (vlax-curve-getparamatpoint (car ply) (vlax-curve-getclosestpointto (car ply) (trans (cadr ply) 1 0))) cir (entget (car cir)) rad (bendradius "\nSpecify bend radius: " (cdr (assoc 40 cir))) ) ) (entmake (append '( (000 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (090 . 6) (070 . 0) ) (bend (vlax-curve-getpointatparam (car ply) (fix par)) (vlax-curve-getpointatparam (car ply) (1+ (fix par))) (cdr (assoc 10 cir)) (cdr (assoc 40 cir)) rad ) ) ) ) (princ))(defun select ( msg typ / sel ) (while (progn (setvar 'errno 0) (setq sel (entsel msg)) (cond ( (= 7 (getvar 'errno)) (princ "\nMissed, try again.") ) ( (null sel) nil) ( (/= typ (cdr (assoc 0 (entget (car sel))))) (princ "\nInvalid object selected.") ) ) ) ) sel)(defun bendradius ( msg rad / rtn ) (while (and (progn (initget 6) (setq rtn (getdist msg))) ( Come on man....This is ridiculous! Looks more like a christmas present then an answer to me . I will try it as soon as possible, merry christmas! @gsc... You can avoid bulges - you just need points...
(defun c:bend ( / acos li ci d c a r br ap1 ap2 ip apc1 apc2 ip1h ip2h an1 an2 ip1h1 ip1h2 ip2h1 ip2h2 s1 e1 s2 e2 apc11 apc12 apc21 apc22 sm1 em1 sm2 em2 ) (defun acos ( x ) (cond ((equal x 1.0 1e- 0.0) ((equal x 0.0 1e- (* 0.5 pi)) ((equal x -1.0 1e- pi) ((and (minusp x) (equal x 0.0 1e-) (* 1.5 pi)) ((atan (/ (sqrt (- 1 (* x x))) x))) ) ) (if (and (progn (while (or (not (setq li (car (entsel "\nPick line entity...")))) (if li (/= (cdr (assoc 0 (entget li))) "LINE"))) (prompt "\nMissed or picked entity is not line enitity...") ) t ) (progn (while (or (not (setq ci (car (entsel "\nPick circle entity...")))) (if ci (/= (cdr (assoc 0 (entget ci))) "CIRCLE"))) (prompt "\nMissed or picked entity is not circle enitity...") ) t ) (if (>= (setq d (distance (setq c (cdr (assoc 10 (entget ci)))) (inters c (polar c (+ (* 0.5 pi) (setq a (angle (cdr (assoc 10 (entget li))) (cdr (assoc 11 (entget li)))))) 1.0) (cdr (assoc 10 (entget li))) (cdr (assoc 11 (entget li))) nil))) (setq r (cdr (assoc 40 (entget ci))))) (progn (prompt "\nLine enitity does not pass through circle or don't have apparent intersections with circle or it is touching circle in single apex point... Quitting...") nil ) t ) (setq br (getdist "\nPick or specify bend radius : ")) (progn (while (< br r) (prompt "\nBend radius must be larger than radius of circle (> ") (princ (rtos r 2 50)) (prompt ")") (setq br (getdist "\nPick or specify bend radius : ")) ) t ) ) (progn (setq ap1 (polar c (+ (* 0.5 pi) a) r) ap2 (polar c (- a (* 0.5 pi)) r)) (setq ip (inters ap1 ap2 (cdr (assoc 10 (entget li))) (cdr (assoc 11 (entget li))) nil)) (if (> (distance ip ap1) (distance ip ap2)) (mapcar 'set '(ap1 ap2) (list ap2 ap1)) ) (setq apc1 (polar ap1 (angle ap1 ap2) br) apc2 (polar ap2 (angle ap2 ap1) br)) (setq ip1h (mapcar '/ (mapcar '+ ip ap1) (list 2.0 2.0 2.0)) ip2h (mapcar '/ (mapcar '+ ip ap2) (list 2.0 2.0 2.0))) (setq an1 (acos (/ (distance apc1 ip1h) (distance apc1 ap1))) an2 (acos (/ (distance apc2 ip2h) (distance apc2 ap2)))) (setq ip1h1 (polar apc1 (+ an1 (angle ap2 ap1)) br) ip1h2 (polar apc1 (- (angle ap2 ap1) an1) br)) (setq ip2h1 (polar apc2 (+ an2 (angle ap1 ap2)) br) ip2h2 (polar apc2 (- (angle ap1 ap2) an2) br)) (setq s1 (mapcar '+ ip1h1 (mapcar '- ip1h1 ap1)) e1 (mapcar '+ ip1h2 (mapcar '- ip1h2 ap1))) (setq s2 (mapcar '+ ip2h1 (mapcar '- ip2h1 ap2)) e2 (mapcar '+ ip2h2 (mapcar '- ip2h2 ap2))) (setq apc11 (mapcar '+ ip1h1 (mapcar '- ip1h1 apc1)) apc12 (mapcar '+ ip1h2 (mapcar '- ip1h2 apc1))) (setq apc21 (mapcar '+ ip2h1 (mapcar '- ip2h1 apc2)) apc22 (mapcar '+ ip2h2 (mapcar '- ip2h2 apc2))) (setq sm1 (polar apc11 (angle apc11 (mapcar '/ (mapcar '+ s1 ip1h1) (list 2.0 2.0 2.0))) br)) (setq em1 (polar apc12 (angle apc12 (mapcar '/ (mapcar '+ e1 ip1h2) (list 2.0 2.0 2.0))) br)) (setq sm2 (polar apc21 (angle apc21 (mapcar '/ (mapcar '+ s2 ip2h1) (list 2.0 2.0 2.0))) br)) (setq em2 (polar apc22 (angle apc22 (mapcar '/ (mapcar '+ e2 ip2h2) (list 2.0 2.0 2.0))) br)) (vl-cmdf "_.PLINE" "_non" s1 "_A" "_S" "_non" sm1 "_non" ip1h1 "_S" "_non" ap1 "_non" ip1h2 "_S" "_non" em1 "_non" e1 "") (vl-cmdf "_.PLINE" "_non" s2 "_A" "_S" "_non" sm2 "_non" ip2h1 "_S" "_non" ap2 "_non" ip2h2 "_S" "_non" em2 "_non" e2 "") ) ) (princ))Regards, merry christmas! I have tested both solutions succesfully, thanx for it, but I am focussing on Lee's code:
In my example I used a straight polyline (red line) with only 2 points as an example.
But this polyline can also have multiple vertices and possible tangent arc-segments.
In fact there can be multiple circles around the route of the polyline, which need to be avoided.
This means that there may be more vertex points than only PT1 and PT2 (in between or outside)
So I also need to:
[*] List the vertex points and bulges of the existing (red) polyline
[*] Figure out which vertex points are possibly between PT1 and PT2 and if there remove them from the list
[*] Insert the "Bend"
[*] Draw the new polyline
[*]Remove the old polyline
How do i approach step 2?
Other thing is, it does happen (small chance) that the CP circle is exactly on the polyline. This means that the user should have the choice to the re-route the polyline right or left from the circle.
页:
[1]