找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6923|回复: 53

[标注] 根据坡度动态标注标高

[复制链接]

已领礼包: 58个

财富等级: 招财进宝

发表于 2017-8-15 12:21:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 newer 于 2017-8-15 17:33 编辑

ele.gif

因为下午出差,很多地方还未完善,如鼠标离开对话框事件,出图比例变化会多产生一个标高等;
交互上的细节都没仔细考虑,支持变坡度分段标注没有完善,即每次以上一点作为计算基点,实时读取对话框数据;应该用动态块做标高符号,这样可以选择多种形式的标高符号。

关于说对话框需要密码,我也搞不清楚。我上传了一个odcl文件,把(dcl-project-import .....)删除,替换
为(dcl-project-load "rd_ele")试试。

先发一个看看。
部分API函数没用明白,就用vl的代替了,求大师指点
代码注释采用英文是因为我一粘贴就乱码,同样拷贝论坛的中文也乱码,如何解决?

  1. (defun c:tt (/             *error* AN             CURVE   DIST    DWGSCALLE             E             E0             E1             F1             LOOP    LTH     P1
  2.              PA             PA0     SLOPE   STARTELE             STARTP
  3.             )
  4.   (command "_opendcl")
  5. ;;;---odlc form ----------------------------------------------------------------
  6.   (dcl-Project-Import
  7.     '("YWt6A7gYAACtuG11BuKT5rUxLT9quME8JVjaVO7mxi79f10v/+jp03UdcmTdXvw4ImbbLu62td58"
  8.       "D18lbVoP2/fEDhsihjICOunEr+N1aVKCfTJqp2f9NENNPpmgUTYt3jqtIAyR46Gyok2ZsEOh4t97"
  9.       "j+dGmDABdZQPeOOW6619nj1g7tF1rCZkP0v8DKjedMWaIFDbFDra1VD7L/XW6tyW7igjdDcTcxzW"
  10.       "7WBfl2drlOytcmipaD0saejk9kIlVakMz2LtxPbPJlnd+/O7MN9wV8u1S1TIPCwte5MxMlL47vn+"
  11.       "DyxwHl3qeUfmRRpmoX9yHm4DrC/DPa8CtSJpq3yRAutI3Dizs2Lhu970vUGh0kMp6feRboFYYFwA"
  12.       "fWFi+VTMnQsVgDqD+fcNQyCpjVGTjfjhbcFeADgCsxsBDXkIvWd4686tKfxYit0vhmxQNuVQc7dD"
  13.       "WIsjjNkQxBITNLuoAN/1DGFKiKoxBJVvHMG5s8GWVejGPL7lqUMPFZw0I/UsiqIFKUHWTEVFiZty"
  14.       "lqD7eIkOItednJT2RsMxIBw6/A/flrT/NLIKW4dmggWaM5W2jaQ2T5MzyCNlKzGe8PrZGlHh5l3R"
  15.       "7sahiwT/OGI9z+KjmJWLNMcg0BnfICVBWMvhH4y9b69lSqFeQQiuxpUTgf3k8SQQrcLtXMjiBkXz"
  16.       "gejG55gT9ZVDDT3MsHrfVBLRYd2slXU7uCiMjPabHLP5t9V4nDicPbpvjORdDWWz3F0sMRSILxpB"
  17.       "WrtCXCA1ouXOEZLUYJzAugbgkYTVcS6FR5wIzAHrxuvG7QbyhkiPV5y3ugKzjPKLubKpSYyR1dpz"
  18.       "WemsjS2IAzMF6QXC/pAjHsb8KXgB/drXCF3lmtV8mWVR1/0rkQnREq2zTVlAiPJLUwVLJtSEJ5P1"
  19.       "1qWGkS6JI8arF4yhFJVQe+P7S3lWkCYJ8e/kcGHaJ/nS3UqVuhqyC/jtG7LUq7LmGyan8uf18rPm"
  20.       "4KrM2+cH+RSJXOVTTUwl0E/CJsgywFza7lMzoi/IYmABCyCBUe53p0xTxLUYteuz6MRLHgZPI1KC"
  21.       "tbtsCx9MeJecpovXjxaVw63n3nWNwj1pE7aUnOGt+2ATSJ7tk1ztFR17Ce84RacjmlJREWmXdbTs"
  22.       "2QEH1zMXSedoixgJ7YGrECxhAX70BqnK"
  23.      )
  24.   )
  25. ;;;---function of odcl events----------------------------------------------------
  26.   (defun c:RD_ele/form1#OnMouseEntered (/)
  27.     (dcl-control-setfocus RD_ele/form1)
  28.   )
  29.   (defun c:RD_ele/form1#OnMouseMovedOff        (/)
  30.     (setq slope            (atof (dcl-control-gettext rd_ele/form1/textbox1))
  31.           startEle  (atof (dcl-control-gettext rd_ele/form1/textbox2))
  32.           dwgScalle (atof (dcl-control-gettext rd_ele/form1/textbox3))
  33.     )
  34.     (dcl-control-setkeepfocus RD_ele/form1 nil)
  35.   )
  36. ;;;-error function---------------------------------------------------------------
  37. ;;;------------------------------------------------------------------------------
  38.   (defun *error* (msg)
  39.     (if        (dcl-form-isactive rd_ele/form1)
  40.       (dcl-form-close rd_ele/form1)
  41.     )
  42.     (entdel (entlast))
  43.     (xdrx_pointmonitor)
  44.     (xdrx_sysvar_pop)
  45.     (princ "\n canceled ... ... ... ... ")
  46.     (princ)
  47.   )
  48.   (vl-acad-defun 'dragtext)
  49. ;;;--Create a block function-----------------------------------------------------
  50. ;;;------------------------------------------------------------------------------
  51.   (defun addNewBlock (name / ss n)
  52.     (xdrx_setmark
  53.       (xdrx_polyline_make
  54.         '((0 0 0) (300 300 0) (-300 300 0) (0 0 0))
  55.       )
  56.     )
  57.     (entdel (entlast))
  58.     (xdrx_polyline_make
  59.       '((0 0 0) (300 300 0) (-300 300 0) (0 0 0))
  60.     )
  61.     (xdrx_setpropertyvalue
  62.       (xdrx_AttributeDef_make
  63.         (xdrx_text_make '(-580.0 400.0 0.0) "ELE_symbol" 300 0)
  64.         t
  65.       )
  66.       "textstring"
  67.       "%%p0.000"
  68.     )
  69.     (setq ss (xdrx_getss))
  70.     (xdrx_block_make name ss '(0 0 0))
  71.     (setq n -1)
  72.     (repeat (sslength ss) (entdel (ssname ss (setq n (1+ n)))))
  73.   )
  74. ;;;---callback function------------------------------------------------------------
  75. ;;;--------------------------------------------------------------------------------
  76.   (defun dragtext (p)
  77.     (setq p1 (xdrx_curve_getclosestpoint curve p))
  78.     (if        (not (equal lastpoint p1 1e-3))
  79.       (progn (setq f1         (xdrx_curve_getfirstderiv curve p1)
  80.                    dist         (xdrx_curve_getdistatpoint curve p1)
  81.                    s_dir (xdrx_entity_direction e)
  82.                    s_ori (xdrx_getpropertyvalue e "position")
  83.                    an1         (xdrx_vector_angle s_dir)
  84.                    an2         (xdrx_vector_angle f1)
  85.              )
  86.              (if (and (> an1 (/ pi 2.0)) (< an1 (* 3 (/ pi 2.0))))
  87.                (setq s_dir (xdrx_vector_negate s_dir))
  88.              )
  89.              (if (and (> an2 (/ pi 2.0)) (< an2 (* 3 (/ pi 2.0))))
  90.                (setq f1 (xdrx_vector_negate f1))
  91.              )
  92.              (xdrx_entity_align
  93.                e
  94.                s_ori
  95.                (mapcar '+ s_ori s_dir)
  96.                p1
  97.                (mapcar '+ p1 f1)
  98.              )
  99.              (xdrx_setpropertyvalue
  100.                att
  101.                "textstring"
  102.                (rtos (+ startEle (* dist slope 1e-3)) 2 3)
  103.              )
  104.       )
  105.     )
  106.     (setq lastpoint p1)
  107.   )
  108. ;;;---end of dragtext ,main program starts-----------------------------------------
  109.   (xdrx_begin)
  110.   (if (not (tblsearch "block" "$ele_symbol"))
  111.     (ADDNEWBLOCK "$ele_symbol")
  112.   )
  113.   (xdrx_sysvar_push '("orthomode" 0) '("autosnap" 55) '("dimzin" 0))
  114.   (and (setq e0        (xdrx_entsel
  115.                   "\n拾取曲线<退出>:"
  116.                   '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))
  117.                 )
  118.        )
  119.        (setq curve (car e0))
  120.        (setq p1 (cadr e0))
  121.        (setq lth (xdrx_curve_getdistatparam
  122.                    curve
  123.                    (xdrx_curve_getendparam curve)
  124.                  )
  125.        )
  126.   )
  127.   (setq        startp (if (< (setq pa (xdrx_curve_getparamatpoint curve p1))
  128.                       (* 0.5 (xdrx_curve_getendparam curve))
  129.                    )
  130.                  t
  131.                  nil
  132.                )
  133.   )
  134.   (setq loop t)
  135. ;;;-------------------------------------------------------------------------------  
  136.   (dcl-form-show rd_ele/form1)
  137.   (while loop
  138.     (setq slope            (atof (dcl-control-gettext rd_ele/form1/textbox1))
  139.           startEle  (atof (dcl-control-gettext rd_ele/form1/textbox2))
  140.           dwgScalle (atof (dcl-control-gettext rd_ele/form1/textbox3))
  141.     )
  142.     (setq e   (xdrx_insert_make "$ele_symbol" '(-100000.0 -100000.0 0) (/ dwgScalle 100) 0)
  143.           att (car (xdrx_getpropertyvalue e "AttributeEntities"))
  144.     )
  145.     (xdrx_pointmonitor "dragtext")
  146.     (if        (not (getpoint "\n确定标高插入位置<结束>:"))
  147.       (progn (entdel (entlast))
  148.              (xdrx_pointmonitor)
  149.              (setq loop nil)
  150.              (if (dcl-form-isactive rd_ele/form1)
  151.                (dcl-form-close rd_ele/form1)
  152.              )
  153.       )
  154.     )
  155.   )
  156.   (xdrx_sysvar_pop)
  157.   (xdrx_end)
  158.   (princ)
  159. )








评分

参与人数 1D豆 +5 贡献 +1 收起 理由
newer + 5 + 1 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-15 17:09:39 | 显示全部楼层

修改了一楼的代码,可以正常运行了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-15 12:45:57 | 显示全部楼层
修改下对话框吧,要密码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2017-8-15 13:21:30 | 显示全部楼层
很好的设想,学习了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-15 13:44:34 | 显示全部楼层
附件是odcl原文件,我没设密码啊
用xdrx_drag_jig拖动效果更好,因为忽略了对被拖动对象的自身捕捉,所以更流畅
代码:
  1. (defun c:tt (/                     *error*             AN
  2.              CURVE             DIST             DWGSCALLE
  3.              E                     E0                     E1
  4.              F1                     LOOP             LTH
  5.              P1                     PA                     PA0
  6.              SLOPE             STARTELE             STARTP
  7.              c:RD_ele/form1#OnMouseEntered
  8.              c:RD_ele/form1#OnMouseMovedOff rtn
  9.             )



  10.   (command "_opendcl")
  11. ;;;---odlc form ----------------------------------------------------------------
  12.   (dcl-Project-Import
  13.     '("YWt6A7gYAACUsJuiBuKTJjMxLT9qQ3GkTL/UPhycPHN48jpTyrtcCx/yv7pWJn9dUPKML1Rvevx0"
  14.       "unMlbVoP2/fEDhsihueGbyPGvvOQIsYOn3FOLxoZclSLsMqOoEX3Smv1eESzyg2YsKIJoeMFkOPK"
  15.       "WkflOsSFJK7+LZY44Qp1vqVc3iZxOiYn+VC6z21v+i/5Vnw2dpDs5/7n0+sPfuNc9V5aXVN3NTE2"
  16.       "qd3esqjfXYvO2qjmPsM23KZb4c42fIwmw0kcSgj2Wlbd1racOB02yrkbM9MCigm6lvLedgATmlSW"
  17.       "yH+0PH+sM2CdMx5+PUZVNasxhqx8NeXfEGxgWALvDuyOebxd+tHHjrhQkvituUvOE9U+coMWbAJ/"
  18.       "mTrIIa4Hh2PsYPnEkqzKV2UzBEoSyroaK3y0GcfTgjAo8WwoyoBLtJiC5QjKFP8ZEDRh+2RNQdgD"
  19.       "6r0o7Y68ryrnU5Gvxq4MkQEYtbOEWfrhbAAyhnmnLZ90d7EalR6JtY+AT4u4S3ErG5XHXaPRIcKq"
  20.       "vkNiKZTWhgoqsBbhhgkqvC8HtzGJtvGJd9FfokkRyk88i2xARRHiiytFC/6aGXYJ7IA1+qV2CW1g"
  21.       "WQL9jne8LY2AN58npWANdiG2wLG8IlnQ2oOtiIVkB3xnnc5+FBA0qy5yegFh3U2k42BFOPNCGLXL"
  22.       "LIuuoBGYYO/AHLxijdv6hSOfmhE8VbTbiWY0ibfGP8AxPcPOk+asCKjtY3BQ06mGVKfP4+DFsCAB"
  23.       "Pp1dSBCpBnkPVz4GZUOBa58YjKUYqQVo+FoVed/UkyuhuBqrWRycaMyMzvO1S0A6KEtsEFwC7g7q"
  24.       "0pgyzuvClrZyuduFi5RsfdVHTYZk2wYL5B3q0p7Z1ptSj36nG/PFR7BksoQizUR99cfsBlbk59tA"
  25.       "CdjhF+BDiNAJQsgWiIBXJefjdc6vppEenVPGpxpUmyyNWnUgql0jT6lk5tcc+I1rDYcoslSCo/Qn"
  26.       "9mslT9OS1NuPwl11krsBLFMpZcYuy3KZ1Z**zVtWSpTOVjgcWiLwsHAbNQbMAbsE8uq1YN4ULr1"
  27.       "LuBpNbl17Z/3adMp2FlEpBDhInfCToVjwha5QcQ72HBKrVNM6sE7UKEl2p8cgGjnvPXFOwT9LByK"
  28.       "QVHv0hDtR7d49cIzlIh1+LiqXA=="
  29.      )
  30.   )

  31. ;;;---function of odcl events----------------------------------------------------

  32.   (defun c:RD_ele/form1#OnMouseEntered (/)
  33.     (dcl-control-setfocus RD_ele/form1)
  34.   )
  35.   (defun c:RD_ele/form1#OnMouseMovedOff        (/)
  36.     (dcl-control-setkeepfocus RD_ele/form1 nil)
  37.   )


  38. ;;;-error function---------------------------------------------------------------
  39. ;;;------------------------------------------------------------------------------
  40.   (defun *error* (msg)
  41.     (if        (dcl-form-isactive rd_ele/form1)
  42.       (dcl-form-close rd_ele/form1)
  43.     )
  44.     (entdel (entlast))
  45.     (xdrx_pointmonitor)
  46.     (xdrx_sysvar_pop)
  47.     (princ "\n canceled ... ... ... ... ")
  48.     (princ)
  49.   )
  50.   (vl-acad-defun 'dragtext)
  51. ;;;--Create a block function-----------------------------------------------------
  52. ;;;------------------------------------------------------------------------------

  53.   (defun addNewBlock (name / ss n)
  54.     (xdrx_setmark
  55.       (xdrx_polyline_make
  56.         '((0 0 0) (300 300 0) (-300 300 0) (0 0 0))
  57.       )
  58.     )
  59.     (entdel (entlast))
  60.     (xdrx_polyline_make
  61.       '((0 0 0) (300 300 0) (-300 300 0) (0 0 0))
  62.     )
  63.     (xdrx_setpropertyvalue
  64.       (xdrx_AttributeDef_make
  65.         (xdrx_text_make '(-580.0 400.0 0.0) "ELE_symbol" 300 0)
  66.         t
  67.       )
  68.       "textstring"
  69.       "%%p0.000"
  70.     )
  71.     (setq ss (xdrx_getss))
  72.     (xdrx_block_make name ss '(0 0 0))
  73.     (setq n -1)
  74.     (repeat (sslength ss)
  75.       (entdel (ssname ss (setq n (1+ n))))
  76.     )
  77.   )

  78. ;;;---callback function------------------------------------------------------------
  79. ;;;--------------------------------------------------------------------------------

  80.   (defun dragtext (p)
  81.     (setq p1   (vlax-curve-getclosestpointto curve p)
  82.           f1   (vlax-curve-getfirstderiv
  83.                  curve
  84.                  (vlax-curve-getparamatpoint curve p1)
  85.                )
  86.           pa0  (vlax-curve-getparamatpoint curve p1)
  87.           dist (if startp
  88.                  (vlax-curve-getdistatparam curve pa0)
  89.                  (- lth (vlax-curve-getdistatparam curve pa0))
  90.                )
  91.           an   (xdrx_vector_angle f1)
  92.           an   (xd::geom:angleformat an)
  93.     )
  94. ;;;---The spacing between text and polyline may change abnormally if using API-----
  95. ;;;---So using Vl functions instead------------------------------------------------

  96. ;;;    (foreach n (xdrx_insert_getattribs e)
  97. ;;;      (xdrx_setpropertyvalue
  98. ;;;        n
  99. ;;;        "textstring"
  100. ;;;        (rtos dist 2 3)
  101. ;;;        "rotation"
  102. ;;;        an
  103. ;;;      )
  104. ;;;    )
  105. ;;;    (xdrx_setpropertyvalue e "rotation" an)
  106. ;;;    (vla-put-insertionpoint
  107. ;;;      (vlax-ename->vla-object e)
  108. ;;;      (vlax-3d-point p1)
  109. ;;;    )

  110. ;;;---Using vl functions----------------------------------------------------------

  111.     (setq e1 (vlax-ename->vla-object e))
  112.     (foreach each (vlax-safearray->list
  113.                     (vlax-variant-value (vla-GetAttributes e1))
  114.                   )
  115.       (vla-put-textstring
  116.         each
  117.         (rtos (+ startEle (* dist slope 1e-3)) 2 3)
  118.       )
  119.     )
  120.     (vla-put-rotation e1 an)
  121.     (vla-put-InsertionPoint e1 (vlax-3d-point p1))

  122. ;;;--------------------------------------------------------------------------------
  123.   )
  124. ;;;---end of dragtext ,main program starts-----------------------------------------
  125.   (xdrx_begin)
  126.   (if (not (tblsearch "block" "$ele_symbol"))
  127.     (ADDNEWBLOCK "$ele_symbol")
  128.   )
  129.   (xdrx_sysvar_push '("orthomode" 0) '("autosnap" 55))
  130.   (and (setq e0 (entsel "\nselect insert"))
  131.        (setq curve (car e0))
  132.        (setq p1 (cadr e0))
  133.        (setq lth (xdrx_curve_getdistatparam
  134.                    curve
  135.                    (xdrx_curve_getendparam curve)
  136.                  )
  137.        )
  138.   )
  139.   (setq        startp (if (< (setq pa
  140.                              (xdrx_curve_getparamatpoint
  141.                                curve
  142.                                p1
  143.                              )
  144.                       )
  145.                       (* 0.5 (vlax-curve-getendparam curve))
  146.                    )
  147.                  t
  148.                  nil
  149.                )
  150.   )
  151.   (setq loop t)
  152. ;;;-------------------------------------------------------------------------------  
  153.   (dcl-form-show rd_ele/form1)
  154.   (while loop
  155.     (setq slope            (atof (dcl-control-gettext rd_ele/form1/textbox1))
  156.           startEle  (atof (dcl-control-gettext rd_ele/form1/textbox2))
  157.           dwgScalle (atof (dcl-control-gettext rd_ele/form1/textbox3))
  158.     )
  159.     (xdrx_initget "s")
  160.     (setq e (xdrx_insert_make "$ele_symbol" p1 (/ dwgScalle 100) 0))

  161.     (xdrx_setenttodb e)
  162.     (if        (and
  163.           (setq        rtn
  164.                  (xdrx_drag_jig
  165.                    "dragtext"
  166.                    "\nselect the position of text[exit(s)]"
  167.                    "s"
  168.                    (+ 128)
  169.                    0
  170.                    p1
  171.                  )
  172.           )
  173.           (equal (type rtn) 'list)
  174.         )
  175.       (setq loop t)
  176.       (progn (setq loop nil)
  177.              (entdel (entlast))
  178.              (if (dcl-form-isactive rd_ele/form1)
  179.                (dcl-form-close rd_ele/form1)
  180.              )
  181.       )
  182.     )
  183.   )
  184.   (if (equal -4 rtn)
  185.     (progn
  186. ;;;      (entdel (entlast))
  187.       (if (dcl-form-isactive rd_ele/form1)
  188.         (dcl-form-close rd_ele/form1)
  189.       )
  190.     )
  191.   )
  192.   (xdrx_sysvar_pop)
  193.   (xdrx_end)
  194. )

RD_ele.rar

955 Bytes, 下载次数: 97, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-15 13:51:56 | 显示全部楼层
drag_jig效果
008.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-15 13:56:35 | 显示全部楼层
本帖最后由 newer 于 2017-8-15 13:59 编辑

拖动文字回调函数里面另外一个用 “对齐” 的思路实现的方法,这个能化复杂的问题为简单的,不用扣细节,如角度等等,就是按照视觉看到的,找到前后对齐轴就可以了。


(xdrx_entity_align ent 原点1 原点2 目标点1 目标点2)
原点2 、目标点2 根据切线向量求出前后两个位置的。

动态标标高.gif

  1. (defun c:tt (/ *error*)
  2.   (defun *error* (msg)
  3.     (xdrx_pointmonitor)
  4.     (xdrx_sysvar_pop)
  5.     (princ "\n canceled ... ... ... ... ")
  6.     (princ)
  7.   )
  8.   (vl-acad-defun 'dragtext)
  9.   (defun dragtext (p)
  10.     (setq p1 (xdrx_curve_getclosestpoint curve p))
  11.     (if (not (equal lastpoint p1 1e-3))
  12.       (progn
  13.         (setq f1 (xdrx_curve_getfirstderiv curve p1)
  14.               dist (xdrx_curve_getdistatpoint curve p1)
  15.               s_dir (xdrx_entity_direction e)
  16.               s_ori (xdrx_getpropertyvalue e "position")
  17.               an1 (xdrx_vector_angle s_dir)
  18.               an2 (xdrx_vector_angle f1)
  19.         )
  20.         (if (and
  21.               (> an1 (/ pi 2.0))
  22.               (< an1 (* 3 (/ pi 2.0)))
  23.             )
  24.           (setq s_dir (xdrx_vector_negate s_dir))
  25.         )
  26.         (if (and
  27.               (> an2 (/ pi 2.0))
  28.               (< an2 (* 3 (/ pi 2.0)))
  29.             )
  30.           (setq f1 (xdrx_vector_negate f1))
  31.         )
  32.         (xdrx_entity_align e s_ori (mapcar
  33.                                      '+
  34.                                      s_ori
  35.                                      s_dir
  36.                                    ) p1 (mapcar
  37.                                           '+
  38.                                           p1
  39.                                           f1
  40.                                         )
  41.         )
  42.         (xdrx_setpropertyvalue att "textstring" (rtos dist 2 2))
  43.       )
  44.     )
  45.     (setq lastpoint p1)
  46.   )
  47.   (xdrx_sysvar_push '("orthomode" 0) '("autosnap" 0))
  48.   (while (and
  49.            (setq e (car (xdrx_entsel "\n选择属性块<退出>:" '((0 . "INSERT")
  50.                                       (66 . 1)
  51.                                      )
  52.                         )
  53.                    )
  54.            )
  55.            (setq curve (car (entsel "\n选择曲线:")))
  56.          )
  57.     (setq att (car (xdrx_getpropertyvalue e "AttributeEntities")))
  58.     (xdrx_pointmonitor "dragtext")
  59.     (getpoint "\nselect the position of text")
  60.     (xdrx_pointmonitor)
  61.   )
  62.   (xdrx_sysvar_pop)
  63. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-15 14:52:10 | 显示全部楼层
API 太强大了 就是没学明白
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2017-8-15 15:12:31 | 显示全部楼层
对话框还是要密码,不能运行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-15 15:21:34 | 显示全部楼层

多看手册,多用函数就熟了。
手册分类看,看向量里面都有什么,矩阵里面都有什么.....
向量、矩阵、实体变换 transform 这些都是最底层的

xdrx_entity_move,xdrx_entity_copy,xdrx_entity_mirror,xdrx_entity_rotate,xdrx_entity_align这些都是用上面的矩阵变换包装的,用上面的矩阵函数也可以写出上面这些。

实体的变换(移动)是:xdrx_entity_transform
实体的变换(拷贝)是:xdrx_entity_transformedCopy

用API写LISP程序,实际上潜移默化的受ARX写代码的流程影响。

API 一行代码完成一个任务(用LISP实现要N多代码),
几行API代码就完成了一个程序,易读易懂,实现的内部完全就是ARX的高效率。

多看看向量和矩阵的函数,然后搜索下论坛。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-15 16:16:15 | 显示全部楼层
本帖最后由 brainstorm 于 2017-8-15 16:19 编辑

把这段删了
(dcl-Project-Import
    '("YWt6A7gYAACUsJuiBuKTJjMxLT9qQ3GkTL/UPhycPHN48jpTyrtcCx/yv7pWJn9dUPKML1Rvevx0"
      "unMlbVoP2/fEDhsihueGbyPGvvOQIsYOn3FOLxoZclSLsMqOoEX3Smv1eESzyg2YsKIJoeMFkOPK"
      "WkflOsSFJK7+LZY44Qp1vqVc3iZxOiYn+VC6z21v+i/5Vnw2dpDs5/7n0+sPfuNc9V5aXVN3NTE2"
      "qd3esqjfXYvO2qjmPsM23KZb4c42fIwmw0kcSgj2Wlbd1racOB02yrkbM9MCigm6lvLedgATmlSW"
      "yH+0PH+sM2CdMx5+PUZVNasxhqx8NeXfEGxgWALvDuyOebxd+tHHjrhQkvituUvOE9U+coMWbAJ/"
      "mTrIIa4Hh2PsYPnEkqzKV2UzBEoSyroaK3y0GcfTgjAo8WwoyoBLtJiC5QjKFP8ZEDRh+2RNQdgD"
      "6r0o7Y68ryrnU5Gvxq4MkQEYtbOEWfrhbAAyhnmnLZ90d7EalR6JtY+AT4u4S3ErG5XHXaPRIcKq"
      "vkNiKZTWhgoqsBbhhgkqvC8HtzGJtvGJd9FfokkRyk88i2xARRHiiytFC/6aGXYJ7IA1+qV2CW1g"
      "WQL9jne8LY2AN58npWANdiG2wLG8IlnQ2oOtiIVkB3xnnc5+FBA0qy5yegFh3U2k42BFOPNCGLXL"
      "LIuuoBGYYO/AHLxijdv6hSOfmhE8VbTbiWY0ibfGP8AxPcPOk+asCKjtY3BQ06mGVKfP4+DFsCAB"
      "Pp1dSBCpBnkPVz4GZUOBa58YjKUYqQVo+FoVed/UkyuhuBqrWRycaMyMzvO1S0A6KEtsEFwC7g7q"
      "0pgyzuvClrZyuduFi5RsfdVHTYZk2wYL5B3q0p7Z1ptSj36nG/PFR7BksoQizUR99cfsBlbk59tA"
      "CdjhF+BDiNAJQsgWiIBXJefjdc6vppEenVPGpxpUmyyNWnUgql0jT6lk5tcc+I1rDYcoslSCo/Qn"
      "9mslT9OS1NuPwl11krsBLFMpZcYuy3KZ1Z**zVtWSpTOVjgcWiLwsHAbNQbMAbsE8uq1YN4ULr1"
      "LuBpNbl17Z/3adMp2FlEpBDhInfCToVjwha5QcQ72HBKrVNM6sE7UKEl2p8cgGjnvPXFOwT9LByK"
      "QVHv0hDtR7d49cIzlIh1+LiqXA=="
     )
  )

改为(dcl-project-load "rd_ele")试试,我上传了一个odcl原文件
我没设密码,如果还不行请N老师看看吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-8-15 16:23:23 | 显示全部楼层

是的 API效率很高 值得学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

发表于 2017-8-16 00:09:41 | 显示全部楼层
谢谢分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-8-16 00:18:07 | 显示全部楼层
看到过这种插件,实现起来感觉挺麻烦的
jdfw.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 349个

财富等级: 日进斗金

发表于 2017-8-16 07:53:48 | 显示全部楼层
谢谢楼主分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 15:09 , Processed in 0.231156 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表