找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1036|回复: 13

[求助] 请教通过点表绘制z非零的多段线

[复制链接]

已领礼包: 1336个

财富等级: 财源广进

发表于 2016-11-20 21:05:25 | 显示全部楼层 |阅读模式

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

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

×

  1. (defun c:ttt ( / p1 p2 p3 p4)

  2.   (command "ucs" "w""")
  3. ;(setvar "osmode" 3)
  4. (vl-cmdf "ucs" "3p"
  5.   (setq p1    '(  0 0 100                    ) )
  6.   (setq p2      ' ( 100 0  100)                  )
  7.   (setq p3    ' (100  0 200)              )
  8.   (setq p4         ' (0 0 200)             )
  9.   )
  10.   (vl-cmdf "pline" (trans p1 0 1) (trans p2 0 1) (trans p3 0 1)(trans p4 0 1)"c""")
  11.    
  12.   (command "ucs" "w""")
  13.   (princ)
  14. )
  15. 我这里是每个点这样设置的,哪位朋友帮忙修改下, p1 p2 p3 p4 由任意长度点表代替!谢谢!


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

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-11-20 22:40:28 | 显示全部楼层
看你的数据,Z值是不同的,这样不能生成二维多段线,只能生成3DPOLYLINE。
二维多段线是平面实体,Z值必须相同。
所以你不能用PLINE命令,要用3DPOLY命令。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

 楼主| 发表于 2016-11-20 22:49:38 | 显示全部楼层

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

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

 楼主| 发表于 2016-11-20 22:54:44 | 显示全部楼层

多谢指点,我是用的,三维多段线,不好编揖,想改成多段线,用上面这种ucs能绘出非零的z值,但必须这样写,想用个点表代替下,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-11-20 23:01:59 | 显示全部楼层
本帖最后由 newer 于 2016-11-20 23:03 编辑

LWPOLYLINE和2DPOLYLINE是平面实体,就是说所有的点必须在一个平面上,所以你构造的点表,不管Z值是什么,这些点必须在一个平面上,从这些点算出平面的法向向量组码210的值,而点坐标仍然是二维点,不要Z。用你收集的ENTMAKE创建多段线就行了,别忘了加上210组码。

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-11-20 23:41:56 | 显示全部楼层
本帖最后由 newer 于 2016-11-20 23:43 编辑
;;;-----------------------------------------------------------;;
;;; 向量乘标量(系数)                                              ;;
;;; Vector x Scalar - Lee Mac                                      ;;
;;; Args: v - vector in R^n, s - real scalar                      ;;
;;;-----------------------------------------------------------;;
(defun MAT:vxs ( v s )
  (mapcar (function (lambda ( n ) (* n s))) v)
)
;;;-----------------------------------------------------------;;
;;; 单位向量                                                      ;;
;;; Unit Vector - Lee Mac                                     ;;
;;; Args: v - vector in R^n                                      ;;
;;;-----------------------------------------------------------;;
(defun MAT:Unitization (v)
  ( (lambda (n)
      (if (equal 0.0 n 1e-14)
        nil
        (MAT:vxs v (/ 1.0 n))
      )
    )
    (MAT:norm v)
  )
)
;;;-----------------------------------------------------------;;
;;; 向量的模(长度)                                              ;;
;;; Vector Norm - Lee Mac                                             ;;
;;; Args: v - vector in R^n                                      ;;
;;;-----------------------------------------------------------;;
(defun MAT:norm ( v )
  (sqrt (apply '+ (mapcar '* v v)))
)
;;;-----------------------------------------------------------;;
;;; 两向量的叉积                                              ;;
;;; Vector Cross Product                                       ;;
;;; Args: u,v - vectors in R^3                                      ;;
;;;-----------------------------------------------------------;;
(defun MAT:vxv ( u v )
  (list
    (- (* (cadr u) (caddr v)) (* (cadr v) (caddr u)))
    (- (* (car  v) (caddr u)) (* (car  u) (caddr v)))
    (- (* (car  u) (cadr  v)) (* (car  v) (cadr  u)))
  )
)
(defun c:tt ()
  (setq p1 '(0 0 100))
  (setq p2 '(100 0 100))
  (setq p3 '(100 0 200))
  (setq p4 '(0 0 200))
  (setq vec1 (mapcar '- p2 p1)
        vec2 (mapcar '- p3 p1)
        z210 (MAT:vxv vec1 vec2)
        z210 (MAT:Unitization z210)
  )
  (setq pts (mapcar '(lambda(x)(list (car x)(cadr x))) (list p1 p2 p3 p4)))
  (entmake (append
             (list (cons 0 "LWPOLYLINE")
                   (cons 100 "AcDbEntity")
                   (cons 100 "AcDbPolyline")
                   (cons 90 (length pts))
                   (cons 210 z210)
             )
             (mapcar
               '(lambda        (x)
                  (cons 10 x)
                )
               pts
             )
           )
  )  (princ)
)


执行TT,看生成的多段线是你想要的不。


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

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

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

使用道具 举报

已领礼包: 1757个

财富等级: 堆金积玉

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

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

 楼主| 发表于 2016-11-21 21:14:52 | 显示全部楼层

谢谢老大,很好,这么晚还在帮助别人,一定要注意身体,我得了电脑病,l希望大家多多锻炼身体!我还个想法先不管Z作为零,画了再三维旋转。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-11-21 21:25:02 | 显示全部楼层

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

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

 楼主| 发表于 2016-11-22 15:13:28 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq p1 '(0 0 100))
  3.   (setq p2 '(100 0 100))
  4.   (setq p3 '(100 0 200))
  5.   (setq p4 '(0 0 200))
  6.   (setq        ls (list (list (car p1) (caddr p1))
  7.                  (list (car p2) (caddr p2))
  8.                  (list (car p3) (caddr p3))
  9.                  (list (car p4) (caddr p4))
  10.            )
  11.   )
  12.   (EntmakePline ls)
  13.   (command "rotate3d" (entlast) ""(list(car p1)(cadr p1)) (list(car p2)(cadr p2)) 90 "")
  14. )

  15. (defun EntmakePline (lst / pt)
  16.   (entmake (append (list '(0 . "LWPOLYLINE")
  17.                          '(100 . "AcDbEntity")
  18.                          '(100 . "AcDbPolyline")
  19.                          (cons 90 (length lst))
  20.                          '(70 . 1)
  21.                    )
  22.                    (mapcar '(lambda (pt) (cons 10 pt)) lst)
  23.            )
  24.   )
  25. )

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 有始有终奖!

查看全部评分

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

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 16:24 , Processed in 0.214595 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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